aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorpacien2023-01-25 22:44:24 +0000
committerGitHub2023-01-25 22:44:24 +0000
commit22b3d3d6367f2e559a7193172bd1dba03b864bd3 (patch)
treeb78792aa2d274957bd96deceec28f01b8e0496ca
parent2db879629f299007e389ee76826d3bce72f8039a (diff)
queries/nix: add injections for builtins and writers (#5629)
-rw-r--r--runtime/queries/nix/injections.scm110
1 files changed, 110 insertions, 0 deletions
diff --git a/runtime/queries/nix/injections.scm b/runtime/queries/nix/injections.scm
index a1a0ebb8..62b48233 100644
--- a/runtime/queries/nix/injections.scm
+++ b/runtime/queries/nix/injections.scm
@@ -6,6 +6,8 @@
(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
@@ -14,6 +16,25 @@
(#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))
@@ -21,6 +42,8 @@
(#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
@@ -30,6 +53,7 @@
(#set! injection.language "bash")
(#set! injection.combined))
+; trivial-builders.nix pkgs.writeShellApplication { text = content; }
(apply_expression
function: ((_) @_func)
argument: (_ (_)* (_ (_)* (binding
@@ -40,3 +64,89 @@
(#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))