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