feat: add Nix injection queries for embedded language highlighting
Adapted Helix nix/injections.scm for tree-sitter-highlight: - Removed Helix-specific predicates - Recognizes bash in buildPhase/installPhase, python in testScript, json in fromJSON, etc.
This commit is contained in:
190
queries/nix-injections.scm
Normal file
190
queries/nix-injections.scm
Normal file
@@ -0,0 +1,190 @@
|
||||
; Nix injection queries for embedded language highlighting
|
||||
; Adapted from Helix editor queries for tree-sitter-highlight compatibility
|
||||
; Removed Helix-specific predicates: #is-not?, #any-of?, @injection.shebang, @injection.filename
|
||||
|
||||
((comment) @injection.content
|
||||
(#set! injection.language "comment"))
|
||||
|
||||
; mark arbitrary languages with a comment
|
||||
((((comment) @injection.language) .
|
||||
(indented_string_expression (string_fragment) @injection.content))
|
||||
(#set! injection.combined))
|
||||
((binding
|
||||
(comment) @injection.language
|
||||
expression: (indented_string_expression (string_fragment) @injection.content))
|
||||
(#set! injection.combined))
|
||||
|
||||
; Common attribute keys corresponding to Python scripts,
|
||||
; such as those for NixOS VM tests in nixpkgs/nixos/tests.
|
||||
((binding
|
||||
attrpath: (attrpath (identifier) @_path)
|
||||
expression: (indented_string_expression
|
||||
(string_fragment) @injection.content))
|
||||
(#match? @_path "(^|\\.)testScript$")
|
||||
(#set! injection.language "python")
|
||||
(#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
|
||||
((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
|
||||
((apply_expression
|
||||
function: (_) @_func
|
||||
argument: (indented_string_expression (string_fragment) @injection.content))
|
||||
(#match? @_func "(^|\\.)fromJSON$")
|
||||
(#set! injection.language "json")
|
||||
(#set! injection.combined))
|
||||
|
||||
; builtins.fromTOML toml
|
||||
((apply_expression
|
||||
function: (_) @_func
|
||||
argument: (indented_string_expression (string_fragment) @injection.content))
|
||||
(#match? @_func "(^|\\.)fromTOML$")
|
||||
(#set! injection.language "toml")
|
||||
(#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.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.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.writeRuby[Bin] name attrs content
|
||||
(apply_expression
|
||||
(apply_expression
|
||||
function: (apply_expression
|
||||
function: ((_) @_func)))
|
||||
argument: (indented_string_expression (string_fragment) @injection.content)
|
||||
(#match? @_func "(^|\\.)writeRuby(Bin)?$")
|
||||
(#set! injection.language "ruby")
|
||||
(#set! injection.combined))
|
||||
|
||||
; pkgs.writers.writeLua[Bin] name attrs content
|
||||
(apply_expression
|
||||
(apply_expression
|
||||
function: (apply_expression
|
||||
function: ((_) @_func)))
|
||||
argument: (indented_string_expression (string_fragment) @injection.content)
|
||||
(#match? @_func "(^|\\.)writeLua(Bin)?$")
|
||||
(#set! injection.language "lua")
|
||||
(#set! injection.combined))
|
||||
|
||||
; string contents of lib.literalExpression is nix code
|
||||
((apply_expression
|
||||
function: [
|
||||
(select_expression)
|
||||
(variable_expression)
|
||||
] @_func
|
||||
argument: [
|
||||
(indented_string_expression (string_fragment) @injection.content)
|
||||
(string_expression (string_fragment) @injection.content)
|
||||
])
|
||||
(#match? @_func "(lib\\.)?literalExpression$")
|
||||
(#set! injection.language "nix")
|
||||
(#set! injection.combined))
|
||||
Reference in New Issue
Block a user