aboutsummaryrefslogtreecommitdiff
path: root/runtime/queries/nix/injections.scm
diff options
context:
space:
mode:
authorTimothy DeHerrera2023-04-28 09:21:34 +0000
committerGitHub2023-04-28 09:21:34 +0000
commit9c6c63a2be30252a6207f4aebb5e0f76f746b4c8 (patch)
treecb1882ee0b719e2bf5fc8444b494ba0948dea178 /runtime/queries/nix/injections.scm
parent204d1eba4b1bb09d2e861986d6b6e8b868d16afe (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/nix/injections.scm')
-rw-r--r--runtime/queries/nix/injections.scm18
1 files changed, 15 insertions, 3 deletions
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