language_core: Remove imports support (#52570)

Finn Evers created

This PR removes the imports query and all surrounding support from the
language_core crate.

The imports query was experimented with during the addition of Zeta 2.
However, it has been unused for a few months now and the direction does
not seemt to be pursued anymore.

Thus, removing the support here. 

Release Notes:

- N/A

Change summary

crates/grammars/src/c/config.toml           |  1 
crates/grammars/src/c/imports.scm           |  7 --
crates/grammars/src/cpp/config.toml         |  1 
crates/grammars/src/cpp/imports.scm         |  6 --
crates/grammars/src/go/imports.scm          | 12 ----
crates/grammars/src/javascript/config.toml  |  1 
crates/grammars/src/javascript/imports.scm  | 16 -----
crates/grammars/src/python/config.toml      |  1 
crates/grammars/src/python/imports.scm      | 38 -------------
crates/grammars/src/rust/config.toml        |  2 
crates/grammars/src/rust/imports.scm        | 29 ----------
crates/grammars/src/tsx/imports.scm         | 16 -----
crates/grammars/src/typescript/config.toml  |  1 
crates/grammars/src/typescript/imports.scm  | 23 --------
crates/language/src/language.rs             | 22 ++-----
crates/language_core/src/grammar.rs         | 65 -----------------------
crates/language_core/src/language_config.rs | 11 ---
crates/language_core/src/language_core.rs   |  6 +-
crates/language_core/src/queries.rs         |  2 
19 files changed, 10 insertions(+), 250 deletions(-)

Detailed changes

crates/grammars/src/c/config.toml 🔗

@@ -17,4 +17,3 @@ brackets = [
 ]
 debuggers = ["CodeLLDB", "GDB"]
 documentation_comment = { start = "/*", prefix = "* ", end = "*/", tab_size = 1 }
-import_path_strip_regex = "^<|>$"

crates/grammars/src/c/imports.scm 🔗

@@ -1,7 +0,0 @@
-(preproc_include
-  path: [
-    ((system_lib_string) @source @wildcard
-      (#strip! @source "[<>]"))
-    (string_literal
-      (string_content) @source @wildcard)
-  ]) @import

crates/grammars/src/cpp/config.toml 🔗

@@ -19,4 +19,3 @@ brackets = [
 ]
 debuggers = ["CodeLLDB", "GDB"]
 documentation_comment = { start = "/*", prefix = "* ", end = "*/", tab_size = 1 }
-import_path_strip_regex = "^<|>$"

crates/grammars/src/cpp/imports.scm 🔗

@@ -1,6 +0,0 @@
-(preproc_include
-  path: [
-    (system_lib_string) @source @wildcard
-    (string_literal
-      (string_content) @source @wildcard)
-  ]) @import

crates/grammars/src/go/imports.scm 🔗

@@ -1,12 +0,0 @@
-(import_spec
-  name: [
-    (dot)
-    (package_identifier)
-  ]
-  path: (interpreted_string_literal
-    (interpreted_string_literal_content) @namespace)) @wildcard @import
-
-(import_spec
-  !name
-  path: (interpreted_string_literal
-    (interpreted_string_literal_content) @namespace)) @wildcard @import

crates/grammars/src/javascript/config.toml 🔗

@@ -24,7 +24,6 @@ tab_size = 2
 scope_opt_in_language_servers = ["tailwindcss-language-server", "emmet-language-server"]
 prettier_parser_name = "babel"
 debuggers = ["JavaScript"]
-import_path_strip_regex = "(?:/index)?\\.[jt]s$"
 
 [jsx_tag_auto_close]
 open_tag_node_name = "jsx_opening_element"

crates/grammars/src/javascript/imports.scm 🔗

@@ -1,16 +0,0 @@
-(import_statement
-  import_clause: (import_clause
-    [
-      (identifier) @name
-      (named_imports
-        (import_specifier
-          name: (_) @name
-          alias: (_)? @alias))
-    ])
-  source: (string
-    (string_fragment) @source)) @import
-
-(import_statement
-  !import_clause
-  source: (string
-    (string_fragment) @source @wildcard)) @import

crates/grammars/src/python/config.toml 🔗

@@ -36,4 +36,3 @@ decrease_indent_patterns = [
   { pattern = "^\\s*except\\b.*:\\s*(#.*)?",  valid_after = ["try", "except"] },
   { pattern = "^\\s*finally\\b.*:\\s*(#.*)?", valid_after = ["try", "except", "else"] },
 ]
-import_path_strip_regex = "/__init__\\.py$"

crates/grammars/src/python/imports.scm 🔗

@@ -1,38 +0,0 @@
-(import_statement
-  name: [
-    (dotted_name
-      ((identifier) @namespace
-        ".")*
-      (identifier) @namespace .)
-    (aliased_import
-      name: (dotted_name
-        ((identifier) @namespace
-          ".")*
-        (identifier) @namespace .))
-  ]) @wildcard @import
-
-(import_from_statement
-  module_name: [
-    (dotted_name
-      ((identifier) @namespace
-        ".")*
-      (identifier) @namespace .)
-    (relative_import
-      (dotted_name
-        ((identifier) @namespace
-          ".")*
-        (identifier) @namespace .)?)
-  ]
-  (wildcard_import)? @wildcard
-  name: [
-    (dotted_name
-      ((identifier) @namespace
-        ".")*
-      (identifier) @name .)
-    (aliased_import
-      name: (dotted_name
-        ((identifier) @namespace
-          ".")*
-        (identifier) @name .)
-      alias: (identifier) @alias)
-  ]?) @import

crates/grammars/src/rust/config.toml 🔗

@@ -18,5 +18,3 @@ brackets = [
 collapsed_placeholder = " /* ... */ "
 debuggers = ["CodeLLDB", "GDB"]
 documentation_comment = { start = "/*", prefix = "* ", end = "*/", tab_size = 1 }
-ignored_import_segments = ["crate", "super"]
-import_path_strip_regex = "/(lib|mod)\\.rs$"

crates/grammars/src/rust/imports.scm 🔗

@@ -1,29 +0,0 @@
-(use_declaration) @import
-
-(scoped_use_list
-  path: (_) @namespace
-  list: (_) @list)
-
-(scoped_identifier
-  path: (_) @namespace
-  name: (identifier) @name)
-
-(use_list
-  (identifier) @name)
-
-(use_declaration
-  (identifier) @name)
-
-(use_as_clause
-  path: (scoped_identifier
-    path: (_) @namespace
-    name: (_) @name)
-  alias: (_) @alias)
-
-(use_as_clause
-  path: (identifier) @name
-  alias: (_) @alias)
-
-(use_wildcard
-  (_)? @namespace
-  "*" @wildcard)

crates/grammars/src/tsx/imports.scm 🔗

@@ -1,16 +0,0 @@
-(import_statement
-  import_clause: (import_clause
-    [
-      (identifier) @name
-      (named_imports
-        (import_specifier
-          name: (_) @name
-          alias: (_)? @alias))
-    ])
-  source: (string
-    (string_fragment) @source)) @import
-
-(import_statement
-  !import_clause
-  source: (string
-    (string_fragment) @source @wildcard)) @import

crates/grammars/src/typescript/config.toml 🔗

@@ -23,7 +23,6 @@ prettier_parser_name = "typescript"
 tab_size = 2
 debuggers = ["JavaScript"]
 scope_opt_in_language_servers = ["tailwindcss-language-server"]
-import_path_strip_regex = "(?:/index)?\\.[jt]s$"
 
 [overrides.string]
 completion_query_characters = ["-", "."]

crates/grammars/src/typescript/imports.scm 🔗

@@ -1,23 +0,0 @@
-(import_statement
-  import_clause: (import_clause
-    [
-      (identifier) @name
-      (named_imports
-        (import_specifier
-          name: (_) @name
-          alias: (_)? @alias))
-      (namespace_import) @wildcard
-    ])
-  source: (string
-    (string_fragment) @source)) @import
-
-(import_statement
-  !source
-  import_clause: (import_require_clause
-    source: (string
-      (string_fragment) @source))) @wildcard @import
-
-(import_statement
-  !import_clause
-  source: (string
-    (string_fragment) @source)) @wildcard @import

crates/language/src/language.rs 🔗

@@ -39,14 +39,13 @@ pub use language_core::highlight_map::{HighlightId, HighlightMap};
 pub use language_core::{
     BlockCommentConfig, BracketPair, BracketPairConfig, BracketPairContent, BracketsConfig,
     BracketsPatternConfig, CodeLabel, CodeLabelBuilder, DebugVariablesConfig, DebuggerTextObject,
-    DecreaseIndentConfig, Grammar, GrammarId, HighlightsConfig, ImportsConfig, IndentConfig,
-    InjectionConfig, InjectionPatternConfig, JsxTagAutoCloseConfig, LanguageConfig,
-    LanguageConfigOverride, LanguageId, LanguageMatcher, OrderedListConfig, OutlineConfig,
-    Override, OverrideConfig, OverrideEntry, PromptResponseContext, RedactionConfig,
-    RunnableCapture, RunnableConfig, SoftWrap, Symbol, TaskListConfig, TextObject,
-    TextObjectConfig, ToLspPosition, WrapCharactersConfig,
-    auto_indent_using_last_non_empty_line_default, deserialize_regex, deserialize_regex_vec,
-    regex_json_schema, regex_vec_json_schema, serialize_regex,
+    DecreaseIndentConfig, Grammar, GrammarId, HighlightsConfig, IndentConfig, InjectionConfig,
+    InjectionPatternConfig, JsxTagAutoCloseConfig, LanguageConfig, LanguageConfigOverride,
+    LanguageId, LanguageMatcher, OrderedListConfig, OutlineConfig, Override, OverrideConfig,
+    OverrideEntry, PromptResponseContext, RedactionConfig, RunnableCapture, RunnableConfig,
+    SoftWrap, Symbol, TaskListConfig, TextObject, TextObjectConfig, ToLspPosition,
+    WrapCharactersConfig, auto_indent_using_last_non_empty_line_default, deserialize_regex,
+    deserialize_regex_vec, regex_json_schema, regex_vec_json_schema, serialize_regex,
 };
 pub use language_registry::{
     LanguageName, LanguageServerStatusUpdate, LoadedLanguage, ServerHealth,
@@ -908,10 +907,6 @@ impl Language {
         })
     }
 
-    pub fn with_imports_query(self, source: &str) -> Result<Self> {
-        self.with_grammar_query_and_name(|grammar, name| grammar.with_imports_query(source, name))
-    }
-
     pub fn with_brackets_query(self, source: &str) -> Result<Self> {
         self.with_grammar_query_and_name(|grammar, name| grammar.with_brackets_query(source, name))
     }
@@ -1579,9 +1574,6 @@ pub fn rust_lang() -> Arc<Language> {
         debugger: Some(Cow::from(include_str!(
             "../../grammars/src/rust/debugger.scm"
         ))),
-        imports: Some(Cow::from(include_str!(
-            "../../grammars/src/rust/imports.scm"
-        ))),
     })
     .expect("Could not parse queries");
     Arc::new(language)

crates/language_core/src/grammar.rs 🔗

@@ -41,7 +41,6 @@ pub struct Grammar {
     pub injection_config: Option<InjectionConfig>,
     pub override_config: Option<OverrideConfig>,
     pub debug_variables_config: Option<DebugVariablesConfig>,
-    pub imports_config: Option<ImportsConfig>,
     pub highlight_map: Mutex<HighlightMap>,
 }
 
@@ -185,17 +184,6 @@ pub struct DebugVariablesConfig {
     pub objects_by_capture_ix: Vec<(u32, DebuggerTextObject)>,
 }
 
-pub struct ImportsConfig {
-    pub query: Query,
-    pub import_ix: u32,
-    pub name_ix: Option<u32>,
-    pub namespace_ix: Option<u32>,
-    pub source_ix: Option<u32>,
-    pub list_ix: Option<u32>,
-    pub wildcard_ix: Option<u32>,
-    pub alias_ix: Option<u32>,
-}
-
 enum Capture<'a> {
     Required(&'static str, &'a mut u32),
     Optional(&'static str, &'a mut Option<u32>),
@@ -273,7 +261,6 @@ impl Grammar {
             runnable_config: None,
             error_query: Query::new(&ts_language, "(ERROR) @error").ok(),
             debug_variables_config: None,
-            imports_config: None,
             ts_language,
             highlight_map: Default::default(),
         }
@@ -300,10 +287,6 @@ impl Grammar {
         self.debug_variables_config.as_ref()
     }
 
-    pub fn imports_config(&self) -> Option<&ImportsConfig> {
-        self.imports_config.as_ref()
-    }
-
     /// Load all queries from `LanguageQueries` into this grammar, mutating the
     /// associated `LanguageConfig` (the override query clears
     /// `brackets.disabled_scopes_by_bracket_ix`).
@@ -369,11 +352,6 @@ impl Grammar {
                 .with_debug_variables_query(query.as_ref(), name)
                 .context("Error loading debug variables query")?;
         }
-        if let Some(query) = queries.imports {
-            self = self
-                .with_imports_query(query.as_ref(), name)
-                .context("Error loading imports query")?;
-        }
         Ok(self)
     }
 
@@ -519,49 +497,6 @@ impl Grammar {
         Ok(self)
     }
 
-    pub fn with_imports_query(
-        mut self,
-        source: &str,
-        language_name: &LanguageName,
-    ) -> Result<Self> {
-        let query = Query::new(&self.ts_language, source)?;
-
-        let mut import_ix = 0;
-        let mut name_ix = None;
-        let mut namespace_ix = None;
-        let mut source_ix = None;
-        let mut list_ix = None;
-        let mut wildcard_ix = None;
-        let mut alias_ix = None;
-        if populate_capture_indices(
-            &query,
-            language_name,
-            "imports",
-            &[],
-            &mut [
-                Capture::Required("import", &mut import_ix),
-                Capture::Optional("name", &mut name_ix),
-                Capture::Optional("namespace", &mut namespace_ix),
-                Capture::Optional("source", &mut source_ix),
-                Capture::Optional("list", &mut list_ix),
-                Capture::Optional("wildcard", &mut wildcard_ix),
-                Capture::Optional("alias", &mut alias_ix),
-            ],
-        ) {
-            self.imports_config = Some(ImportsConfig {
-                query,
-                import_ix,
-                name_ix,
-                namespace_ix,
-                source_ix,
-                list_ix,
-                wildcard_ix,
-                alias_ix,
-            });
-        }
-        Ok(self)
-    }
-
     pub fn with_brackets_query(
         mut self,
         source: &str,

crates/language_core/src/language_config.rs 🔗

@@ -148,15 +148,6 @@ pub struct LanguageConfig {
     /// A list of preferred debuggers for this language.
     #[serde(default)]
     pub debuggers: IndexSet<SharedString>,
-    /// A list of import namespace segments that aren't expected to appear in file paths. For
-    /// example, "super" and "crate" in Rust.
-    #[serde(default)]
-    pub ignored_import_segments: HashSet<Arc<str>>,
-    /// Regular expression that matches substrings to omit from import paths, to make the paths more
-    /// similar to how they are specified when imported. For example, "/mod\.rs$" or "/__init__\.py$".
-    #[serde(default, deserialize_with = "deserialize_regex")]
-    #[schemars(schema_with = "regex_json_schema")]
-    pub import_path_strip_regex: Option<Regex>,
 }
 
 impl LanguageConfig {
@@ -204,8 +195,6 @@ impl Default for LanguageConfig {
             completion_query_characters: Default::default(),
             linked_edit_characters: Default::default(),
             debuggers: Default::default(),
-            ignored_import_segments: Default::default(),
-            import_path_strip_regex: None,
         }
     }
 }

crates/language_core/src/language_core.rs 🔗

@@ -9,9 +9,9 @@ pub mod language_config;
 pub use diagnostic::{Diagnostic, DiagnosticSourceKind};
 pub use grammar::{
     BracketsConfig, BracketsPatternConfig, DebugVariablesConfig, DebuggerTextObject, Grammar,
-    GrammarId, HighlightsConfig, ImportsConfig, IndentConfig, InjectionConfig,
-    InjectionPatternConfig, NEXT_GRAMMAR_ID, OutlineConfig, OverrideConfig, OverrideEntry,
-    RedactionConfig, RunnableCapture, RunnableConfig, TextObject, TextObjectConfig,
+    GrammarId, HighlightsConfig, IndentConfig, InjectionConfig, InjectionPatternConfig,
+    NEXT_GRAMMAR_ID, OutlineConfig, OverrideConfig, OverrideEntry, RedactionConfig,
+    RunnableCapture, RunnableConfig, TextObject, TextObjectConfig,
 };
 pub use highlight_map::{HighlightId, HighlightMap};
 pub use language_config::{

crates/language_core/src/queries.rs 🔗

@@ -13,7 +13,6 @@ pub const QUERY_FILENAME_PREFIXES: &[(&str, QueryFieldAccessor)] = &[
     ("runnables", |q| &mut q.runnables),
     ("debugger", |q| &mut q.debugger),
     ("textobjects", |q| &mut q.text_objects),
-    ("imports", |q| &mut q.imports),
 ];
 
 /// Tree-sitter language queries for a given language.
@@ -29,5 +28,4 @@ pub struct LanguageQueries {
     pub runnables: Option<Cow<'static, str>>,
     pub text_objects: Option<Cow<'static, str>>,
     pub debugger: Option<Cow<'static, str>>,
-    pub imports: Option<Cow<'static, str>>,
 }