diff --git a/nvim/lua/config/settings.lua b/nvim/lua/config/settings.lua index 8ec293e..3d0c979 100644 --- a/nvim/lua/config/settings.lua +++ b/nvim/lua/config/settings.lua @@ -21,3 +21,10 @@ vim.opt.numberwidth = 6 -- indent vim.opt.smartindent = true +-- Filetypes +vim.filetype.add({ + pattern = { + ['.*%.blade%.php'] = 'blade', + }, +}) + diff --git a/nvim/lua/plugins/treesitter.lua b/nvim/lua/plugins/treesitter.lua index c118157..046b1de 100644 --- a/nvim/lua/plugins/treesitter.lua +++ b/nvim/lua/plugins/treesitter.lua @@ -18,7 +18,8 @@ return { "vim", "vimdoc", "query", - "php", + "php", + "blade", "go", "javascript", "typescript", @@ -27,6 +28,7 @@ return { "html", "vue", "json", + "jsonc", "yaml", "toml", "xml", @@ -57,6 +59,19 @@ return { } }, config = function(_, opts) + local parser_config = require('nvim-treesitter.parsers').get_parser_configs() + + parser_config.blade = { + install_info = { + url = 'https://github.com/EmranMR/tree-sitter-blade', + branch = "main", + files = { 'src/parser.c' }, + generate_requires_npm = true, + requires_generate_from_grammar = true, + }, + filetype = 'blade', + } + require("nvim-treesitter.configs").setup(opts) end, } diff --git a/nvim/queries/blade/highlights.scm b/nvim/queries/blade/highlights.scm new file mode 100644 index 0000000..27ae020 --- /dev/null +++ b/nvim/queries/blade/highlights.scm @@ -0,0 +1,5 @@ +(directive) @keyword +(directive_start) @keyword +(directive_end) @keyword +(comment) @comment +(keyword) @keyword diff --git a/nvim/queries/blade/injections.scm b/nvim/queries/blade/injections.scm new file mode 100644 index 0000000..b7066e5 --- /dev/null +++ b/nvim/queries/blade/injections.scm @@ -0,0 +1,15 @@ +((text) @injection.content + (#not-has-ancestor? @injection.content "envoy") + (#set! injection.combined) + (#set! injection.language php)) + +; could be bash or zsh +; or whatever tree-sitter grammar you have. +((text) @injection.content + (#has-ancestor? @injection.content "envoy") + (#set! injection.combined) + (#set! injection.language bash)) + + +((php_only) @injection.content (#set! injection.language php)) +((parameter) @injection.content (#set! injection.language php)) diff --git a/nvim/queries/php/highlights.scm b/nvim/queries/php/highlights.scm new file mode 100644 index 0000000..f023f49 --- /dev/null +++ b/nvim/queries/php/highlights.scm @@ -0,0 +1,23 @@ +; inherits: php_only + +; php tags should be tagged as preprocessor tokens +(php_tag) @preproc + +; Tag names in class definition as regular text. +(class_declaration [ + name: (name) @text + (base_clause (name) @text) + (class_interface_clause (name) @text) +]) + +; tag "use" traits as text +(use_declaration (name) @text) + +; tag namespace classes in "use" as text +(namespace_use_declaration (namespace_use_clause [ + (qualified_name [ + (name) @text + (namespace_name_as_prefix (namespace_name (name) @text)) + ]) + (namespace_aliasing_clause (name) @text) +]))