aboutsummaryrefslogtreecommitdiffstats
path: root/runtime/queries/snakemake
diff options
context:
space:
mode:
authorChristian Clason <c.clason@uni-graz.at>2023-06-12 09:54:30 -0600
committerChristian Clason <c.clason@uni-graz.at>2025-05-12 18:43:40 +0200
commit692b051b09935653befdb8f7ba8afdb640adf17b (patch)
tree167162b6b129ae04f68c5735078521a72917c742 /runtime/queries/snakemake
parentfeat(c-family): inherit injections (diff)
downloadnvim-treesitter-692b051b09935653befdb8f7ba8afdb640adf17b.tar
nvim-treesitter-692b051b09935653befdb8f7ba8afdb640adf17b.tar.gz
nvim-treesitter-692b051b09935653befdb8f7ba8afdb640adf17b.tar.bz2
nvim-treesitter-692b051b09935653befdb8f7ba8afdb640adf17b.tar.lz
nvim-treesitter-692b051b09935653befdb8f7ba8afdb640adf17b.tar.xz
nvim-treesitter-692b051b09935653befdb8f7ba8afdb640adf17b.tar.zst
nvim-treesitter-692b051b09935653befdb8f7ba8afdb640adf17b.zip
feat!: drop modules, general refactor and cleanup
Diffstat (limited to 'runtime/queries/snakemake')
-rw-r--r--runtime/queries/snakemake/folds.scm8
-rw-r--r--runtime/queries/snakemake/highlights.scm82
-rw-r--r--runtime/queries/snakemake/indents.scm25
-rw-r--r--runtime/queries/snakemake/injections.scm5
-rw-r--r--runtime/queries/snakemake/locals.scm4
5 files changed, 124 insertions, 0 deletions
diff --git a/runtime/queries/snakemake/folds.scm b/runtime/queries/snakemake/folds.scm
new file mode 100644
index 000000000..d154f3cde
--- /dev/null
+++ b/runtime/queries/snakemake/folds.scm
@@ -0,0 +1,8 @@
+; inherits: python
+
+[
+ (rule_definition)
+ (rule_inheritance)
+ (module_definition)
+ (checkpoint_definition)
+] @fold
diff --git a/runtime/queries/snakemake/highlights.scm b/runtime/queries/snakemake/highlights.scm
new file mode 100644
index 000000000..8781b405c
--- /dev/null
+++ b/runtime/queries/snakemake/highlights.scm
@@ -0,0 +1,82 @@
+; inherits: python
+
+; Compound directives
+[
+ "rule"
+ "checkpoint"
+ "module"
+] @keyword
+
+; Top level directives (eg. configfile, include)
+(module
+ (directive
+ name: _ @keyword))
+
+; Subordinate directives (eg. input, output)
+body: (_
+ (directive
+ name: _ @label))
+
+; rule/module/checkpoint names
+(rule_definition
+ name: (identifier) @type)
+
+(module_definition
+ name: (identifier) @type)
+
+(checkpoint_definition
+ name: (identifier) @type)
+
+; Rule imports
+(rule_import
+ [
+ "use"
+ "rule"
+ "from"
+ "exclude"
+ "as"
+ "with"
+ ] @keyword.import)
+
+; Rule inheritance
+(rule_inheritance
+ "use" @keyword
+ "rule" @keyword
+ "with" @keyword)
+
+; Wildcard names
+(wildcard
+ (identifier) @variable)
+
+(wildcard
+ (flag) @variable.parameter.builtin)
+
+; builtin variables
+((identifier) @variable.builtin
+ (#any-of? @variable.builtin "checkpoints" "config" "gather" "rules" "scatter" "workflow"))
+
+; References to directive labels in wildcard interpolations
+; the #any-of? queries are moved above the #has-ancestor? queries to
+; short-circuit the potentially expensive tree traversal, if possible
+; see:
+; https://github.com/nvim-treesitter/nvim-treesitter/pull/4302#issuecomment-1685789790
+; directive labels in wildcard context
+((wildcard
+ (identifier) @label)
+ (#any-of? @label "input" "log" "output" "params" "resources" "threads" "wildcards"))
+
+((wildcard
+ (attribute
+ object: (identifier) @label))
+ (#any-of? @label "input" "log" "output" "params" "resources" "threads" "wildcards"))
+
+((wildcard
+ (subscript
+ value: (identifier) @label))
+ (#any-of? @label "input" "log" "output" "params" "resources" "threads" "wildcards"))
+
+; directive labels in block context (eg. within 'run:')
+((identifier) @label
+ (#any-of? @label "input" "log" "output" "params" "resources" "threads" "wildcards")
+ (#has-ancestor? @label "directive")
+ (#has-ancestor? @label "block"))
diff --git a/runtime/queries/snakemake/indents.scm b/runtime/queries/snakemake/indents.scm
new file mode 100644
index 000000000..140b7fb3c
--- /dev/null
+++ b/runtime/queries/snakemake/indents.scm
@@ -0,0 +1,25 @@
+; inherits: python
+
+((rule_definition) @indent.begin
+ (#set! indent.immediate 1))
+
+((checkpoint_definition) @indent.begin
+ (#set! indent.immediate 1))
+
+((rule_inheritance) @indent.begin
+ (#set! indent.immediate 1))
+
+((rule_import
+ "with"
+ ":") @indent.begin
+ (#set! indent.immediate 1))
+
+((module_definition) @indent.begin
+ (#set! indent.immediate 1))
+
+((directive) @indent.begin
+ (#set! indent.immediate 1))
+
+; end indentation after last parameter node (no following ',')
+(directive_parameters
+ (_) @indent.end .)
diff --git a/runtime/queries/snakemake/injections.scm b/runtime/queries/snakemake/injections.scm
new file mode 100644
index 000000000..fa56daabb
--- /dev/null
+++ b/runtime/queries/snakemake/injections.scm
@@ -0,0 +1,5 @@
+; inherits: python
+
+(wildcard
+ (constraint) @injection.content
+ (#set! injection.language "regex"))
diff --git a/runtime/queries/snakemake/locals.scm b/runtime/queries/snakemake/locals.scm
new file mode 100644
index 000000000..219f23347
--- /dev/null
+++ b/runtime/queries/snakemake/locals.scm
@@ -0,0 +1,4 @@
+; inherits: python
+
+(rule_definition
+ name: (identifier) @local.definition.type) @local.scope