aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTomas Sandven <tomas@sandven.email>2024-03-03 21:02:10 +0100
committerChristian Clason <c.clason@uni-graz.at>2024-03-21 10:32:09 +0100
commitcf685ce85f335bab0c523bfd5fed92fedc5a8b3d (patch)
tree6c573c3c4140a7194c725c23c398183597db9159
parentbot(lockfile): update asm, c, d, html, svelte, v, wing (diff)
downloadnvim-treesitter-cf685ce85f335bab0c523bfd5fed92fedc5a8b3d.tar
nvim-treesitter-cf685ce85f335bab0c523bfd5fed92fedc5a8b3d.tar.gz
nvim-treesitter-cf685ce85f335bab0c523bfd5fed92fedc5a8b3d.tar.bz2
nvim-treesitter-cf685ce85f335bab0c523bfd5fed92fedc5a8b3d.tar.lz
nvim-treesitter-cf685ce85f335bab0c523bfd5fed92fedc5a8b3d.tar.xz
nvim-treesitter-cf685ce85f335bab0c523bfd5fed92fedc5a8b3d.tar.zst
nvim-treesitter-cf685ce85f335bab0c523bfd5fed92fedc5a8b3d.zip
Add "just" parser
-rw-r--r--lockfile.json3
-rw-r--r--lua/nvim-treesitter/parsers.lua8
-rw-r--r--queries/just/folds.scm6
-rw-r--r--queries/just/highlights.scm133
-rw-r--r--queries/just/indents.scm14
-rw-r--r--queries/just/injections.scm41
-rw-r--r--queries/just/locals.scm35
7 files changed, 240 insertions, 0 deletions
diff --git a/lockfile.json b/lockfile.json
index 386ee5678..7d11de232 100644
--- a/lockfile.json
+++ b/lockfile.json
@@ -344,6 +344,9 @@
"julia": {
"revision": "e84f10db8eeb8b9807786bfc658808edaa1b4fa2"
},
+ "just": {
+ "revision": "5fe40d3622042c66465c4673b209a71e8376f902"
+ },
"kconfig": {
"revision": "486fea71f61ad9f3fd4072a118402e97fe88d26c"
},
diff --git a/lua/nvim-treesitter/parsers.lua b/lua/nvim-treesitter/parsers.lua
index c7010e10c..b1360eda0 100644
--- a/lua/nvim-treesitter/parsers.lua
+++ b/lua/nvim-treesitter/parsers.lua
@@ -1033,6 +1033,14 @@ list.julia = {
maintainers = { "@theHamsta" },
}
+list.just = {
+ install_info = {
+ url = "https://github.com/IndianBoy42/tree-sitter-just",
+ files = { "src/parser.c", "src/scanner.c" },
+ },
+ maintainers = { "@Hubro" },
+}
+
list.kconfig = {
install_info = {
url = "https://github.com/amaanq/tree-sitter-kconfig",
diff --git a/queries/just/folds.scm b/queries/just/folds.scm
new file mode 100644
index 000000000..fea3a5058
--- /dev/null
+++ b/queries/just/folds.scm
@@ -0,0 +1,6 @@
+([
+ (recipe)
+ (string)
+ (external_command)
+] @fold
+ (#trim! @fold))
diff --git a/queries/just/highlights.scm b/queries/just/highlights.scm
new file mode 100644
index 000000000..ae054c12b
--- /dev/null
+++ b/queries/just/highlights.scm
@@ -0,0 +1,133 @@
+[
+ "true"
+ "false"
+] @boolean
+
+[
+ "if"
+ "else"
+] @keyword.conditional
+
+[
+ "alias"
+ "set"
+ "shell"
+ "mod"
+] @keyword
+
+[
+ "import"
+ "export"
+] @keyword.import
+
+[
+ ":="
+ "?"
+ "=="
+ "!="
+ "=~"
+ "@"
+ "="
+ "$"
+ "*"
+ "+"
+ "&&"
+ "@-"
+ "-@"
+ "-"
+ "/"
+ ":"
+] @operator
+
+[
+ "("
+ ")"
+ "["
+ "]"
+ "{{"
+ "}}"
+ "{"
+ "}"
+] @punctuation.bracket
+
+[
+ "`"
+ "```"
+] @punctuation.special
+
+"," @punctuation.delimiter
+
+(shebang) @keyword.directive
+
+(comment) @comment @spell
+
+[
+ (string)
+ (external_command)
+] @string
+
+(escape_sequence) @string.escape
+
+(module
+ (identifier) @module)
+
+(assignment
+ (identifier) @variable)
+
+(alias
+ (identifier) @variable)
+
+(value
+ (identifier) @variable)
+
+; Recipe definitions
+(recipe_header
+ (identifier) @function)
+
+(dependency
+ (identifier) @function.call)
+
+(dependency_expression
+ (identifier) @function.call)
+
+(parameter
+ (identifier) @variable.parameter)
+
+(dependency_expression
+ (expression
+ (value
+ (identifier) @variable.parameter)))
+
+; Fallback highlighting for recipe bodies
+(recipe
+ (recipe_body) @string
+ (#set! "priority" 90))
+
+; Ref: https://just.systems/man/en/chapter_26.html
+;(setting (identifier) @error)
+(setting
+ (identifier) @constant.builtin
+ (#any-of? @constant.builtin
+ "allow-duplicate-recipes" "dotenv-filename" "dotenv-load" "dotenv-path" "export" "fallback"
+ "ignore-comments" "positional-arguments" "tempdir" "windows-powershell" "windows-shell"))
+
+; Ref: https://just.systems/man/en/chapter_32.html
+;(recipe (attribute (identifier) @error))
+(recipe
+ (attribute
+ (identifier) @attribute)
+ (#any-of? @attribute
+ "confirm" "linux" "macos" "no-cd" "no-exit-message" "no-quiet" "private" "unix" "windows"))
+
+; Ref: https://just.systems/man/en/chapter_31.html
+;(function_call (identifier) @error)
+(function_call
+ (identifier) @function.call
+ (#any-of? @function.call
+ "arch" "num_cpus" "os" "os_family" "env_var" "env_var_or_default" "env" "invocation_directory"
+ "invocation_directory_native" "justfile" "justfile_directory" "just_executable" "quote"
+ "replace" "replace_regex" "trim" "trim_end" "trim_end_match" "trim_end_matches" "trim_start"
+ "trim_start_match" "trim_start_matches" "capitalize" "kebabcase" "lowercamelcase" "lowercase"
+ "shoutykebabcase" "shoutysnakecase" "snakecase" "titlecase" "uppercamelcase" "uppercase"
+ "absolute_path" "extension" "file_name" "file_stem" "parent_directory" "without_extension"
+ "clean" "join" "path_exists" "error" "sha256" "sha256_file" "uuid" "semver_matches"))
diff --git a/queries/just/indents.scm b/queries/just/indents.scm
new file mode 100644
index 000000000..1402a0c03
--- /dev/null
+++ b/queries/just/indents.scm
@@ -0,0 +1,14 @@
+; Source: https://github.com/IndianBoy42/tree-sitter-just/blob/main/queries/just/indents.scm
+[
+ (recipe)
+ (string)
+ (external_command)
+] @indent.begin
+
+(string
+ [
+ "'''"
+ "\"\"\""
+ ] @indent.branch @indent.end)
+
+(comment) @indent.auto
diff --git a/queries/just/injections.scm b/queries/just/injections.scm
new file mode 100644
index 000000000..dab656b69
--- /dev/null
+++ b/queries/just/injections.scm
@@ -0,0 +1,41 @@
+; The right side of =~ literals
+(regex_literal
+ (_) @injection.content
+ (#set! injection.language "regex"))
+
+; Default to bash highlighting for non-shebang recipes and commands
+(recipe
+ (recipe_body
+ !shebang) @injection.content
+ (#set! injection.include-children)
+ (#set! injection.language "bash"))
+
+(external_command
+ (command_body) @injection.content
+ (#set! injection.language "bash"))
+
+; For shebang recipes, use the shebang executable name as the language by default
+(recipe
+ (recipe_body
+ (shebang
+ (language) @injection.language)) @injection.content
+ (#not-any-of? @injection.language "python3" "nodejs" "node")
+ (#set! injection.include-children))
+
+; python3 -> python
+(recipe
+ (recipe_body
+ (shebang
+ (language) @_lang)) @injection.content
+ (#eq? @_lang "python3")
+ (#set! injection.language "python")
+ (#set! injection.include-children))
+
+; node/nodejs -> javascript
+(recipe
+ (recipe_body
+ (shebang
+ (language) @_lang)) @injection.content
+ (#any-of? @_lang "node" "nodejs")
+ (#set! injection.language "javascript")
+ (#set! injection.include-children))
diff --git a/queries/just/locals.scm b/queries/just/locals.scm
new file mode 100644
index 000000000..80549f35b
--- /dev/null
+++ b/queries/just/locals.scm
@@ -0,0 +1,35 @@
+; Source: https://github.com/IndianBoy42/tree-sitter-just/blob/main/queries/just/locals.scm
+; Scope
+(recipe) @local.scope
+
+; Definitions
+(alias
+ left: (identifier) @local.definition.var)
+
+(assignment
+ left: (identifier) @local.definition.var)
+
+(module
+ name: (identifier) @local.definition.namespace)
+
+(parameter
+ name: (identifier) @local.definition.var)
+
+(recipe_header
+ name: (identifier) @local.definition.function)
+
+; References
+(alias
+ right: (identifier) @local.reference)
+
+(function_call
+ name: (identifier) @local.reference)
+
+(dependency
+ name: (identifier) @local.reference)
+
+(dependency_expression
+ name: (identifier) @local.reference)
+
+(value
+ (identifier) @local.reference)