Skip to content

Commit e7334f4

Browse files
authored
Merge pull request #15 from lukepistrol/feat/add-dockerfile-support
[feat] Add Dockerfile support
2 parents 76a9f9c + aff0490 commit e7334f4

File tree

13 files changed

+124
-3
lines changed

13 files changed

+124
-3
lines changed

CodeLanguages-Container/CodeLanguages-Container.xcodeproj/project.pbxproj

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
objects = {
88

99
/* Begin PBXBuildFile section */
10+
2846B262296BA1CF005F60B6 /* TreeSitterDockerfile in Frameworks */ = {isa = PBXBuildFile; productRef = 2846B261296BA1CF005F60B6 /* TreeSitterDockerfile */; };
1011
28B3F010290C207D000CD04D /* CodeLanguages_Container.h in Headers */ = {isa = PBXBuildFile; fileRef = 28B3F00F290C207D000CD04D /* CodeLanguages_Container.h */; settings = {ATTRIBUTES = (Public, ); }; };
1112
28B3F02D290C35D9000CD04D /* TreeSitterC in Frameworks */ = {isa = PBXBuildFile; productRef = 28B3F02C290C35D9000CD04D /* TreeSitterC */; };
1213
28B3F030290C35F9000CD04D /* TreeSitterCPP in Frameworks */ = {isa = PBXBuildFile; productRef = 28B3F02F290C35F9000CD04D /* TreeSitterCPP */; };
@@ -43,6 +44,7 @@
4344
files = (
4445
28B3F051290C36B1000CD04D /* TreeSitterPHP in Frameworks */,
4546
28B3F042290C365C000CD04D /* TreeSitterHaskell in Frameworks */,
47+
2846B262296BA1CF005F60B6 /* TreeSitterDockerfile in Frameworks */,
4648
28B3F039290C362C000CD04D /* TreeSitterElixir in Frameworks */,
4749
28B3F02D290C35D9000CD04D /* TreeSitterC in Frameworks */,
4850
28B3F04B290C368B000CD04D /* TreeSitterJS in Frameworks */,
@@ -157,6 +159,7 @@
157159
28B3F05F290C3720000CD04D /* TreeSitterYAML */,
158160
28B3F062290C372D000CD04D /* TreeSitterZig */,
159161
28B9F7A9290DDAC900245748 /* TreeSitterBash */,
162+
2846B261296BA1CF005F60B6 /* TreeSitterDockerfile */,
160163
);
161164
productName = "CodeLanguages-Container";
162165
productReference = 28B3F00C290C207D000CD04D /* CodeLanguages_Container.framework */;
@@ -207,6 +210,7 @@
207210
28B3F05E290C3720000CD04D /* XCRemoteSwiftPackageReference "tree-sitter-yaml" */,
208211
28B3F061290C372D000CD04D /* XCRemoteSwiftPackageReference "tree-sitter-zig" */,
209212
28B9F7A6290DDAB500245748 /* XCRemoteSwiftPackageReference "tree-sitter-bash" */,
213+
2846B260296BA1CF005F60B6 /* XCRemoteSwiftPackageReference "tree-sitter-dockerfile" */,
210214
);
211215
productRefGroup = 28B3F00D290C207D000CD04D /* Products */;
212216
projectDirPath = "";
@@ -446,6 +450,14 @@
446450
/* End XCConfigurationList section */
447451

