diff --git a/docs/manual/release-notes/rl-0.9.md b/docs/manual/release-notes/rl-0.9.md index da8a8b24..803bcc4a 100644 --- a/docs/manual/release-notes/rl-0.9.md +++ b/docs/manual/release-notes/rl-0.9.md @@ -283,6 +283,9 @@ - Added {option}`vim.languages.tera.treesitter.injection` to configure, what language the content is. +- Added {option}`vim.languages.jinja.treesitter.injection` to configure, what + language the content is. + - Added {option}`vim.treesitter.filetypeMappings` to support mappings similar to . This is mostly use full for Markdown code block injections. diff --git a/modules/plugins/languages/jinja.nix b/modules/plugins/languages/jinja.nix index ff32bc24..e8de65f9 100644 --- a/modules/plugins/languages/jinja.nix +++ b/modules/plugins/languages/jinja.nix @@ -7,7 +7,7 @@ inherit (lib) genAttrs; inherit (lib.modules) mkIf mkMerge; inherit (lib.options) literalExpression mkEnableOption mkOption; - inherit (lib.types) enum listOf; + inherit (lib.types) enum listOf str; inherit (lib.nvim.types) mkGrammarOption; cfg = config.vim.languages.jinja; @@ -27,6 +27,11 @@ in { }; package = mkGrammarOption pkgs "jinja"; inlinePackage = mkGrammarOption pkgs "jinja_inline"; + injection = mkOption { + type = str; + default = "html"; + description = "Treesitter language to inject in Jinja templates"; + }; }; lsp = { @@ -46,11 +51,27 @@ in { config = mkIf cfg.enable (mkMerge [ (mkIf cfg.treesitter.enable { - vim.treesitter.enable = true; - vim.treesitter.grammars = [ - cfg.treesitter.package - cfg.treesitter.inlinePackage - ]; + vim.treesitter = { + enable = true; + grammars = [ + cfg.treesitter.package + cfg.treesitter.inlinePackage + ]; + queries = [ + { + type = "injections"; + filetypes = ["jinja"]; + query = '' + ;; extends + + ((content) @injection.content + (#set! injection.language "${cfg.treesitter.injection}") + (#set! injection.combined) + ) + ''; + } + ]; + }; }) (mkIf cfg.lsp.enable {