Improve handling of delimiters in all supported tree-sitter languages

ida_star
Wilfred Hughes 2021-08-28 11:59:56 +07:00
parent bdf61a47a6
commit 7f021e147d
2 changed files with 15 additions and 10 deletions

@ -3,7 +3,7 @@
### Parsing
Tree-sitter parser: Improved handling of string literals. Improved
matching of delimiters in Clojure, Elisp and JSX.
matching of delimiters.
JSON (legacy parser): fixed parsing string literals (broken in 0.7).

@ -48,7 +48,7 @@ pub fn from_extension(extension: &OsStr) -> Option<TreeSitterConfig> {
name: "CSS",
language: unsafe { tree_sitter_css() },
atom_nodes: (vec![]).into_iter().collect(),
open_delimiter_tokens: (vec![]).into_iter().collect(),
open_delimiter_tokens: (vec!["{", "("]).into_iter().collect(),
}),
"el" => Some(TreeSitterConfig {
name: "Emacs Lisp",
@ -62,33 +62,38 @@ pub fn from_extension(extension: &OsStr) -> Option<TreeSitterConfig> {
atom_nodes: (vec!["interpreted_string_literal", "raw_string_literal"])
.into_iter()
.collect(),
open_delimiter_tokens: (vec![]).into_iter().collect(),
open_delimiter_tokens: (vec!["{", "[", "("]).into_iter().collect(),
}),
"js" | "jsx" => Some(TreeSitterConfig {
name: "JavaScript",
language: unsafe { tree_sitter_javascript() },
atom_nodes: (vec!["string"]).into_iter().collect(),
// This is only correct because < cannot occur as the
// first token in tree-sitter node unless we're in JSX.
open_delimiter_tokens: (vec!["<"]).into_iter().collect(),
open_delimiter_tokens: (vec![
"[", "(", "{",
// This is only correct because < cannot occur as the
// first token in tree-sitter node unless we're in JSX.
"<",
])
.into_iter()
.collect(),
}),
"json" => Some(TreeSitterConfig {
name: "JSON",
language: unsafe { tree_sitter_json() },
atom_nodes: (vec!["string"]).into_iter().collect(),
open_delimiter_tokens: (vec![]).into_iter().collect(),
open_delimiter_tokens: (vec!["{", "["]).into_iter().collect(),
}),
"ml" => Some(TreeSitterConfig {
name: "OCaml",
language: unsafe { tree_sitter_ocaml() },
atom_nodes: (vec!["character", "string"]).into_iter().collect(),
open_delimiter_tokens: (vec![]).into_iter().collect(),
open_delimiter_tokens: (vec!["(", "[", "{"]).into_iter().collect(),
}),
"mli" => Some(TreeSitterConfig {
name: "OCaml Interface",
language: unsafe { tree_sitter_ocaml_interface() },
atom_nodes: (vec!["character", "string"]).into_iter().collect(),
open_delimiter_tokens: (vec![]).into_iter().collect(),
open_delimiter_tokens: (vec!["(", "[", "{"]).into_iter().collect(),
}),
"rs" => Some(TreeSitterConfig {
name: "Rust",
@ -96,7 +101,7 @@ pub fn from_extension(extension: &OsStr) -> Option<TreeSitterConfig> {
atom_nodes: (vec!["char_literal", "string_literal"])
.into_iter()
.collect(),
open_delimiter_tokens: (vec![]).into_iter().collect(),
open_delimiter_tokens: (vec!["{", "("]).into_iter().collect(),
}),
_ => None,
}