A tree-sitter parser for format strings using curly braces ({}
),
like python's str.format
method or rust's format!
macro.
Queries
Python only uses formatted strings in the str.format
method, commonly
used like this:
'Hello {}'.format('world')
'{:.4f}'.format(math.pi)
Query for tree-sitter-python
's injections.scm
:
((call
function: (attribute
object: (string
(string_content) @injection.content)
attribute: (identifier) @_format))
(#eq? @_format "format")
(#set! injection.language "format_string"))
Queries
Rust uses formatted strings in the following macros:
format!
write!
writeln!
print!
println!
eprint!
eprintln!
format_args!
assert!
assert_eq!
assert_ne!
assert_matches!
debug_assert!
debug_assert_eq!
debug_assert_ne!
debug_assert_matches!
Queries for tree-sitter-rust
's injections.scm
:
((macro_invocation
macro: (identifier) @_macro
(token_tree
.
(string_literal
(string_content) @injection.content)))
(#any-of? @_macro
"print"
"println"
"eprint"
"eprintln"
"format"
"format_args")
(#set! injection.language "format_string"))
((macro_invocation
macro: (identifier) @_macro
(token_tree
.
(_)
.
(string_literal
(string_content) @injection.content)))
(#any-of? @_macro "write" "writeln" "assert" "debug_assert")
(#set! injection.language "format_string"))
((macro_invocation
macro: (identifier) @_macro
(token_tree
.
(_)
.
(_)
.
(string_literal
(string_content) @injection.content)))
(#any-of? @_macro
"assert_eq"
"assert_ne"
"assert_matches"
"debug_assert_eq"
"debug_assert_ne"
"debug_assert_matches")
(#set! injection.language "format_string"))
- Rust format syntax
- Python format syntax
- Other languages?