mirror of
https://github.com/helix-editor/helix.git
synced 2024-11-23 09:56:19 +04:00
9c6c63a2be
* 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
164 lines
6.0 KiB
Scheme
164 lines
6.0 KiB
Scheme
((comment) @injection.content
|
|
(#set! injection.language "comment"))
|
|
|
|
; mark arbitary languages with a comment
|
|
((((comment) @injection.language) .
|
|
(indented_string_expression (string_fragment) @injection.content))
|
|
(#set! injection.combined))
|
|
|
|
; Common attribute keys corresponding to scripts,
|
|
; such as those of stdenv.mkDerivation.
|
|
((binding
|
|
attrpath: (attrpath (identifier) @_path)
|
|
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))
|
|
|
|
; builtins.{match,split} regex str
|
|
; Example: nix/tests/lang/eval-okay-regex-{match,split}.nix
|
|
((apply_expression
|
|
function: (_) @_func
|
|
argument: (indented_string_expression (string_fragment) @injection.content))
|
|
(#match? @_func "(^|\\.)match|split$")
|
|
(#set! injection.language "regex")
|
|
(#set! injection.combined))
|
|
|
|
; builtins.fromJSON json
|
|
; Example: nix/tests/lang/eval-okay-fromjson.nix
|
|
((apply_expression
|
|
function: (_) @_func
|
|
argument: (indented_string_expression (string_fragment) @injection.content))
|
|
(#match? @_func "(^|\\.)fromJSON$")
|
|
(#set! injection.language "json")
|
|
(#set! injection.combined))
|
|
|
|
; trivial-builders.nix pkgs.writeShellScript[Bin] name content
|
|
((apply_expression
|
|
function: (apply_expression function: (_) @_func)
|
|
argument: (indented_string_expression (string_fragment) @injection.content))
|
|
(#match? @_func "(^|\\.)writeShellScript(Bin)?$")
|
|
(#set! injection.language "bash")
|
|
(#set! injection.combined))
|
|
|
|
; trivial-builders.nix, aliases.nix
|
|
; pkgs.runCommand[[No]CC][Local] name attrs content
|
|
(apply_expression
|
|
(apply_expression
|
|
function: (apply_expression
|
|
function: ((_) @_func)))
|
|
argument: (indented_string_expression (string_fragment) @injection.content)
|
|
(#match? @_func "(^|\\.)runCommand(((No)?(CC))?(Local)?)?$")
|
|
(#set! injection.language "bash")
|
|
(#set! injection.combined))
|
|
|
|
; trivial-builders.nix pkgs.writeShellApplication { text = content; }
|
|
(apply_expression
|
|
function: ((_) @_func)
|
|
argument: (_ (_)* (_ (_)* (binding
|
|
attrpath: (attrpath (identifier) @_path)
|
|
expression: (indented_string_expression
|
|
(string_fragment) @injection.content))))
|
|
(#match? @_func "(^|\\.)writeShellApplication$")
|
|
(#match? @_path "^text$")
|
|
(#set! injection.language "bash")
|
|
(#set! injection.combined))
|
|
|
|
; trivial-builders.nix pkgs.writeCBin name content
|
|
((apply_expression
|
|
function: (apply_expression function: (_) @_func)
|
|
argument: (indented_string_expression (string_fragment) @injection.content))
|
|
(#match? @_func "(^|\\.)writeC(Bin)?$")
|
|
(#set! injection.language "c")
|
|
(#set! injection.combined))
|
|
|
|
; pkgs.writers.* usage examples: nixpkgs/pkgs/build-support/writers/test.nix
|
|
|
|
; pkgs.writers.write{Bash,Dash}[Bin] name content
|
|
((apply_expression
|
|
function: (apply_expression function: (_) @_func)
|
|
argument: (indented_string_expression (string_fragment) @injection.content))
|
|
(#match? @_func "(^|\\.)write[BD]ash(Bin)?$")
|
|
(#set! injection.language "bash")
|
|
(#set! injection.combined))
|
|
|
|
; pkgs.writers.writeFish[Bin] name content
|
|
((apply_expression
|
|
function: (apply_expression function: (_) @_func)
|
|
argument: (indented_string_expression (string_fragment) @injection.content))
|
|
(#match? @_func "(^|\\.)writeFish(Bin)?$")
|
|
(#set! injection.language "fish")
|
|
(#set! injection.combined))
|
|
|
|
; pkgs.writers.writeRust[Bin] name attrs content
|
|
(apply_expression
|
|
(apply_expression
|
|
function: (apply_expression
|
|
function: ((_) @_func)))
|
|
argument: (indented_string_expression (string_fragment) @injection.content)
|
|
(#match? @_func "(^|\\.)writeRust(Bin)?$")
|
|
(#set! injection.language "rust")
|
|
(#set! injection.combined))
|
|
|
|
; pkgs.writers.writeHaskell[Bin] name attrs content
|
|
(apply_expression
|
|
(apply_expression
|
|
function: (apply_expression
|
|
function: ((_) @_func)))
|
|
argument: (indented_string_expression (string_fragment) @injection.content)
|
|
(#match? @_func "(^|\\.)writeHaskell(Bin)?$")
|
|
(#set! injection.language "haskell")
|
|
(#set! injection.combined))
|
|
|
|
; pkgs.writers.writeJS[Bin] name attrs content
|
|
(apply_expression
|
|
(apply_expression
|
|
function: (apply_expression
|
|
function: ((_) @_func)))
|
|
argument: (indented_string_expression (string_fragment) @injection.content)
|
|
(#match? @_func "(^|\\.)writeJS(Bin)?$")
|
|
(#set! injection.language "javascript")
|
|
(#set! injection.combined))
|
|
|
|
; pkgs.writers.writePerl[Bin] name attrs content
|
|
(apply_expression
|
|
(apply_expression
|
|
function: (apply_expression
|
|
function: ((_) @_func)))
|
|
argument: (indented_string_expression (string_fragment) @injection.content)
|
|
(#match? @_func "(^|\\.)writePerl(Bin)?$")
|
|
(#set! injection.language "perl")
|
|
(#set! injection.combined))
|
|
|
|
; pkgs.writers.write{Python,PyPy}{2,3}[Bin] name attrs content
|
|
(apply_expression
|
|
(apply_expression
|
|
function: (apply_expression
|
|
function: ((_) @_func)))
|
|
argument: (indented_string_expression (string_fragment) @injection.content)
|
|
(#match? @_func "(^|\\.)write(Python|PyPy)[23](Bin)?$")
|
|
(#set! injection.language "python")
|
|
(#set! injection.combined))
|
|
|
|
; pkgs.writers.writeFSharp[Bin] name content
|
|
; No query available for f-sharp as of the time of writing
|
|
; See: https://github.com/helix-editor/helix/issues/4943
|
|
; ((apply_expression
|
|
; function: (apply_expression function: (_) @_func)
|
|
; argument: (indented_string_expression (string_fragment) @injection.content))
|
|
; (#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)) |