diff --git a/src/main.rs b/src/main.rs index 4ba695795..7dc272023 100644 --- a/src/main.rs +++ b/src/main.rs @@ -89,7 +89,7 @@ fn main() { match guess(path, &src) { Some(lang) => { let ts_lang = tsp::from_language(lang); - let (tree, _) = tsp::parse_to_tree(&src, &ts_lang); + let tree = tsp::parse_to_tree(&src, &ts_lang); tsp::print_tree(&src, &tree); } None => { diff --git a/src/tree_sitter_parser.rs b/src/tree_sitter_parser.rs index d98387fea..8a97d9e4e 100644 --- a/src/tree_sitter_parser.rs +++ b/src/tree_sitter_parser.rs @@ -458,17 +458,22 @@ pub fn from_language(language: guess::Language) -> TreeSitterConfig { } /// Parse `src` with tree-sitter. -pub fn parse_to_tree( - src: &str, - config: &TreeSitterConfig, -) -> (tree_sitter::Tree, HighlightedNodeIds) { +pub fn parse_to_tree(src: &str, config: &TreeSitterConfig) -> tree_sitter::Tree { let mut parser = ts::Parser::new(); parser .set_language(config.language) .expect("Incompatible tree-sitter version"); - let tree = parser.parse(src, None).unwrap(); + parser.parse(src, None).unwrap() +} +/// Calculate which tree-sitter node IDs should have which syntax +/// highlighting. +fn tree_highlights( + tree: &tree_sitter::Tree, + src: &str, + config: &TreeSitterConfig, +) -> HighlightedNodeIds { let mut keyword_ish_capture_ids = vec![]; if let Some(idx) = config.highlight_query.capture_index_for_name("keyword") { keyword_ish_capture_ids.push(idx); @@ -528,12 +533,11 @@ pub fn parse_to_tree( } } - let highlights = HighlightedNodeIds { + HighlightedNodeIds { keyword_ids, string_ids, type_ids, - }; - (tree, highlights) + } } pub fn print_tree(src: &str, tree: &tree_sitter::Tree) { @@ -577,7 +581,8 @@ pub fn parse<'a>( return vec![]; } - let (tree, highlights) = parse_to_tree(src, config); + let tree = parse_to_tree(src, config); + let highlights = tree_highlights(&tree, src, config); let nl_pos = NewlinePositions::from(src); let mut cursor = tree.walk();