Skip to content

Commit

Permalink
tree-sitter: Refactor lazy query loading
Browse files Browse the repository at this point in the history
The code for loading queries can be shared between indent and
textobjects queries. In both cases we want to kick an error
message out to the logs.
  • Loading branch information
the-mikedavis authored and archseer committed Aug 31, 2022
1 parent 12ddd03 commit 4c789cf
Showing 1 changed file with 16 additions and 17 deletions.
33 changes: 16 additions & 17 deletions helix-core/src/syntax.rs
Original file line number Diff line number Diff line change
Expand Up @@ -399,35 +399,34 @@ impl LanguageConfiguration {

pub fn indent_query(&self) -> Option<&Query> {
self.indent_query
.get_or_init(|| {
let lang_name = self.language_id.to_ascii_lowercase();
let query_text = read_query(&lang_name, "indents.scm");
if query_text.is_empty() {
return None;
}
let lang = self.highlight_config.get()?.as_ref()?.language;
Query::new(lang, &query_text).ok()
})
.get_or_init(|| self.load_query("indents.scm"))
.as_ref()
}

pub fn textobject_query(&self) -> Option<&TextObjectQuery> {
self.textobject_query
.get_or_init(|| -> Option<TextObjectQuery> {
let lang_name = self.language_id.to_ascii_lowercase();
let query_text = read_query(&lang_name, "textobjects.scm");
let lang = self.highlight_config.get()?.as_ref()?.language;
let query = Query::new(lang, &query_text)
.map_err(|e| log::error!("Failed to parse textobjects.scm queries: {}", e))
.ok()?;
Some(TextObjectQuery { query })
.get_or_init(|| {
self.load_query("textobjects.scm")
.map(|query| TextObjectQuery { query })
})
.as_ref()
}

pub fn scope(&self) -> &str {
&self.scope
}

fn load_query(&self, kind: &str) -> Option<Query> {
let lang_name = self.language_id.to_ascii_lowercase();
let query_text = read_query(&lang_name, kind);
if query_text.is_empty() {
return None;
}
let lang = self.highlight_config.get()?.as_ref()?.language;
Query::new(lang, &query_text)
.map_err(|e| log::error!("Failed to parse {} queries for {}: {}", kind, lang_name, e))
.ok()
}
}

// Expose loader as Lazy<> global since it's always static?
Expand Down

0 comments on commit 4c789cf

Please sign in to comment.