aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--README.md1
-rw-r--r--lockfile.json3
-rw-r--r--lua/nvim-treesitter/parsers.lua8
-rw-r--r--queries/awk/injections.scm8
-rw-r--r--queries/bash/injections.scm25
-rw-r--r--queries/c/injections.scm67
-rw-r--r--queries/go/injections.scm14
-rw-r--r--queries/java/injections.scm7
-rw-r--r--queries/kotlin/injections.scm8
-rw-r--r--queries/lua/injections.scm17
-rw-r--r--queries/printf/highlights.scm1
-rw-r--r--queries/python/injections.scm5
-rw-r--r--queries/teal/injections.scm17
13 files changed, 181 insertions, 0 deletions
diff --git a/README.md b/README.md
index 6db64faee..a765566f3 100644
--- a/README.md
+++ b/README.md
@@ -328,6 +328,7 @@ We are looking for maintainers to add more parsers and to write query files for
- [x] [pod](https://github.com/tree-sitter-perl/tree-sitter-pod) (maintained by @RabbiVeesh, @LeoNerd)
- [x] [Path of Exile item filter](https://github.com/ObserverOfTime/tree-sitter-poe-filter) (experimental, maintained by @ObserverOfTime)
- [x] [pony](https://github.com/amaanq/tree-sitter-pony) (maintained by @amaanq, @mfelsche)
+- [x] [printf](https://github.com/ObserverOfTime/tree-sitter-printf) (maintained by @ObserverOfTime)
- [x] [prisma](https://github.com/victorhqc/tree-sitter-prisma) (maintained by @elianiva)
- [x] [promql](https://github.com/MichaHoffmann/tree-sitter-promql) (maintained by @MichaHoffmann)
- [x] [properties](https://github.com/ObserverOfTime/tree-sitter-properties) (maintained by @ObserverOfTime)
diff --git a/lockfile.json b/lockfile.json
index 7c92b385e..42d210d0f 100644
--- a/lockfile.json
+++ b/lockfile.json
@@ -464,6 +464,9 @@
"pony": {
"revision": "16f930b250433cfcd4fb4144df92bb98ad344c20"
},
+ "printf": {
+ "revision": "8a3f07c1f620ae46d14873e5b7ee0d3e114c15e8"
+ },
"prisma": {
"revision": "eca2596a355b1a9952b4f80f8f9caed300a272b5"
},
diff --git a/lua/nvim-treesitter/parsers.lua b/lua/nvim-treesitter/parsers.lua
index bfadf5239..d60553206 100644
--- a/lua/nvim-treesitter/parsers.lua
+++ b/lua/nvim-treesitter/parsers.lua
@@ -1387,6 +1387,14 @@ list.pony = {
maintainers = { "@amaanq", "@mfelsche" },
}
+list.printf = {
+ install_info = {
+ url = "https://github.com/ObserverOfTime/tree-sitter-printf",
+ files = { "src/parser.c" },
+ },
+ maintainers = { "@ObserverOfTime" },
+}
+
list.prisma = {
install_info = {
url = "https://github.com/victorhqc/tree-sitter-prisma",
diff --git a/queries/awk/injections.scm b/queries/awk/injections.scm
index bc35c8312..24db57d67 100644
--- a/queries/awk/injections.scm
+++ b/queries/awk/injections.scm
@@ -3,3 +3,11 @@
((regex) @injection.content
(#set! injection.language "regex"))
+
+((print_statement
+ (exp_list . (string) @injection.content))
+ (#set! injection.language "printf"))
+
+((printf_statement
+ (exp_list . (string) @injection.content))
+ (#set! injection.language "printf"))
diff --git a/queries/bash/injections.scm b/queries/bash/injections.scm
index fdb03cda5..516df3b3d 100644
--- a/queries/bash/injections.scm
+++ b/queries/bash/injections.scm
@@ -8,3 +8,28 @@
(heredoc_body) @injection.content
(heredoc_end) @injection.language)
(#downcase! @injection.language))
+
+; printf 'format'
+((command
+ name: (command_name) @_command
+ . argument: [(string) (raw_string)] @injection.content)
+ (#eq? @_command "printf")
+ (#set! injection.language "printf"))
+
+; printf -v var 'format'
+((command
+ name: (command_name) @_command
+ argument: (word) @_arg
+ . (_) . argument: [(string) (raw_string)] @injection.content)
+ (#eq? @_command "printf")
+ (#eq? @_arg "-v")
+ (#set! injection.language "printf"))
+
+; printf -- 'format'
+((command
+ name: (command_name) @_command
+ argument: (word) @_arg
+ . argument: [(string) (raw_string)] @injection.content)
+ (#eq? @_command "printf")
+ (#eq? @_arg "--")
+ (#set! injection.language "printf"))
diff --git a/queries/c/injections.scm b/queries/c/injections.scm
index 6b1fc3522..086dede9e 100644
--- a/queries/c/injections.scm
+++ b/queries/c/injections.scm
@@ -12,6 +12,73 @@
(#lua-match? @injection.content "/[*][!<*][^a-zA-Z]")
(#set! injection.language "doxygen"))
+((call_expression
+ function: (identifier) @_function
+ arguments: (argument_list
+ . (string_literal (string_content) @injection.content)))
+ (#any-of? @_function "printf" "printf_s"
+ "vprintf" "vprintf_s"
+ "scanf" "scanf_s"
+ "vscanf" "vscanf_s"
+ "wprintf" "wprintf_s"
+ "vwprintf" "vwprintf_s"
+ "wscanf" "wscanf_s"
+ "vwscanf" "vwscanf_s"
+ "cscanf" "_cscanf"
+ "printw"
+ "scanw")
+ (#set! injection.language "printf"))
+
+((call_expression
+ function: (identifier) @_function
+ arguments: (argument_list
+ (_) . (string_literal (string_content) @injection.content)))
+ (#any-of? @_function "fprintf" "fprintf_s"
+ "sprintf"
+ "dprintf"
+ "fscanf" "fscanf_s"
+ "sscanf" "sscanf_s"
+ "vsscanf" "vsscanf_s"
+ "vfprintf" "vfprintf_s"
+ "vsprintf"
+ "vdprintf"
+ "fwprintf" "fwprintf_s"
+ "vfwprintf" "vfwprintf_s"
+ "fwscanf" "fwscanf_s"
+ "swscanf" "swscanf_s"
+ "vswscanf" "vswscanf_s"
+ "vfscanf" "vfscanf_s"
+ "vfwscanf" "vfwscanf_s"
+ "wprintw"
+ "vw_printw" "vwprintw"
+ "wscanw"
+ "vw_scanw" "vwscanw")
+ (#set! injection.language "printf"))
+
+((call_expression
+ function: (identifier) @_function
+ arguments: (argument_list
+ (_) . (_) . (string_literal (string_content) @injection.content)))
+ (#any-of? @_function "sprintf_s"
+ "snprintf" "snprintf_s"
+ "vsprintf_s"
+ "vsnprintf" "vsnprintf_s"
+ "swprintf" "swprintf_s"
+ "snwprintf_s"
+ "vswprintf" "vswprintf_s"
+ "vsnwprintf_s"
+ "mvprintw"
+ "mvscanw")
+ (#set! injection.language "printf"))
+
+((call_expression
+ function: (identifier) @_function
+ arguments: (argument_list
+ (_) . (_) . (_) . (string_literal (string_content) @injection.content)))
+ (#any-of? @_function "mvwprintw"
+ "mvwscanw")
+ (#set! injection.language "printf"))
+
; TODO: add when asm is added
; (gnu_asm_expression assembly_code: (string_literal) @injection.content
; (#set! injection.language "asm"))
diff --git a/queries/go/injections.scm b/queries/go/injections.scm
index affc7a115..cf19ebac5 100644
--- a/queries/go/injections.scm
+++ b/queries/go/injections.scm
@@ -19,6 +19,20 @@
(#offset! @injection.content 0 1 0 -1)
(#set! injection.language "regex")))
+
((comment) @injection.content
(#match? @injection.content "/\\*!([a-zA-Z]+:)?re2c")
(#set! injection.language "re2c"))
+
+((call_expression
+ function: (selector_expression field: (field_identifier) @_method)
+ arguments: (argument_list . (interpreted_string_literal) @injection.content))
+ (#any-of? @_method "Printf" "Sprintf" "Fatalf" "Scanf")
+ (#set! injection.language "printf"))
+
+((call_expression
+ function: (selector_expression field: (field_identifier) @_method)
+ arguments: (argument_list (_) . (interpreted_string_literal) @injection.content))
+ (#eq? @_method "Fprintf")
+ (#set! injection.language "printf"))
+
diff --git a/queries/java/injections.scm b/queries/java/injections.scm
index d79ffa6f1..8696c16ff 100644
--- a/queries/java/injections.scm
+++ b/queries/java/injections.scm
@@ -7,3 +7,10 @@
((block_comment) @injection.content
(#lua-match? @injection.content "/[*][!<*][^a-zA-Z]")
(#set! injection.language "doxygen"))
+
+((method_invocation
+ name: (identifier) @_method
+ arguments: (argument_list
+ . (string_literal . (_) @injection.content)))
+ (#any-of? @_method "format" "printf")
+ (#set! injection.language "printf"))
diff --git a/queries/kotlin/injections.scm b/queries/kotlin/injections.scm
index 757259d10..8ac2eba60 100644
--- a/queries/kotlin/injections.scm
+++ b/queries/kotlin/injections.scm
@@ -34,3 +34,11 @@
(value_arguments
(value_argument
(string_literal) @injection.content (#set! injection.language "regex")))))
+
+; "pi = %.2f".format(3.14159)
+((call_expression
+ (navigation_expression
+ (string_literal) @injection.content
+ (navigation_suffix (simple_identifier) @_method)))
+ (#eq? @_method "format")
+ (#set! injection.language "printf"))
diff --git a/queries/lua/injections.scm b/queries/lua/injections.scm
index 57ea527d4..03e057dfe 100644
--- a/queries/lua/injections.scm
+++ b/queries/lua/injections.scm
@@ -135,6 +135,23 @@
(#set! injection.language "luap")
(#set! injection.include-children))))
+; string.format("pi = %.2f", 3.14159)
+((function_call
+ (dot_index_expression
+ field: (identifier) @_method)
+ arguments: (arguments
+ . (string (string_content) @injection.content)))
+ (#eq? @_method "format")
+ (#set! injection.language "printf"))
+
+; ("pi = %.2f"):format(3.14159)
+((function_call
+ (method_index_expression
+ table: (_ (string (string_content) @injection.content))
+ method: (identifier) @_method))
+ (#eq? @_method "format")
+ (#set! injection.language "printf"))
+
(comment
content: (_) @injection.content
(#set! injection.language "comment"))
diff --git a/queries/printf/highlights.scm b/queries/printf/highlights.scm
new file mode 100644
index 000000000..db5ef9a3f
--- /dev/null
+++ b/queries/printf/highlights.scm
@@ -0,0 +1 @@
+(format) @character
diff --git a/queries/python/injections.scm b/queries/python/injections.scm
index aa36a5af9..87d1c3478 100644
--- a/queries/python/injections.scm
+++ b/queries/python/injections.scm
@@ -6,5 +6,10 @@
(#eq? @_re "re")
(#set! injection.language "regex"))
+((binary_operator
+ left: (string (string_content) @injection.content)
+ operator: "%")
+ (#set! injection.language "printf"))
+
((comment) @injection.content
(#set! injection.language "comment"))
diff --git a/queries/teal/injections.scm b/queries/teal/injections.scm
index 5eef08702..789826452 100644
--- a/queries/teal/injections.scm
+++ b/queries/teal/injections.scm
@@ -26,5 +26,22 @@
(#set! injection.language "c")
)
+; string.format('...')
+((function_call
+ (index
+ (identifier) @_base
+ key: (identifier) @_entry)
+ (arguments . (string) @injection.content))
+ (#eq? @_base "string")
+ (#eq? @_entry "format")
+ (#set! injection.language "printf"))
+
+; ('...'):format()
+((function_call
+ (method_index (string) @printf
+ key: (identifier) @_func))
+ (#eq? @_func "format")
+ (#set! injection.language "printf"))
+
((comment) @injection.content
(#set! injection.language "comment"))