on master help sign in
tree-sitter: Refactor lazy query loading

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.

commit4c789cfbda5cd0e6a6319fd3dafff8020529b762 authorMichael Davis <mcarsondavis@gmail.com> dateThu 25 Aug 2022, 12:54 (4 years ago) parent12ddd03
1 file changed+16−17
helix-core/src/syntax.rs+16−17
helix-core/src/syntax.rs+16−17
@@ -399,28 +399,15 @@ impl LanguageConfiguration {
399399
400400 pub fn indent_query(&self) -> Option<&Query> {
401401 self.indent_query
402− .get_or_init(|| {
403− let lang_name = self.language_id.to_ascii_lowercase();
404− let query_text = read_query(&lang_name, "indents.scm");
405− if query_text.is_empty() {
406− return None;
407− }
408− let lang = self.highlight_config.get()?.as_ref()?.language;
409− Query::new(lang, &query_text).ok()
410− })
402+ .get_or_init(|| self.load_query("indents.scm"))
411403 .as_ref()
412404 }
413405
414406 pub fn textobject_query(&self) -> Option<&TextObjectQuery> {
415407 self.textobject_query
416− .get_or_init(|| -> Option<TextObjectQuery> {
417− let lang_name = self.language_id.to_ascii_lowercase();
418− let query_text = read_query(&lang_name, "textobjects.scm");
419− let lang = self.highlight_config.get()?.as_ref()?.language;
420− let query = Query::new(lang, &query_text)
421− .map_err(|e| log::error!("Failed to parse textobjects.scm queries: {}", e))
422− .ok()?;
423− Some(TextObjectQuery { query })
408+ .get_or_init(|| {
409+ self.load_query("textobjects.scm")
410+ .map(|query| TextObjectQuery { query })
424411 })
425412 .as_ref()
426413 }
@@ -428,6 +415,18 @@ impl LanguageConfiguration {
428415 pub fn scope(&self) -> &str {
429416 &self.scope
430417 }
418+
419+ fn load_query(&self, kind: &str) -> Option<Query> {
420+ let lang_name = self.language_id.to_ascii_lowercase();
421+ let query_text = read_query(&lang_name, kind);
422+ if query_text.is_empty() {
423+ return None;
424+ }
425+ let lang = self.highlight_config.get()?.as_ref()?.language;
426+ Query::new(lang, &query_text)
427+ .map_err(|e| log::error!("Failed to parse {} queries for {}: {}", kind, lang_name, e))
428+ .ok()
429+ }
431430}
432431
433432// Expose loader as Lazy<> global since it's always static?