From 5135fa37eb11eb2c83cda12caddb5d9eb7cb1c61 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bla=C5=BE=20Hrastnik?= Date: Mon, 3 Jan 2022 15:35:05 +0900 Subject: [PATCH] Reuse the source slice between layers --- helix-core/src/syntax.rs | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/helix-core/src/syntax.rs b/helix-core/src/syntax.rs index 8a9735690..6e128f0ba 100644 --- a/helix-core/src/syntax.rs +++ b/helix-core/src/syntax.rs @@ -493,18 +493,19 @@ impl Syntax { let mut cursor = ts_parser.cursors.pop().unwrap_or_else(QueryCursor::new); // TODO: might need to set cursor range + let source_slice = source.slice(..); + while let Some(layer_id) = queue.pop_front() { // Re-parse the tree. self.layers[layer_id].parse(ts_parser, source)?; - let source = source.slice(..); let layer = &self.layers[layer_id]; // Process injections. let matches = cursor.matches( &layer.config.injections_query, layer.tree().root_node(), - RopeProvider(source), + RopeProvider(source_slice), ); let mut injections = Vec::new(); for mat in matches { @@ -512,12 +513,12 @@ impl Syntax { &layer.config, &layer.config.injections_query, &mat, - source, + source_slice, ); // Explicitly remove this match so that none of its other captures will remain // in the stream of captures. - mat.remove(); // TODO: is this still necessary? + mat.remove(); // If a language is found with the given name, then add a new language layer // to the highlighted document. @@ -542,7 +543,7 @@ impl Syntax { let matches = cursor.matches( combined_injections_query, layer.tree().root_node(), - RopeProvider(source), + RopeProvider(source_slice), ); for mat in matches { let entry = &mut injections_by_pattern_index[mat.pattern_index]; @@ -550,7 +551,7 @@ impl Syntax { &layer.config, combined_injections_query, &mat, - source, + source_slice, ); if language_name.is_some() { entry.0 = language_name;