diff --git a/src/parsing/syntax_set.rs b/src/parsing/syntax_set.rs index 41bf737d..9dabb04f 100644 --- a/src/parsing/syntax_set.rs +++ b/src/parsing/syntax_set.rs @@ -750,22 +750,14 @@ impl SyntaxSetBuilder { } } ByScope { scope, ref sub_context } => { - let context_name = sub_context.as_ref().map_or("main", |x| &**x); - syntaxes - .iter() - .enumerate() - .rev() - .find(|index_and_syntax| index_and_syntax.1.scope == scope) - .and_then(|index_and_syntax| all_context_ids[index_and_syntax.0].get(context_name)) + Self::find_id(sub_context, all_context_ids, syntaxes, |index_and_syntax| { + index_and_syntax.1.scope == scope + }) } File { ref name, ref sub_context } => { - let context_name = sub_context.as_ref().map_or("main", |x| &**x); - syntaxes - .iter() - .enumerate() - .rev() - .find(|index_and_syntax| &index_and_syntax.1.name == name) - .and_then(|index_and_syntax| all_context_ids[index_and_syntax.0].get(context_name)) + Self::find_id(sub_context, all_context_ids, syntaxes, |index_and_syntax| { + &index_and_syntax.1.name == name + }) } Direct(_) => None, }; @@ -775,6 +767,21 @@ impl SyntaxSetBuilder { } } + fn find_id<'a>( + sub_context: &Option, + all_context_ids: &'a [HashMap], + syntaxes: &'a [SyntaxReference], + predicate: impl FnMut(&(usize, &SyntaxReference)) -> bool, + ) -> Option<&'a ContextId> { + let context_name = sub_context.as_ref().map_or("main", |x| &**x); + syntaxes + .iter() + .enumerate() + .rev() + .find(predicate) + .and_then(|index_and_syntax| all_context_ids[index_and_syntax.0].get(context_name)) + } + fn link_match_pat( match_pat: &mut MatchPattern, syntax_index: usize,