Unnamed repository; edit this file 'description' to name the repository.
add earthfile language configuration (#10111)
Gaëtan Lehmann 2024-04-03
parent 5484424 · commit 226b275
-rw-r--r--book/src/generated/lang-support.md1
-rw-r--r--languages.toml17
-rw-r--r--runtime/queries/earthfile/highlights.scm74
-rw-r--r--runtime/queries/earthfile/indents.scm1
-rw-r--r--runtime/queries/earthfile/injections.scm9
-rw-r--r--runtime/queries/earthfile/textobjects.scm1
6 files changed, 103 insertions, 0 deletions
diff --git a/book/src/generated/lang-support.md b/book/src/generated/lang-support.md
index 6bbea10a..a4e2a84a 100644
--- a/book/src/generated/lang-support.md
+++ b/book/src/generated/lang-support.md
@@ -37,6 +37,7 @@
| dockerfile | ✓ | | | `docker-langserver` |
| dot | ✓ | | | `dot-language-server` |
| dtd | ✓ | | | |
+| earthfile | ✓ | ✓ | ✓ | `earthlyls` |
| edoc | ✓ | | | |
| eex | ✓ | | | |
| ejs | ✓ | | | |
diff --git a/languages.toml b/languages.toml
index 6b47f65d..8b7c43a7 100644
--- a/languages.toml
+++ b/languages.toml
@@ -28,6 +28,7 @@ dhall-lsp-server = { command = "dhall-lsp-server" }
docker-langserver = { command = "docker-langserver", args = ["--stdio"] }
docker-compose-langserver = { command = "docker-compose-langserver", args = ["--stdio"]}
dot-language-server = { command = "dot-language-server", args = ["--stdio"] }
+earthlyls = { command = "earthlyls" }
elixir-ls = { command = "elixir-ls", config = { elixirLS.dialyzerEnabled = false } }
elm-language-server = { command = "elm-language-server" }
elvish = { command = "elvish", args = ["-lsp"] }
@@ -3443,3 +3444,19 @@ indent = { tab-width = 2, unit = " " }
[[grammar]]
name = "ohm"
source = { git = "https://github.com/novusnota/tree-sitter-ohm", rev = "80f14f0e477ddacc1e137d5ed8e830329e3fb7a3" }
+
+[[language]]
+name = "earthfile"
+scope = "source.earthfile"
+injection-regex = "earthfile"
+roots = ["Earthfile"]
+file-types = [
+ { glob = "Earthfile" },
+]
+comment-token = "#"
+indent = { tab-width = 2, unit = " " }
+language-servers = ["earthlyls"]
+
+[[grammar]]
+name = "earthfile"
+source = { git = "https://github.com/glehmann/tree-sitter-earthfile", rev = "2a6ab191f5f962562e495a818aa4e7f45f8a556a" }
diff --git a/runtime/queries/earthfile/highlights.scm b/runtime/queries/earthfile/highlights.scm
new file mode 100644
index 00000000..a0191174
--- /dev/null
+++ b/runtime/queries/earthfile/highlights.scm
@@ -0,0 +1,74 @@
+(string_array "," @punctuation.delimiter)
+(string_array ["[" "]"] @punctuation.bracket)
+
+(arg_command "ARG" @keyword)
+(build_command "BUILD" @keyword)
+(cache_command "CACHE" @keyword)
+(cmd_command "CMD" @keyword)
+(copy_command "COPY" @keyword)
+(do_command "DO" @keyword)
+(entrypoint_command "ENTRYPOINT" @keyword)
+(env_command "ENV" @keyword)
+(expose_command "EXPOSE" @keyword)
+(from_command "FROM" @keyword)
+(from_dockerfile_command "FROM DOCKERFILE" @keyword)
+(function_command "FUNCTION" @keyword)
+(git_clone_command "GIT CLONE" @keyword)
+(host_command "HOST" @keyword)
+(import_command "IMPORT" @keyword)
+(label_command "LABEL" @keyword)
+(let_command "LET" @keyword)
+(project_command "PROJECT" @keyword)
+(run_command "RUN" @keyword)
+(save_artifact_command ["SAVE ARTIFACT" "AS LOCAL"] @keyword)
+(save_image_command "SAVE IMAGE" @keyword)
+(set_command "SET" @keyword)
+(user_command "USER" @keyword)
+(version_command "VERSION" @keyword)
+(volume_command "VOLUME" @keyword)
+(with_docker_command "WITH DOCKER" @keyword)
+(workdir_command "WORKDIR" @keyword)
+
+(for_command ["FOR" "IN" "END"] @keyword.control.repeat)
+(if_command ["IF" "END"] @keyword.control.conditional)
+(elif_block ["ELSE IF"] @keyword.control.conditional)
+(else_block ["ELSE"] @keyword.control.conditional)
+(import_command ["IMPORT" "AS"] @keyword.control.import)
+(try_command ["TRY" "FINALLY" "END"] @keyword.control.exception)
+(wait_command ["WAIT" "END"] @keyword.control)
+
+
+[
+ (comment)
+ (line_continuation_comment)
+] @comment
+
+(line_continuation) @operator
+
+[
+ (target_ref)
+ (target_artifact)
+ (function_ref)
+] @function
+
+(target (identifier) @function)
+
+[
+ (double_quoted_string)
+ (single_quoted_string)
+] @string
+(unquoted_string) @string.special
+(escape_sequence) @constant.character.escape
+
+(variable) @variable
+(expansion ["$" "{" "}" "(" ")"] @punctuation.special)
+(build_arg) @variable
+(options (_) @variable.parameter)
+
+(options (_ "=" @operator))
+(build_arg "=" @operator)
+(arg_command "=" @operator)
+(env_command "=" @operator)
+(label "=" @operator)
+(set_command "=" @operator)
+(let_command "=" @operator)
diff --git a/runtime/queries/earthfile/indents.scm b/runtime/queries/earthfile/indents.scm
new file mode 100644
index 00000000..2bee23e8
--- /dev/null
+++ b/runtime/queries/earthfile/indents.scm
@@ -0,0 +1 @@
+(target) @indent
diff --git a/runtime/queries/earthfile/injections.scm b/runtime/queries/earthfile/injections.scm
new file mode 100644
index 00000000..7435a400
--- /dev/null
+++ b/runtime/queries/earthfile/injections.scm
@@ -0,0 +1,9 @@
+((comment) @injection.content
+ (#set! injection.language "comment"))
+
+((line_continuation_comment) @injection.content
+ (#set! injection.language "comment"))
+
+((shell_fragment) @injection.content
+ (#set! injection.language "bash")
+ (#set! injection.include-children))
diff --git a/runtime/queries/earthfile/textobjects.scm b/runtime/queries/earthfile/textobjects.scm
new file mode 100644
index 00000000..ae0364a2
--- /dev/null
+++ b/runtime/queries/earthfile/textobjects.scm
@@ -0,0 +1 @@
+(target (block) @function.inside) @function.around