From 7ba26e7685a58d47e10840617d1d035dcdd5e018 Mon Sep 17 00:00:00 2001 From: Marc Jakobi Date: Fri, 26 Dec 2025 17:35:54 +0100 Subject: perf(nix): replace match with lua-match --- runtime/queries/nix/injections.scm | 104 ++++++++++++++++----- tests/query/injections/nix/test-nix-injections.nix | 28 ++++-- 2 files changed, 101 insertions(+), 31 deletions(-) diff --git a/runtime/queries/nix/injections.scm b/runtime/queries/nix/injections.scm index 26ba6e2da..7d0ffe8e5 100644 --- a/runtime/queries/nix/injections.scm +++ b/runtime/queries/nix/injections.scm @@ -34,7 +34,7 @@ ((string_fragment) @injection.content (#set! injection.language "regex"))) ] - (#match? @_func "(^|\\.)match$") + (#lua-match? @_func "^%a*%.*match$") (#set! injection.combined)) (binding @@ -48,7 +48,46 @@ ((string_fragment) @injection.content (#set! injection.language "bash"))) ] - (#match? @_path "(^\\w+(Phase|Hook|Check)|(pre|post)[A-Z]\\w+|script)$")) + (#lua-match? @_path "^%a+Phase$")) + +(binding + attrpath: (attrpath + (identifier) @_path) + expression: [ + (string_expression + ((string_fragment) @injection.content + (#set! injection.language "bash"))) + (indented_string_expression + ((string_fragment) @injection.content + (#set! injection.language "bash"))) + ] + (#lua-match? @_path "^pre%a+$")) + +(binding + attrpath: (attrpath + (identifier) @_path) + expression: [ + (string_expression + ((string_fragment) @injection.content + (#set! injection.language "bash"))) + (indented_string_expression + ((string_fragment) @injection.content + (#set! injection.language "bash"))) + ] + (#lua-match? @_path "^post%a+$")) + +(binding + attrpath: (attrpath + (identifier) @_path) + expression: [ + (string_expression + ((string_fragment) @injection.content + (#set! injection.language "bash"))) + (indented_string_expression + ((string_fragment) @injection.content + (#set! injection.language "bash"))) + ] + (#lua-match? @_path "^script$")) (apply_expression function: (_) @_func @@ -67,8 +106,8 @@ ((string_fragment) @injection.content (#set! injection.language "bash"))) ]))) - (#match? @_func "(^|\\.)writeShellApplication$") - (#match? @_path "^text$") + (#lua-match? @_func "^%a*%.*writeShellApplication$") + (#lua-match? @_path "^text$") (#set! injection.combined)) (apply_expression @@ -83,7 +122,7 @@ ((string_fragment) @injection.content (#set! injection.language "bash"))) ] - (#match? @_func "(^|\\.)runCommand((No)?CC)?(Local)?$") + (#lua-match? @_func "^%a*%.*runCommand%a*$") (#set! injection.combined)) ((apply_expression @@ -97,7 +136,35 @@ ((string_fragment) @injection.content (#set! injection.language "bash"))) ]) - (#match? @_func "(^|\\.)write(Bash|Dash|ShellScript)(Bin)?$") + (#lua-match? @_func "^%a*%.*writeBash%a*$") + (#set! injection.combined)) + +((apply_expression + function: (apply_expression + function: (_) @_func) + argument: [ + (string_expression + ((string_fragment) @injection.content + (#set! injection.language "bash"))) + (indented_string_expression + ((string_fragment) @injection.content + (#set! injection.language "bash"))) + ]) + (#lua-match? @_func "^%a*%.*writeDash%a*$") + (#set! injection.combined)) + +((apply_expression + function: (apply_expression + function: (_) @_func) + argument: [ + (string_expression + ((string_fragment) @injection.content + (#set! injection.language "bash"))) + (indented_string_expression + ((string_fragment) @injection.content + (#set! injection.language "bash"))) + ]) + (#lua-match? @_func "^%a*%.*writeShellScript%a*$") (#set! injection.combined)) ((apply_expression @@ -111,7 +178,7 @@ ((string_fragment) @injection.content (#set! injection.language "fish"))) ]) - (#match? @_func "(^|\\.)writeFish(Bin)?$") + (#lua-match? @_func "^%a*%.*writeFish%a*$") (#set! injection.combined)) ((apply_expression @@ -126,13 +193,12 @@ ((string_fragment) @injection.content (#set! injection.language "haskell"))) ]) - (#match? @_func "(^|\\.)writeHaskell(Bin)?$") + (#lua-match? @_func "^%a*%.*writeHaskell%a*$") (#set! injection.combined)) ((apply_expression function: (apply_expression - function: (apply_expression - function: (_) @_func)) + function: (_) @_func) argument: [ (string_expression ((string_fragment) @injection.content @@ -141,13 +207,12 @@ ((string_fragment) @injection.content (#set! injection.language "javascript"))) ]) - (#match? @_func "(^|\\.)writeJS(Bin)?$") + (#lua-match? @_func "^%a*%.*writeJS%a*$") (#set! injection.combined)) ((apply_expression function: (apply_expression - function: (apply_expression - function: (_) @_func)) + function: (_) @_func) argument: [ (string_expression ((string_fragment) @injection.content @@ -156,13 +221,12 @@ ((string_fragment) @injection.content (#set! injection.language "perl"))) ]) - (#match? @_func "(^|\\.)writePerl(Bin)?$") + (#lua-match? @_func "^%a*%.*writePerl%a*$") (#set! injection.combined)) ((apply_expression function: (apply_expression - function: (apply_expression - function: (_) @_func)) + function: (_) @_func) argument: [ (string_expression ((string_fragment) @injection.content @@ -171,13 +235,11 @@ ((string_fragment) @injection.content (#set! injection.language "python"))) ]) - (#match? @_func "(^|\\.)write(PyPy|Python)[23](Bin)?$") + (#lua-match? @_func "^%a*%.*writePy%a*%d*%a*$") (#set! injection.combined)) ((apply_expression - function: (apply_expression - function: (apply_expression - function: (_) @_func)) + function: (_) @_func argument: [ (string_expression ((string_fragment) @injection.content @@ -186,7 +248,7 @@ ((string_fragment) @injection.content (#set! injection.language "rust"))) ]) - (#match? @_func "(^|\\.)writeRust(Bin)?$") + (#lua-match? @_func "^%a*%.*writeRust%a*$") (#set! injection.combined)) ; (nixosTest) testScript diff --git a/tests/query/injections/nix/test-nix-injections.nix b/tests/query/injections/nix/test-nix-injections.nix index 477ca4abb..b358326ab 100644 --- a/tests/query/injections/nix/test-nix-injections.nix +++ b/tests/query/injections/nix/test-nix-injections.nix @@ -1,8 +1,11 @@ -{ pkgs, stdenv }: # NOTE: This file is for testing queries. If evaluated with nix, this will probably error. -{ +{ pkgs, stdenv }: let + match = builtins.match; +in { regex = builtins.match "^.*[{](.+)[}].*$" "blahblah {something} blahblah" [ "something" ]; + regex2 = match "^.*[{](.+)[}].*$" "blahblah {something} blahblah" [ "something" ]; + drv1 = stdenv.mkDerivation { buildPhase = "mkdir $out"; installPhase = '' @@ -23,38 +26,43 @@ echo "bar" > $out/foo.txt ''; - drv4 = pkgs.writeShellScriptBin "hello" '' + drv4 = pkgs.runCommandNoCC "foo-bar" {} '' + mkir $out + echo "bar" > $out/foo.txt + ''; + + drv5 = pkgs.writeShellScriptBin "hello" '' echo "Hello world!" ''; - drv5 = pkgs.writeFishBin "hello" '' + drv6 = pkgs.writeFishBin "hello" '' echo "Hello world!" ''; - drv6 = pkgs.writeHaskellBin "hello" '' + drv7 = pkgs.writeHaskellBin "hello" '' main :: IO () main = putStrLn "Hello world!" ''; - drv7 = pkgs.writeJSBin "hello" '' + drv8 = pkgs.writeJSBin "hello" '' console.log('Hello world!'); ''; - drv8 = pkgs.writePerlBin "hello" '' + drv9 = pkgs.writePerlBin "hello" '' print("Hello world!\n"); ''; - drv9 = pkgs.writePythonBin "hello" '' + drv10 = pkgs.writePythonBin "hello" '' print("Hello world!"); ''; - drv10 = pkgs.writeRustBin "hello" '' + drv11 = pkgs.writeRustBin "hello" '' fn main() { println!("Hello world!"); } ''; - drv11 = { + drv12 = { nodes = null; testScript = '' print("Hello world!"); -- cgit v1.2.3-70-g09d2