448452
/* Begin XCRemoteSwiftPackageReference section */
453+
2846B260296BA1CF005F60B6 /* XCRemoteSwiftPackageReference "tree-sitter-dockerfile" */ = {
454+
isa = XCRemoteSwiftPackageReference;
455+
repositoryURL = "https://github.com/camdencheek/tree-sitter-dockerfile.git";
456+
requirement = {
457+
branch = main;
458+
kind = branch;
459+
};
460+
};
449461
28B3F02B290C35D9000CD04D /* XCRemoteSwiftPackageReference "tree-sitter-c" */ = {
450462
isa = XCRemoteSwiftPackageReference;
451463
repositoryURL = "https://github.com/tree-sitter/tree-sitter-c.git";
@@ -609,6 +621,11 @@
609621
/* End XCRemoteSwiftPackageReference section */
610622

611623
/* Begin XCSwiftPackageProductDependency section */
624+
2846B261296BA1CF005F60B6 /* TreeSitterDockerfile */ = {
625+
isa = XCSwiftPackageProductDependency;
626+
package = 2846B260296BA1CF005F60B6 /* XCRemoteSwiftPackageReference "tree-sitter-dockerfile" */;
627+
productName = TreeSitterDockerfile;
628+
};
612629
28B3F02C290C35D9000CD04D /* TreeSitterC */ = {
613630
isa = XCSwiftPackageProductDependency;
614631
package = 28B3F02B290C35D9000CD04D /* XCRemoteSwiftPackageReference "tree-sitter-c" */;

CodeLanguages-Container/CodeLanguages-Container.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved

Lines changed: 11 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

CodeLanguages-Container/CodeLanguages-Container/CodeLanguages_Container.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ extern TSLanguage *tree_sitter_c();
2727
extern TSLanguage *tree_sitter_cpp();
2828
extern TSLanguage *tree_sitter_c_sharp();
2929
extern TSLanguage *tree_sitter_css();
30+
extern TSLanguage *tree_sitter_dockerfile();
3031
extern TSLanguage *tree_sitter_elixir();
3132
extern TSLanguage *tree_sitter_go();
3233
extern TSLanguage *tree_sitter_gomod();
216 KB
Binary file not shown.

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ In order to add support for additional languages we have a complete guide on how
5353
| [C++](https://github.com/tree-sitter/tree-sitter-cpp) |||
5454
| [C#](https://github.com/tree-sitter/tree-sitter-c-sharp) |||
5555
| [CSS](https://github.com/lukepistrol/tree-sitter-css) |||
56+
| [Dockerfile](https://github.com/camdencheek/tree-sitter-dockerfile) |||
5657
| [Elixir](https://github.com/elixir-lang/tree-sitter-elixir) |||
5758
| [ERB, EJS](https://github.com/tree-sitter/tree-sitter-embedded-template) | | |
5859
| [Go](https://github.com/tree-sitter/tree-sitter-go) |||

Sources/CodeEditLanguages/CodeLanguage.swift

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,9 @@ public struct CodeLanguage {
3333
public let tsName: String
3434

3535
/// A set of file extensions for the language
36+
///
37+
/// In special cases this can also be a file name
38+
/// (e.g `Dockerfile`, `Makefile`)
3639
public let extensions: Set<String>
3740

3841
/// The query URL of a language this language inherits from. (e.g.: C for C++)
@@ -73,6 +76,8 @@ public struct CodeLanguage {
7376
return tree_sitter_c_sharp()
7477
case .css:
7578
return tree_sitter_css()
79+
case .dockerfile:
80+
return tree_sitter_dockerfile()
7681
case .elixir:
7782
return tree_sitter_elixir()
7883
case .go:
@@ -120,7 +125,7 @@ public extension CodeLanguage {
120125
/// - Returns: A language structure
121126
static func detectLanguageFrom(url: URL) -> CodeLanguage {
122127
let fileExtension = url.pathExtension.lowercased()
123-
let fileName = url.pathComponents.last?.lowercased()
128+
let fileName = url.pathComponents.last // should not be lowercase since it has to match e.g. `Dockerfile`
124129
// This is to handle special file types without an extension (e.g., Makefile, Dockerfile)
125130
let fileNameOrExtension = fileExtension.isEmpty ? (fileName != nil ? fileName! : "") : fileExtension
126131
if let lang = allLanguages.first(where: { lang in lang.extensions.contains(fileNameOrExtension)}) {
@@ -137,6 +142,7 @@ public extension CodeLanguage {
137142
.cpp,
138143
.cSharp,
139144
.css,
145+
.dockerfile,
140146
.elixir,
141147
.go,
142148
.goMod,
@@ -173,6 +179,9 @@ public extension CodeLanguage {
173179
/// A language structure for `CSS`
174180
static let css: CodeLanguage = .init(id: .css, tsName: "css", extensions: ["css"])
175181

182+
/// A language structure for `Dockerfile`
183+
static let dockerfile: CodeLanguage = .init(id: .dockerfile, tsName: "dockerfile", extensions: ["Dockerfile"])
184+
176185
/// A language structure for `Elixir`
177186
static let elixir: CodeLanguage = .init(id: .elixir, tsName: "elixir", extensions: ["ex", "exs"])
178187

Sources/CodeEditLanguages/Documentation.docc/CodeLanguage.md

Lines changed: 2 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+
- Dockerfile
2728
- Elixir
2829
- Go
2930
- Go Mod
@@ -67,6 +68,7 @@ let language = CodeLanguage.detectLanguageFrom(url: fileURL)
6768
- ``cpp``
6869
- ``cSharp``
6970
- ``css``
71+
- ``dockerfile``
7072
- ``elixir``
7173
- ``go``
7274
- ``goMod``

Sources/CodeEditLanguages/Documentation.docc/TreeSitterModel.md

Lines changed: 1 addition & 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+
- ``dockerfileQuery``
4041
- ``elixirQuery``
4142
- ``goQuery``
4243
- ``goModQuery``
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
(raw_string_literal
2+
delimiter: (raw_string_delimiter) @injection.language
3+
(raw_string_content) @injection.content)
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
[
2+
"FROM"
3+
"AS"
4+
"RUN"
5+
"CMD"
6+
"LABEL"
7+
"EXPOSE"
8+
"ENV"
9+
"ADD"
10+
"COPY"
11+
"ENTRYPOINT"
12+
"VOLUME"
13+
"USER"
14+
"WORKDIR"
15+
"ARG"
16+
"ONBUILD"
17+
"STOPSIGNAL"
18+
"HEALTHCHECK"
19+
"SHELL"
20+
"MAINTAINER"
21+
"CROSS_BUILD"
22+
] @keyword
23+
24+
[
25+
":"
26+
"@"
27+
] @operator
28+
29+
(comment) @comment
30+
31+
32+
(image_spec
33+
(image_tag
34+
":" @punctuation.special)
35+
(image_digest
36+
"@" @punctuation.special))
37+
38+
(double_quoted_string) @string
39+
40+
(expansion
41+
[
42+
"$"
43+
"{"
44+
"}"
45+
] @punctuation.special
46+
) @none
47+
48+
((variable) @constant
49+
(#match? @constant "^[A-Z][A-Z_0-9]*$"))
50+
51+

0 commit comments

Comments
 (0)