From 6d228a0a32c40b96fe5ab932cb21cfa69f705cbd Mon Sep 17 00:00:00 2001 From: Bruno BELANYI Date: Tue, 7 May 2024 11:09:47 +0000 Subject: [PATCH] WIP --- modules/home/vim/default.nix | 2 + .../home/vim/plugin/settings/tree-sitter.lua | 9 +++ modules/home/vim/queries/bp/folds.scm | 8 +++ modules/home/vim/queries/bp/highlights.scm | 67 +++++++++++++++++++ modules/home/vim/queries/bp/indents.scm | 27 ++++++++ modules/home/vim/queries/bp/injections.scm | 4 ++ modules/home/vim/queries/bp/locals.scm | 14 ++++ overlays/tree-sitter-bp/default.nix | 18 +++++ 8 files changed, 149 insertions(+) create mode 100644 modules/home/vim/queries/bp/folds.scm create mode 100644 modules/home/vim/queries/bp/highlights.scm create mode 100644 modules/home/vim/queries/bp/indents.scm create mode 100644 modules/home/vim/queries/bp/injections.scm create mode 100644 modules/home/vim/queries/bp/locals.scm create mode 100644 overlays/tree-sitter-bp/default.nix diff --git a/modules/home/vim/default.nix b/modules/home/vim/default.nix index 509ae58..5448004 100644 --- a/modules/home/vim/default.nix +++ b/modules/home/vim/default.nix @@ -13,6 +13,7 @@ let "after" "autoload" "ftdetect" + "queries" "lua" "plugin" ]; @@ -67,6 +68,7 @@ in lsp_lines-nvim # Show diagnostics *over* regions none-ls-nvim # LSP integration for linters and formatters nvim-treesitter.withAllGrammars # Better highlighting + (pkgs.vimPlugins.nvim-treesitter.grammarToPlugin pkgs.tree-sitter-bp) nvim-treesitter-textobjects # More textobjects plenary-nvim # 'null-ls', 'telescope' dependency diff --git a/modules/home/vim/plugin/settings/tree-sitter.lua b/modules/home/vim/plugin/settings/tree-sitter.lua index 5503857..0ddfaf4 100644 --- a/modules/home/vim/plugin/settings/tree-sitter.lua +++ b/modules/home/vim/plugin/settings/tree-sitter.lua @@ -1,4 +1,13 @@ local ts_config = require("nvim-treesitter.configs") + +local parser_config = require("nvim-treesitter.parsers").get_parser_configs() +parser_config.bp = { + install_info = { + url = "", + files = { "src/parser.c" }, + }, +} + ts_config.setup({ highlight = { enable = true, diff --git a/modules/home/vim/queries/bp/folds.scm b/modules/home/vim/queries/bp/folds.scm new file mode 100644 index 0000000..6f39fe9 --- /dev/null +++ b/modules/home/vim/queries/bp/folds.scm @@ -0,0 +1,8 @@ +[ + (list_expression) + (map_expression) + (module) + (select_expression) +] @fold + +; vim: sw=2 foldmethod=marker diff --git a/modules/home/vim/queries/bp/highlights.scm b/modules/home/vim/queries/bp/highlights.scm new file mode 100644 index 0000000..c574ffc --- /dev/null +++ b/modules/home/vim/queries/bp/highlights.scm @@ -0,0 +1,67 @@ +(comment) @comment + +; Operators {{{ +(operator) @operator + +(integer_literal ("-") @operator) +; }}} + +; Punctuation {{{ +[ + "," + ":" +] @punctuation.delimiter + +[ + "(" + ")" + "[" + "]" + "{" + "}" +] @punctuation.bracket +; }}} + +; Literal {{{ +(boolean_literal) @boolean + +(integer_literal) @number + +[ + (raw_string_literal) + (interpreted_string_literal) +] @string + +(escape_sequence) @string.escape +; }}} + +; Declarations {{{ +(identifier) @variable + +(module + type: (identifier) @function.call) + +(module + (property + field: (identifier) @variable.parameter)) +; }}} + +; Built-ins {{{ +[ + (unset) + (default) +] @variable.builtin +(condition + name: (identifier) @function.builtin) +; }}} + +; Expressions {{{ +(map_expression + (property + field: (identifier) @property)) + +(select_expression + "select" @keyword.conditional) +; }}} + +; vim: sw=2 foldmethod=marker diff --git a/modules/home/vim/queries/bp/indents.scm b/modules/home/vim/queries/bp/indents.scm new file mode 100644 index 0000000..9e63d1e --- /dev/null +++ b/modules/home/vim/queries/bp/indents.scm @@ -0,0 +1,27 @@ +; Expressions {{{ +(list_expression) @indent.begin +(list_expression + "]" @indent.branch) + +(map_expression) @indent.begin +(map_expression + "}" @indent.branch) + +(select_expression) @indent.begin +(select_expression + ")" @indent.branch) + +(select_cases) @indent.begin +(select_cases + "}" @indent.branch) +; }}} + +; Declarations {{{ +(module) @indent.begin +(module + ")" @indent.branch) +(module + "}" @indent.branch) +; }}} + +; vim: sw=2 foldmethod=marker diff --git a/modules/home/vim/queries/bp/injections.scm b/modules/home/vim/queries/bp/injections.scm new file mode 100644 index 0000000..9735c59 --- /dev/null +++ b/modules/home/vim/queries/bp/injections.scm @@ -0,0 +1,4 @@ +((comment) @injection.content + (#set! injection.language "comment")) + +; vim: sw=2 foldmethod=marker diff --git a/modules/home/vim/queries/bp/locals.scm b/modules/home/vim/queries/bp/locals.scm new file mode 100644 index 0000000..7efe573 --- /dev/null +++ b/modules/home/vim/queries/bp/locals.scm @@ -0,0 +1,14 @@ +(module + (property + field: (identifier) @local.definition.parameter)) + +(map_expression + (property + field: (identifier) @local.definition.field)) + +(assignment + left: (identifier) @local.definition.var) + +(identifier) @local.reference + +; vim: sw=2 foldmethod=marker diff --git a/overlays/tree-sitter-bp/default.nix b/overlays/tree-sitter-bp/default.nix new file mode 100644 index 0000000..933de44 --- /dev/null +++ b/overlays/tree-sitter-bp/default.nix @@ -0,0 +1,18 @@ +self: prev: +let + tree-sitter = prev.tree-sitter.override { + extraGrammars = { + tree-sitter-bp = { + src = self.fetchFromGitHub { + owner = "ambroisie"; + repo = "tree-sitter-bp"; + rev = "v0.4.0"; + hash = "sha256-h9T8tfS2K85N9NLwYj6tu2MHPj4YyG/UBYoezfWuEyI="; + }; + }; + }; + }; +in +{ + inherit (tree-sitter.passthru.builtGrammars) tree-sitter-bp; +}