Skip to content

Commit 2e7f406

Browse files
authored
Merge pull request #74 from lukepistrol/feat/add-language-haskell
[Feat]: Add language support for `Haskell`
2 parents f2b8764 + ad60569 commit 2e7f406

7 files changed

Lines changed: 29 additions & 0 deletions

File tree

Package.swift

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ let package = Package(
2222
.package(url: "https://github.com/lukepistrol/tree-sitter-css.git", branch: "feature/spm"),
2323
.package(url: "https://github.com/tree-sitter/tree-sitter-go.git", branch: "master"),
2424
.package(url: "https://github.com/camdencheek/tree-sitter-go-mod.git", branch: "main"),
25+
.package(url: "https://github.com/tree-sitter/tree-sitter-haskell.git", branch: "master"),
2526
.package(url: "https://github.com/mattmassicotte/tree-sitter-html.git", branch: "feature/spm"),
2627
.package(url: "https://github.com/tree-sitter/tree-sitter-java.git", branch: "master"),
2728
.package(url: "https://github.com/tree-sitter/tree-sitter-javascript.git", branch: "master"),
@@ -47,6 +48,7 @@ let package = Package(
4748
.product(name: "TreeSitterCSS", package: "tree-sitter-css"),
4849
.product(name: "TreeSitterGo", package: "tree-sitter-go"),
4950
.product(name: "TreeSitterGoMod", package: "tree-sitter-go-mod"),
51+
.product(name: "TreeSitterHaskell", package: "tree-sitter-haskell"),
5052
.product(name: "TreeSitterHTML", package: "tree-sitter-html"),
5153
.product(name: "TreeSitterJava", package: "tree-sitter-java"),
5254
.product(name: "TreeSitterJS", package: "tree-sitter-javascript"),

Sources/CodeEditTextView/CodeLanguage/CodeLanguage.swift

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import TreeSitterCSharp
1616
import TreeSitterCSS
1717
import TreeSitterGo
1818
import TreeSitterGoMod
19+
import TreeSitterHaskell
1920
import TreeSitterHTML
2021
import TreeSitterJava
2122
import TreeSitterJS
@@ -96,6 +97,8 @@ public struct CodeLanguage {
9697
return tree_sitter_go()
9798
case .goMod:
9899
return tree_sitter_gomod()
100+
case .haskell:
101+
return tree_sitter_haskell()
99102
case .html:
100103
return tree_sitter_html()
101104
case .java:
@@ -154,6 +157,7 @@ public extension CodeLanguage {
154157
.css,
155158
.go,
156159
.goMod,
160+
.haskell,
157161
.html,
158162
.java,
159163
.javascript,
@@ -192,6 +196,9 @@ public extension CodeLanguage {
192196
/// A language structure for `GoMod`
193197
static let goMod: CodeLanguage = .init(id: .goMod, tsName: "GoMod", extensions: ["mod"])
194198

199+
/// A language structure for `Haskell`
200+
static let haskell: CodeLanguage = .init(id: .haskell, tsName: "Haskell", extensions: ["hs"])
201+
195202
/// A language structure for `HTML`
196203
static let html: CodeLanguage = .init(id: .html, tsName: "HTML", extensions: ["html", "htm"])
197204

Sources/CodeEditTextView/CodeLanguage/TreeSitterLanguage.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ public enum TreeSitterLanguage: String {
1616
case css
1717
case go
1818
case goMod
19+
case haskell
1920
case html
2021
case java
2122
case javascript

Sources/CodeEditTextView/CodeLanguage/TreeSitterModel.swift

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,8 @@ public class TreeSitterModel {
3434
return goQuery
3535
case .goMod:
3636
return goModQuery
37+
case .haskell:
38+
return haskellQuery
3739
case .html:
3840
return htmlQuery
3941
case .java:
@@ -98,6 +100,11 @@ public class TreeSitterModel {
98100
return queryFor(.goMod)
99101
}()
100102

103+
/// Query for `Haskell` files.
104+
public private(set) lazy var haskellQuery: Query? = {
105+
return queryFor(.haskell)
106+
}()
107+
101108
/// Query for `HTML` files.
102109
public private(set) lazy var htmlQuery: Query? = {
103110
return queryFor(.html)

Sources/CodeEditTextView/Documentation.docc/CodeLanguage.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ let language = CodeLanguage.detectLanguageFrom(url: fileURL)
2626
- CSS
2727
- Go
2828
- Go Mod
29+
- Haskell
2930
- HTML
3031
- Java
3132
- JavaScript
@@ -66,6 +67,7 @@ let language = CodeLanguage.detectLanguageFrom(url: fileURL)
6667
- ``css``
6768
- ``go``
6869
- ``goMod``
70+
- ``haskell``
6971
- ``html``
7072
- ``java``
7173
- ``javascript``

Sources/CodeEditTextView/Documentation.docc/TreeSitterModel.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ let query = TreeSitterModel.shared.swiftQuery
3939
- ``cssQuery``
4040
- ``goQuery``
4141
- ``goModQuery``
42+
- ``haskellQuery``
4243
- ``htmlQuery``
4344
- ``javaQuery``
4445
- ``javascriptQuery``

Tests/CodeEditTextViewTests/CodeEditTextViewTests.swift

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,15 @@ final class CodeEditTextViewTests: XCTestCase {
125125
XCTAssertEqual(language.id, .goMod)
126126
}
127127

128+
// MARK: Haskell
129+
130+
func test_CodeLanguageHaskell() throws {
131+
let url = URL(fileURLWithPath: "~/path/to/file.hs")
132+
let language = CodeLanguage.detectLanguageFrom(url: url)
133+
134+
XCTAssertEqual(language.id, .haskell)
135+
}
136+
128137
// MARK: HTML
129138

130139
func test_CodeLanguageHTML() throws {

0 commit comments

Comments
 (0)