on master help sign in
tree-sitter: Refactor lazy query loading
4c789cfMichael Davis
helix-core/src/syntax.rs+16−17
@@ -399,28 +399,15 @@ impl LanguageConfiguration {
399
399
400 pub fn indent_query(&self) -> Option<&Query> {
400 pub fn indent_query(&self) -> Option<&Query> {
401 self.indent_query
401 self.indent_query
402− .get_or_init(|| {
402+ .get_or_init(|| self.load_query("indents.scm"))
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− })
411 .as_ref()
403 .as_ref()
412 }
404 }
413
405
414 pub fn textobject_query(&self) -> Option<&TextObjectQuery> {
406 pub fn textobject_query(&self) -> Option<&TextObjectQuery> {
415 self.textobject_query
407 self.textobject_query
416− .get_or_init(|| -> Option<TextObjectQuery> {
408+ .get_or_init(|| {
417− let lang_name = self.language_id.to_ascii_lowercase();
409+ self.load_query("textobjects.scm")
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 })
410+ .map(|query| TextObjectQuery { query })
424 })
411 })
425 .as_ref()
412 .as_ref()
426 }
413 }
@@ -428,6 +415,18 @@ impl LanguageConfiguration {
428 pub fn scope(&self) -> &str {
415 pub fn scope(&self) -> &str {
429 &self.scope
416 &self.scope
430 }
417 }
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+ }
431}
430}
432
431
433// Expose loader as Lazy<> global since it's always static?
432// Expose loader as Lazy<> global since it's always static?