From 2461e5ac21c59950457fea4b3f9f184f0daa8913 Mon Sep 17 00:00:00 2001 From: osthomas <8322329+osthomas@users.noreply.github.com> Date: Wed, 13 Sep 2023 03:29:22 +0200 Subject: [PATCH] feat: add Snakemake --- lockfile.json | 3 ++ lua/nvim-treesitter/parsers.lua | 9 +++++ queries/snakemake/folds.scm | 6 +++ queries/snakemake/highlights.scm | 64 ++++++++++++++++++++++++++++++++ queries/snakemake/injections.scm | 4 ++ queries/snakemake/locals.scm | 1 + 6 files changed, 87 insertions(+) create mode 100644 queries/snakemake/folds.scm create mode 100644 queries/snakemake/highlights.scm create mode 100644 queries/snakemake/injections.scm create mode 100644 queries/snakemake/locals.scm diff --git a/lockfile.json b/lockfile.json index 0fef1cb50..5a2ed3c54 100644 --- a/lockfile.json +++ b/lockfile.json @@ -518,6 +518,9 @@ "smithy": { "revision": "cf8c7eb9faf7c7049839585eac19c94af231e6a0" }, + "snakemake": { + "revision": "65a6c3b4671877821082164da0a310851b211953" + }, "solidity": { "revision": "168020304759ad5d8b4a88a541a699134e3730c5" }, diff --git a/lua/nvim-treesitter/parsers.lua b/lua/nvim-treesitter/parsers.lua index 6fc18cbf9..5251fdb4a 100644 --- a/lua/nvim-treesitter/parsers.lua +++ b/lua/nvim-treesitter/parsers.lua @@ -1520,6 +1520,15 @@ list.smali = { maintainers = { "@amaanq" }, } +list.snakemake = { + install_info = { + url = "https://github.com/osthomas/tree-sitter-snakemake", + files = { "src/parser.c", "src/scanner.c" }, + }, + maintainer = { "@osthomas" }, + experimental = true, +} + list.smithy = { install_info = { url = "https://github.com/indoorvivants/tree-sitter-smithy", diff --git a/queries/snakemake/folds.scm b/queries/snakemake/folds.scm new file mode 100644 index 000000000..36ed2318b --- /dev/null +++ b/queries/snakemake/folds.scm @@ -0,0 +1,6 @@ +; inherits: python +[ + (rule_definition) + (module_definition) + (checkpoint_definition) +] @fold diff --git a/queries/snakemake/highlights.scm b/queries/snakemake/highlights.scm new file mode 100644 index 000000000..8b173e0b5 --- /dev/null +++ b/queries/snakemake/highlights.scm @@ -0,0 +1,64 @@ +; 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" @include + "rule" @include + "from" @include + "as"? @include + "with"? @include +) + + +;; Rule inheritance +(rule_inheritance + "use" @keyword + "rule" @keyword + "with" @keyword +) + + +;; Wildcard names +(wildcard (identifier) @variable) + + +;; 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/queries/snakemake/injections.scm b/queries/snakemake/injections.scm new file mode 100644 index 000000000..dd41cbadb --- /dev/null +++ b/queries/snakemake/injections.scm @@ -0,0 +1,4 @@ +; inherits: python + +(wildcard (constraint) @injection.content + (#set! injection.language "regex")) diff --git a/queries/snakemake/locals.scm b/queries/snakemake/locals.scm new file mode 100644 index 000000000..0b920cbf9 --- /dev/null +++ b/queries/snakemake/locals.scm @@ -0,0 +1 @@ +; inherits: python