Skip to content

Commit 8398367

Browse files
authored
Merge pull request #73 from lukepistrol/feat/add-language-elixir
[Feat]: Add language support for `Elixir` / Update docs for `Zig`
2 parents 2e7f406 + 6b7c195 commit 8398367

File tree

8 files changed

+54
-2
lines changed

8 files changed

+54
-2
lines changed

Package.swift

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,13 +13,14 @@ let package = Package(
1313
],
1414
dependencies: [
1515
.package(url: "https://github.com/apple/swift-docc-plugin", from: "1.0.0"),
16-
.package(url: "https://github.com/krzyzanowskim/STTextView", branch: "main"),
17-
.package(url: "https://github.com/ChimeHQ/SwiftTreeSitter", from: "0.6.0"),
16+
.package(url: "https://github.com/krzyzanowskim/STTextView", exact: "0.0.20"),
17+
.package(url: "https://github.com/ChimeHQ/SwiftTreeSitter", exact: "0.6.1"),
1818
.package(url: "https://github.com/lukepistrol/tree-sitter-bash.git", branch: "feature/spm"),
1919
.package(url: "https://github.com/tree-sitter/tree-sitter-c.git", branch: "master"),
2020
.package(url: "https://github.com/tree-sitter/tree-sitter-cpp.git", branch: "master"),
2121
.package(url: "https://github.com/tree-sitter/tree-sitter-c-sharp.git", branch: "master"),
2222
.package(url: "https://github.com/lukepistrol/tree-sitter-css.git", branch: "feature/spm"),
23+
.package(url: "https://github.com/elixir-lang/tree-sitter-elixir.git", branch: "main"),
2324
.package(url: "https://github.com/tree-sitter/tree-sitter-go.git", branch: "master"),
2425
.package(url: "https://github.com/camdencheek/tree-sitter-go-mod.git", branch: "main"),
2526
.package(url: "https://github.com/tree-sitter/tree-sitter-haskell.git", branch: "master"),
@@ -46,6 +47,7 @@ let package = Package(
4647
.product(name: "TreeSitterCPP", package: "tree-sitter-cpp"),
4748
.product(name: "TreeSitterCSharp", package: "tree-sitter-c-sharp"),
4849
.product(name: "TreeSitterCSS", package: "tree-sitter-css"),
50+
.product(name: "TreeSitterElixir", package: "tree-sitter-elixir"),
4951
.product(name: "TreeSitterGo", package: "tree-sitter-go"),
5052
.product(name: "TreeSitterGoMod", package: "tree-sitter-go-mod"),
5153
.product(name: "TreeSitterHaskell", package: "tree-sitter-haskell"),

Sources/CodeEditTextView/CodeLanguage/CodeLanguage.swift

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import TreeSitterC
1414
import TreeSitterCPP
1515
import TreeSitterCSharp
1616
import TreeSitterCSS
17+
import TreeSitterElixir
1718
import TreeSitterGo
1819
import TreeSitterGoMod
1920
import TreeSitterHaskell
@@ -93,6 +94,8 @@ public struct CodeLanguage {
9394
return tree_sitter_c_sharp()
9495
case .css:
9596
return tree_sitter_css()
97+
case .elixir:
98+
return tree_sitter_elixir()
9699
case .go:
97100
return tree_sitter_go()
98101
case .goMod:
@@ -155,6 +158,7 @@ public extension CodeLanguage {
155158
.cpp,
156159
.cSharp,
157160
.css,
161+
.elixir,
158162
.go,
159163
.goMod,
160164
.haskell,
@@ -190,6 +194,9 @@ public extension CodeLanguage {
190194
/// A language structure for `CSS`
191195
static let css: CodeLanguage = .init(id: .css, tsName: "CSS", extensions: ["css"])
192196

197+
/// A language structure for `Elixir`
198+
static let elixir: CodeLanguage = .init(id: .elixir, tsName: "Elixir", extensions: ["ex", "exs"])
199+
193200
/// A language structure for `Go`
194201
static let go: CodeLanguage = .init(id: .go, tsName: "Go", extensions: ["go"])
195202

Sources/CodeEditTextView/CodeLanguage/TreeSitterLanguage.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ public enum TreeSitterLanguage: String {
1414
case cpp
1515
case cSharp
1616
case css
17+
case elixir
1718
case go
1819
case goMod
1920
case haskell

Sources/CodeEditTextView/CodeLanguage/TreeSitterModel.swift

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@ public class TreeSitterModel {
3030
return cSharpQuery
3131
case .css:
3232
return cssQuery
33+
case .elixir:
34+
return elixirQuery
3335
case .go:
3436
return goQuery
3537
case .goMod:
@@ -90,6 +92,11 @@ public class TreeSitterModel {
9092
return queryFor(.css)
9193
}()
9294

95+
/// Query for `Elixir` files.
96+
public private(set) lazy var elixirQuery: Query? = {
97+
return queryFor(.elixir)
98+
}()
99+
93100
/// Query for `Go` files.
94101
public private(set) lazy var goQuery: Query? = {
95102
return queryFor(.go)

Sources/CodeEditTextView/Documentation.docc/Add-Languages.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -204,3 +204,7 @@ When everything is working correctly push your `tree-sitter-{lang}` changes to `
204204
> Take [this PR description](https://github.com/tree-sitter/tree-sitter-javascript/pull/223) as a template and cross-reference it with your Pull Request.
205205
206206
Now you can remove the local dependencies and replace it with the actual package URLs and submit a Pull Request for ``CodeEditTextView``.
207+
208+
## Documentation
209+
210+
Please make sure to add the newly created properties to the documentation `*.md` files.

Sources/CodeEditTextView/Documentation.docc/CodeLanguage.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ let language = CodeLanguage.detectLanguageFrom(url: fileURL)
2424
- C++
2525
- C#
2626
- CSS
27+
- Elixir
2728
- Go
2829
- Go Mod
2930
- Haskell
@@ -38,6 +39,7 @@ let language = CodeLanguage.detectLanguageFrom(url: fileURL)
3839
- Rust
3940
- Swift
4041
- YAML
42+
- Zig
4143

4244
## Topics
4345

@@ -65,6 +67,7 @@ let language = CodeLanguage.detectLanguageFrom(url: fileURL)
6567
- ``cpp``
6668
- ``cSharp``
6769
- ``css``
70+
- ``elixir``
6871
- ``go``
6972
- ``goMod``
7073
- ``haskell``
@@ -79,6 +82,7 @@ let language = CodeLanguage.detectLanguageFrom(url: fileURL)
7982
- ``rust``
8083
- ``swift``
8184
- ``yaml``
85+
- ``zig``
8286

8387
### Type Methods
8488

Sources/CodeEditTextView/Documentation.docc/TreeSitterModel.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ let query = TreeSitterModel.shared.swiftQuery
3737
- ``cppQuery``
3838
- ``cSharpQuery``
3939
- ``cssQuery``
40+
- ``elixirQuery``
4041
- ``goQuery``
4142
- ``goModQuery``
4243
- ``haskellQuery``
@@ -51,3 +52,4 @@ let query = TreeSitterModel.shared.swiftQuery
5152
- ``rustQuery``
5253
- ``swiftQuery``
5354
- ``yamlQuery``
55+
- ``zigQuery``

Tests/CodeEditTextViewTests/CodeEditTextViewTests.swift

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,22 @@ final class CodeEditTextViewTests: XCTestCase {
107107
XCTAssertEqual(language.id, .css)
108108
}
109109

110+
// MARK: Elixir
111+
112+
func test_CodeLanguageElixir() throws {
113+
let url = URL(fileURLWithPath: "~/path/to/file.ex")
114+
let language = CodeLanguage.detectLanguageFrom(url: url)
115+
116+
XCTAssertEqual(language.id, .elixir)
117+
}
118+
119+
func test_CodeLanguageElixir2() throws {
120+
let url = URL(fileURLWithPath: "~/path/to/file.exs")
121+
let language = CodeLanguage.detectLanguageFrom(url: url)
122+
123+
XCTAssertEqual(language.id, .elixir)
124+
}
125+
110126
// MARK: Go
111127

112128
func test_CodeLanguageGo() throws {
@@ -247,6 +263,15 @@ final class CodeEditTextViewTests: XCTestCase {
247263
XCTAssertEqual(language.id, .yaml)
248264
}
249265

266+
// MARK: Zig
267+
268+
func test_CodeLanguageZig() throws {
269+
let url = URL(fileURLWithPath: "~/path/to/file.zig")
270+
let language = CodeLanguage.detectLanguageFrom(url: url)
271+
272+
XCTAssertEqual(language.id, .zig)
273+
}
274+
250275
// MARK: Unsupported
251276

252277
func test_CodeLanguageUnsupported() throws {

0 commit comments

Comments
 (0)