diff options
author | Timothy DeHerrera | 2023-04-28 09:21:34 +0000 |
---|---|---|
committer | GitHub | 2023-04-28 09:21:34 +0000 |
commit | 9c6c63a2be30252a6207f4aebb5e0f76f746b4c8 (patch) | |
tree | cb1882ee0b719e2bf5fc8444b494ba0948dea178 /runtime/queries | |
parent | 204d1eba4b1bb09d2e861986d6b6e8b868d16afe (diff) |
inject language based on file extension & shebang (#3970)
* inject language based on file extension
Nodes can now be captured with "injection.filename". If this capture
contains a valid file extension known to Helix, then the content will
be highlighted as that language.
* inject language by shebang
Nodes can now be captured with "injection.shebang". If this capture
contains a valid shebang line known to Helix, then the content will
be highlighted as the language the shebang calls for.
* add documentation for language injection
* nix: fix highlights
The `@` is now highlighted properly on either side of the function arg.
Also, extending the phases with `buildPhase = prev.buildPhase + ''''`
is now highlighted properly.
Fix highlighting of `''$` style escapes (requires tree-sitter-nix bump)
Fix `inherit` highlighting.
* simplify injection_for_match
Split out injection pair logic into its own method to make the overall
flow easier to follow.
Also transform the top-level function into a method on a
HighlightConfiguration.
* markdown: add shebang injection query
Diffstat (limited to 'runtime/queries')
-rw-r--r-- | runtime/queries/markdown/injections.scm | 4 | ||||
-rw-r--r-- | runtime/queries/nix/highlights.scm | 5 | ||||
-rw-r--r-- | runtime/queries/nix/injections.scm | 18 |
3 files changed, 23 insertions, 4 deletions
diff --git a/runtime/queries/markdown/injections.scm b/runtime/queries/markdown/injections.scm index e8839351..80977459 100644 --- a/runtime/queries/markdown/injections.scm +++ b/runtime/queries/markdown/injections.scm @@ -1,6 +1,10 @@ ; From nvim-treesitter/nvim-treesitter (fenced_code_block + (code_fence_content) @injection.shebang @injection.content + (#set! injection.include-unnamed-children)) + +(fenced_code_block (info_string (language) @injection.language) (code_fence_content) @injection.content (#set! injection.include-unnamed-children)) diff --git a/runtime/queries/nix/highlights.scm b/runtime/queries/nix/highlights.scm index a998aa64..4633e178 100644 --- a/runtime/queries/nix/highlights.scm +++ b/runtime/queries/nix/highlights.scm @@ -47,8 +47,10 @@ (float_expression) @constant.numeric.float (escape_sequence) @constant.character.escape +(dollar_escape) @constant.character.escape (function_expression + "@"? @punctuation.delimiter universal: (identifier) @variable.parameter "@"? @punctuation.delimiter ) @@ -82,7 +84,8 @@ (binding attrpath: (attrpath attr: (identifier)) @variable.other.member) -(inherit_from attrs: (inherited_attrs attr: (identifier) @variable)) +(inherit_from attrs: (inherited_attrs attr: (identifier) @variable.other.member)) +(inherited_attrs attr: (identifier) @variable) (has_attr_expression expression: (_) diff --git a/runtime/queries/nix/injections.scm b/runtime/queries/nix/injections.scm index 62b48233..1da63ce0 100644 --- a/runtime/queries/nix/injections.scm +++ b/runtime/queries/nix/injections.scm @@ -10,9 +10,11 @@ ; such as those of stdenv.mkDerivation. ((binding attrpath: (attrpath (identifier) @_path) - expression: (indented_string_expression - (string_fragment) @injection.content)) - (#match? @_path "(^\\w*Phase|(pre|post)\\w*|(.*\\.)?\\w*([sS]cript|[hH]ook)|(.*\\.)?startup)$") + expression: [ + (indented_string_expression (string_fragment) @injection.content) + (binary_expression (indented_string_expression (string_fragment) @injection.content)) + ]) + (#match? @_path "(^\\w*Phase|command|(pre|post)\\w*|(.*\\.)?\\w*([sS]cript|[hH]ook)|(.*\\.)?startup)$") (#set! injection.language "bash") (#set! injection.combined)) @@ -150,3 +152,13 @@ ; (#match? @_func "(^|\\.)writeFSharp(Bin)?$") ; (#set! injection.language "f-sharp") ; (#set! injection.combined)) + +((apply_expression + function: (apply_expression function: (_) @_func + argument: (string_expression (string_fragment) @injection.filename)) + argument: (indented_string_expression (string_fragment) @injection.content)) + (#match? @_func "(^|\\.)write(Text|Script(Bin)?)$") + (#set! injection.combined)) + +((indented_string_expression (string_fragment) @injection.shebang @injection.content) + (#set! injection.combined))
\ No newline at end of file |