diff --git a/CodeLanguages-Container/CodeLanguages-Container.xcodeproj/project.pbxproj b/CodeLanguages-Container/CodeLanguages-Container.xcodeproj/project.pbxproj index 1024130..c538100 100644 --- a/CodeLanguages-Container/CodeLanguages-Container.xcodeproj/project.pbxproj +++ b/CodeLanguages-Container/CodeLanguages-Container.xcodeproj/project.pbxproj @@ -38,6 +38,7 @@ 8E87F9542A4B7DC1008C7E13 /* TreeSitterScala in Frameworks */ = {isa = PBXBuildFile; productRef = 8E87F9532A4B7DC1008C7E13 /* TreeSitterScala */; }; 8ED0560A2A4DBE6E00829B80 /* TreeSitterTypeScript in Frameworks */ = {isa = PBXBuildFile; productRef = 8ED056092A4DBE6E00829B80 /* TreeSitterTypeScript */; }; 8EFA0B742A559F4C00021CE9 /* TreeSitterSQL in Frameworks */ = {isa = PBXBuildFile; productRef = 8EFA0B732A559F4C00021CE9 /* TreeSitterSQL */; }; + 9D01902E2BEA98B2001DFE97 /* TreeSitterEmbeddedTemplate in Frameworks */ = {isa = PBXBuildFile; productRef = 9D01902D2BEA98B2001DFE97 /* TreeSitterEmbeddedTemplate */; }; 9D6E74512A2B9B2A0070701E /* TreeSitterOCaml in Frameworks */ = {isa = PBXBuildFile; productRef = 9D6E74502A2B9B2A0070701E /* TreeSitterOCaml */; }; 9D7399242A5A245000CEF6E8 /* TreeSitterAgda in Frameworks */ = {isa = PBXBuildFile; productRef = 9D7399232A5A245000CEF6E8 /* TreeSitterAgda */; }; 9D7399272A5A2B5300CEF6E8 /* TreeSitterJulia in Frameworks */ = {isa = PBXBuildFile; productRef = 9D7399262A5A2B5300CEF6E8 /* TreeSitterJulia */; }; @@ -83,6 +84,7 @@ 9D7399272A5A2B5300CEF6E8 /* TreeSitterJulia in Frameworks */, 8E74B41D2A4C88ED003A9550 /* TreeSitterHTML in Frameworks */, 8ED0560A2A4DBE6E00829B80 /* TreeSitterTypeScript in Frameworks */, + 9D01902E2BEA98B2001DFE97 /* TreeSitterEmbeddedTemplate in Frameworks */, 28B3F05A290C36E5000CD04D /* TreeSitterRust in Frameworks */, 28AAB6AE29CA57D40087654B /* TreeSitterDart in Frameworks */, 28171CB829814CD800523F1C /* TreeSitterObjC in Frameworks */, @@ -208,6 +210,7 @@ 8E7B0EA82A5D9BB60040DDAB /* TreeSitterTOML */, 9D920B972A93B248004E4451 /* TreeSitterJSDoc */, 6C0B93A72B5DD95500323006 /* TreeSitterCSS */, + 9D01902D2BEA98B2001DFE97 /* TreeSitterEmbeddedTemplate */, ); productName = "CodeLanguages-Container"; productReference = 28B3F00C290C207D000CD04D /* CodeLanguages_Container.framework */; @@ -275,6 +278,7 @@ 8E7B0EA72A5D9BB60040DDAB /* XCRemoteSwiftPackageReference "tree-sitter-toml" */, 9D920B962A93B248004E4451 /* XCRemoteSwiftPackageReference "tree-sitter-jsdoc" */, 6C0B93A62B5DD95500323006 /* XCRemoteSwiftPackageReference "tree-sitter-css" */, + 9D01902C2BEA98B2001DFE97 /* XCRemoteSwiftPackageReference "tree-sitter-embedded-template" */, ); productRefGroup = 28B3F00D290C207D000CD04D /* Products */; projectDirPath = ""; @@ -764,6 +768,14 @@ kind = branch; }; }; + 9D01902C2BEA98B2001DFE97 /* XCRemoteSwiftPackageReference "tree-sitter-embedded-template" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/tree-sitter/tree-sitter-embedded-template.git"; + requirement = { + branch = master; + kind = branch; + }; + }; 9D6E744F2A2B9B2A0070701E /* XCRemoteSwiftPackageReference "tree-sitter-ocaml" */ = { isa = XCRemoteSwiftPackageReference; repositoryURL = "https://github.com/tree-sitter/tree-sitter-ocaml.git"; @@ -973,6 +985,11 @@ package = 8EFA0B722A559F4C00021CE9 /* XCRemoteSwiftPackageReference "tree-sitter-sql" */; productName = TreeSitterSQL; }; + 9D01902D2BEA98B2001DFE97 /* TreeSitterEmbeddedTemplate */ = { + isa = XCSwiftPackageProductDependency; + package = 9D01902C2BEA98B2001DFE97 /* XCRemoteSwiftPackageReference "tree-sitter-embedded-template" */; + productName = TreeSitterEmbeddedTemplate; + }; 9D6E74502A2B9B2A0070701E /* TreeSitterOCaml */ = { isa = XCSwiftPackageProductDependency; package = 9D6E744F2A2B9B2A0070701E /* XCRemoteSwiftPackageReference "tree-sitter-ocaml" */; diff --git a/CodeLanguages-Container/CodeLanguages-Container.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/CodeLanguages-Container/CodeLanguages-Container.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved index b166f11..2d1dd2d 100644 --- a/CodeLanguages-Container/CodeLanguages-Container.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/CodeLanguages-Container/CodeLanguages-Container.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -90,6 +90,15 @@ "revision" : "11426c5fd20eef360d5ecaf10729191f6bc5d715" } }, + { + "identity" : "tree-sitter-embedded-template", + "kind" : "remoteSourceControl", + "location" : "https://github.com/tree-sitter/tree-sitter-embedded-template.git", + "state" : { + "branch" : "master", + "revision" : "ffbf64942c334933ee7982e144557b6efb76d0b9" + } + }, { "identity" : "tree-sitter-go", "kind" : "remoteSourceControl", diff --git a/CodeLanguages-Container/CodeLanguages-Container/CodeLanguages_Container.h b/CodeLanguages-Container/CodeLanguages-Container/CodeLanguages_Container.h index b27c35d..30b8c0e 100644 --- a/CodeLanguages-Container/CodeLanguages-Container/CodeLanguages_Container.h +++ b/CodeLanguages-Container/CodeLanguages-Container/CodeLanguages_Container.h @@ -31,6 +31,7 @@ extern TSLanguage *tree_sitter_css(); extern TSLanguage *tree_sitter_dart(); extern TSLanguage *tree_sitter_dockerfile(); extern TSLanguage *tree_sitter_elixir(); +extern TSLanguage *tree_sitter_embedded_template(); extern TSLanguage *tree_sitter_go(); extern TSLanguage *tree_sitter_gomod(); extern TSLanguage *tree_sitter_haskell(); diff --git a/CodeLanguagesContainer.xcframework.zip b/CodeLanguagesContainer.xcframework.zip index de83d7d..85229fe 100644 Binary files a/CodeLanguagesContainer.xcframework.zip and b/CodeLanguagesContainer.xcframework.zip differ diff --git a/Package.resolved b/Package.resolved index 4c4e8b1..ea6fcdd 100644 --- a/Package.resolved +++ b/Package.resolved @@ -5,8 +5,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/ChimeHQ/SwiftTreeSitter.git", "state" : { - "revision" : "2599e95310b3159641469d8a21baf2d3d200e61f", - "version" : "0.8.0" + "revision" : "df25a52f72ebc5b50ae20d26d1363793408bb28b", + "version" : "0.7.1" } } ], diff --git a/README.md b/README.md index 3b327a7..b64ffbd 100644 --- a/README.md +++ b/README.md @@ -56,7 +56,7 @@ In order to add support for additional languages we have a complete guide on how | [Dart](https://github.com/lukepistrol/tree-sitter-dart/tree/feature/spm) | ✅ | ✅ | | [Dockerfile](https://github.com/camdencheek/tree-sitter-dockerfile) | ✅ | ✅ | | [Elixir](https://github.com/elixir-lang/tree-sitter-elixir) | ✅ | ✅ | -| [ERB, EJS](https://github.com/tree-sitter/tree-sitter-embedded-template) | | | +| [ERB, EJS](https://github.com/tree-sitter/tree-sitter-embedded-template) | ✅ | ✅ | | [Go](https://github.com/tree-sitter/tree-sitter-go) | ✅ | ✅ | | [Haskell](https://github.com/tree-sitter/tree-sitter-haskell) | ✅ | ✅ | | [HTML](https://github.com/tree-sitter/tree-sitter-html) | ✅ | ✅ | diff --git a/Sources/CodeEditLanguages/CodeLanguage+Definitions.swift b/Sources/CodeEditLanguages/CodeLanguage+Definitions.swift index f16eba8..024ac10 100644 --- a/Sources/CodeEditLanguages/CodeLanguage+Definitions.swift +++ b/Sources/CodeEditLanguages/CodeLanguage+Definitions.swift @@ -21,7 +21,9 @@ public extension CodeLanguage { .css, .dart, .dockerfile, + .ejs, .elixir, + .erb, .go, .goMod, .haskell, @@ -131,6 +133,16 @@ public extension CodeLanguage { rangeCommentStrings: ("", "") ) + /// A language structure for `EJS` + static let ejs: CodeLanguage = .init( + id: .ejs, + tsName: "embedded-template", + extensions: ["ejs"], + lineCommentString: "", + rangeCommentStrings: ("", ""), + highlights: ["injections-ejs"] + ) + /// A language structure for `Elixir` static let elixir: CodeLanguage = .init( id: .elixir, @@ -142,6 +154,16 @@ public extension CodeLanguage { highlights: ["injections"] ) + /// A language structure for `ERB` + static let erb: CodeLanguage = .init( + id: .erb, + tsName: "embedded-template", + extensions: ["erb"], + lineCommentString: "", + rangeCommentStrings: ("", ""), + highlights: ["injections-erb"] + ) + /// A language structure for `Go` static let go: CodeLanguage = .init( id: .go, diff --git a/Sources/CodeEditLanguages/CodeLanguage.swift b/Sources/CodeEditLanguages/CodeLanguage.swift index 07d8b6c..3b44087 100644 --- a/Sources/CodeEditLanguages/CodeLanguage.swift +++ b/Sources/CodeEditLanguages/CodeLanguage.swift @@ -103,8 +103,12 @@ public struct CodeLanguage { return tree_sitter_dart() case .dockerfile: return tree_sitter_dockerfile() + case .ejs: + return tree_sitter_embedded_template() case .elixir: return tree_sitter_elixir() + case .erb: + return tree_sitter_embedded_template() case .go: return tree_sitter_go() case .goMod: diff --git a/Sources/CodeEditLanguages/Documentation.docc/CodeLanguage.md b/Sources/CodeEditLanguages/Documentation.docc/CodeLanguage.md index a4f34ac..d2691a7 100644 --- a/Sources/CodeEditLanguages/Documentation.docc/CodeLanguage.md +++ b/Sources/CodeEditLanguages/Documentation.docc/CodeLanguage.md @@ -27,7 +27,9 @@ let language = CodeLanguage.detectLanguageFrom(url: fileURL) - CSS - Dart - Dockerfile +- EJS - Elixir +- ERB - Go - Go Mod - Haskell @@ -84,7 +86,9 @@ let language = CodeLanguage.detectLanguageFrom(url: fileURL) - ``css`` - ``dart`` - ``dockerfile`` +- ``ejs`` - ``elixir`` +- ``erb`` - ``go`` - ``goMod`` - ``haskell`` @@ -100,15 +104,20 @@ let language = CodeLanguage.detectLanguageFrom(url: fileURL) - ``markdown`` - ``markdownInline`` - ``objc`` +- ``ocaml`` +- ``ocamlInterface`` - ``perl`` - ``php`` - ``python`` +- ``regex`` - ``ruby`` - ``rust`` - ``scala`` - ``sql`` - ``swift`` - ``toml`` +- ``tsx`` +- ``typescript`` - ``verilog`` - ``yaml`` - ``zig`` diff --git a/Sources/CodeEditLanguages/Documentation.docc/TreeSitterModel.md b/Sources/CodeEditLanguages/Documentation.docc/TreeSitterModel.md index e31f57f..76e3af6 100644 --- a/Sources/CodeEditLanguages/Documentation.docc/TreeSitterModel.md +++ b/Sources/CodeEditLanguages/Documentation.docc/TreeSitterModel.md @@ -39,7 +39,9 @@ let query = TreeSitterModel.shared.swiftQuery - ``cssQuery`` - ``dartQuery`` - ``dockerfileQuery`` +- ``ejsQuery`` - ``elixirQuery`` +- ``erbQuery`` - ``goQuery`` - ``goModQuery`` - ``haskellQuery`` @@ -58,11 +60,14 @@ let query = TreeSitterModel.shared.swiftQuery - ``ocamlInterfaceQuery`` - ``phpQuery`` - ``pythonQuery`` +- ``regexQuery`` - ``rubyQuery`` - ``rustQuery`` - ``scalaQuery`` - ``sqlQuery`` - ``swiftQuery`` - ``tomlQuery`` +- ``tsxQuery`` +- ``typescriptQuery`` - ``yamlQuery`` - ``zigQuery`` diff --git a/Sources/CodeEditLanguages/Resources/tree-sitter-embedded-template/highlights.scm b/Sources/CodeEditLanguages/Resources/tree-sitter-embedded-template/highlights.scm new file mode 100644 index 0000000..0bf76a7 --- /dev/null +++ b/Sources/CodeEditLanguages/Resources/tree-sitter-embedded-template/highlights.scm @@ -0,0 +1,12 @@ +(comment_directive) @comment + +[ + "<%#" + "<%" + "<%=" + "<%_" + "<%-" + "%>" + "-%>" + "_%>" +] @keyword diff --git a/Sources/CodeEditLanguages/Resources/tree-sitter-embedded-template/injections-ejs.scm b/Sources/CodeEditLanguages/Resources/tree-sitter-embedded-template/injections-ejs.scm new file mode 100644 index 0000000..e612a93 --- /dev/null +++ b/Sources/CodeEditLanguages/Resources/tree-sitter-embedded-template/injections-ejs.scm @@ -0,0 +1,7 @@ +((content) @injection.content + (#set! injection.language "html") + (#set! injection.combined)) + +((code) @injection.content + (#set! injection.language "javascript") + (#set! injection.combined)) diff --git a/Sources/CodeEditLanguages/Resources/tree-sitter-embedded-template/injections-erb.scm b/Sources/CodeEditLanguages/Resources/tree-sitter-embedded-template/injections-erb.scm new file mode 100644 index 0000000..2824f7a --- /dev/null +++ b/Sources/CodeEditLanguages/Resources/tree-sitter-embedded-template/injections-erb.scm @@ -0,0 +1,7 @@ +((content) @injection.content + (#set! injection.language "html") + (#set! injection.combined)) + +((code) @injection.content + (#set! injection.language "ruby") + (#set! injection.combined)) diff --git a/Sources/CodeEditLanguages/TreeSitterLanguage.swift b/Sources/CodeEditLanguages/TreeSitterLanguage.swift index 850d4f4..51a487f 100644 --- a/Sources/CodeEditLanguages/TreeSitterLanguage.swift +++ b/Sources/CodeEditLanguages/TreeSitterLanguage.swift @@ -17,7 +17,9 @@ public enum TreeSitterLanguage: String { case css case dart case dockerfile + case ejs case elixir + case erb case go case goMod case haskell diff --git a/Sources/CodeEditLanguages/TreeSitterModel.swift b/Sources/CodeEditLanguages/TreeSitterModel.swift index 4ef8d58..b2fef45 100644 --- a/Sources/CodeEditLanguages/TreeSitterModel.swift +++ b/Sources/CodeEditLanguages/TreeSitterModel.swift @@ -36,8 +36,12 @@ public class TreeSitterModel { return dartQuery case .dockerfile: return dockerfileQuery + case .ejs: + return ejsQuery case .elixir: return elixirQuery + case .erb: + return erbQuery case .go: return goQuery case .goMod: @@ -142,11 +146,21 @@ public class TreeSitterModel { return queryFor(.dockerfile) }() + /// Query for `EJS` files. + public private(set) lazy var ejsQuery: Query? = { + return queryFor(.ejs) + }() + /// Query for `Elixir` files. public private(set) lazy var elixirQuery: Query? = { return queryFor(.elixir) }() + /// Query for `ERB` files. + public private(set) lazy var erbQuery: Query? = { + return queryFor(.erb) + }() + /// Query for `Go` files. public private(set) lazy var goQuery: Query? = { return queryFor(.go) diff --git a/Tests/CodeEditLanguagesTests/CodeEditLanguagesTests.swift b/Tests/CodeEditLanguagesTests/CodeEditLanguagesTests.swift index c2feda0..1893ab1 100644 --- a/Tests/CodeEditLanguagesTests/CodeEditLanguagesTests.swift +++ b/Tests/CodeEditLanguagesTests/CodeEditLanguagesTests.swift @@ -176,6 +176,25 @@ final class CodeEditLanguagesTests: XCTestCase { XCTAssertNotEqual(query?.patternCount, 0) } +// MARK: - EJS + + func test_CodeLanguageEJS() throws { + let url = URL(fileURLWithPath: "~/path/to/file.ejs") + let language = CodeLanguage.detectLanguageFrom(url: url) + + XCTAssertEqual(language.id, .ejs) + } + + func test_FetchQueryEJS() throws { + var language = CodeLanguage.ejs + language.resourceURL = bundleURL + + let data = try Data(contentsOf: language.queryURL!) + let query = try? Query(language: language.language!, data: data) + XCTAssertNotNil(query) + XCTAssertNotEqual(query?.patternCount, 0) + } + // MARK: - Elixir func test_CodeLanguageElixir() throws { @@ -202,6 +221,25 @@ final class CodeEditLanguagesTests: XCTestCase { XCTAssertNotEqual(query?.patternCount, 0) } +// MARK: - ERB + + func test_CodeLanguageERB() throws { + let url = URL(fileURLWithPath: "~/path/to/file.erb") + let language = CodeLanguage.detectLanguageFrom(url: url) + + XCTAssertEqual(language.id, .erb) + } + + func test_FetchQueryERB() throws { + var language = CodeLanguage.erb + language.resourceURL = bundleURL + + let data = try Data(contentsOf: language.queryURL!) + let query = try? Query(language: language.language!, data: data) + XCTAssertNotNil(query) + XCTAssertNotEqual(query?.patternCount, 0) + } + // MARK: - Go func test_CodeLanguageGo() throws {