summaryrefslogtreecommitdiff
path: root/cli/lsp/tsc.rs
diff options
context:
space:
mode:
Diffstat (limited to 'cli/lsp/tsc.rs')
-rw-r--r--cli/lsp/tsc.rs164
1 files changed, 116 insertions, 48 deletions
diff --git a/cli/lsp/tsc.rs b/cli/lsp/tsc.rs
index e4c71e976..77bfd2078 100644
--- a/cli/lsp/tsc.rs
+++ b/cli/lsp/tsc.rs
@@ -3532,14 +3532,7 @@ impl From<&FmtOptionsConfig> for QuotePreference {
}
}
-#[derive(Debug, Serialize)]
-#[serde(rename_all = "kebab-case")]
-#[allow(dead_code)]
-pub enum ImportModuleSpecifierPreference {
- Auto,
- Relative,
- NonRelative,
-}
+pub type ImportModuleSpecifierPreference = config::ImportModuleSpecifier;
#[derive(Debug, Serialize)]
#[serde(rename_all = "kebab-case")]
@@ -3581,14 +3574,7 @@ pub enum IncludePackageJsonAutoImports {
Off,
}
-#[derive(Debug, Serialize)]
-#[serde(rename_all = "kebab-case")]
-#[allow(dead_code)]
-pub enum JsxAttributeCompletionStyle {
- Auto,
- Braces,
- None,
-}
+pub type JsxAttributeCompletionStyle = config::JsxAttributeCompletionStyle;
#[derive(Debug, Default, Serialize)]
#[serde(rename_all = "camelCase")]
@@ -3666,35 +3652,115 @@ pub struct UserPreferences {
}
impl UserPreferences {
- pub fn from_workspace_settings_for_specifier(
- settings: &config::WorkspaceSettings,
+ pub fn from_config_for_specifier(
+ config: &config::Config,
+ fmt_config: &FmtOptionsConfig,
specifier: &ModuleSpecifier,
) -> Self {
- let language_settings = settings.language_settings_for_specifier(specifier);
- Self {
- include_inlay_parameter_name_hints: language_settings
- .map(|s| (&s.inlay_hints.parameter_names.enabled).into()),
- include_inlay_parameter_name_hints_when_argument_matches_name:
- language_settings.map(|s| {
- !s.inlay_hints
- .parameter_names
- .suppress_when_argument_matches_name
- }),
- include_inlay_function_parameter_type_hints: language_settings
- .map(|s| s.inlay_hints.parameter_types.enabled),
- include_inlay_variable_type_hints: language_settings
- .map(|s| s.inlay_hints.variable_types.enabled),
- include_inlay_variable_type_hints_when_type_matches_name:
- language_settings.map(|s| {
- !s.inlay_hints.variable_types.suppress_when_type_matches_name
- }),
- include_inlay_property_declaration_type_hints: language_settings
- .map(|s| s.inlay_hints.property_declaration_types.enabled),
- include_inlay_function_like_return_type_hints: language_settings
- .map(|s| s.inlay_hints.function_like_return_types.enabled),
- include_inlay_enum_member_value_hints: language_settings
- .map(|s| s.inlay_hints.enum_member_values.enabled),
+ let base_preferences = Self {
+ allow_incomplete_completions: Some(true),
+ allow_text_changes_in_new_files: Some(specifier.scheme() == "file"),
+ // TODO(nayeemrmn): Investigate why we use `Index` here.
+ import_module_specifier_ending: Some(ImportModuleSpecifierEnding::Index),
+ include_completions_with_snippet_text: Some(
+ config.client_capabilities.snippet_support,
+ ),
+ provide_refactor_not_applicable_reason: Some(true),
+ quote_preference: Some(fmt_config.into()),
+ use_label_details_in_completion_entries: Some(true),
..Default::default()
+ };
+ let Some(language_settings) = config
+ .workspace_settings()
+ .language_settings_for_specifier(specifier)
+ else {
+ return base_preferences;
+ };
+ Self {
+ auto_import_file_exclude_patterns: Some(
+ language_settings
+ .preferences
+ .auto_import_file_exclude_patterns
+ .clone(),
+ ),
+ include_automatic_optional_chain_completions: Some(
+ language_settings.suggest.enabled
+ && language_settings
+ .suggest
+ .include_automatic_optional_chain_completions,
+ ),
+ include_completions_for_import_statements: Some(
+ language_settings.suggest.enabled
+ && language_settings
+ .suggest
+ .include_completions_for_import_statements,
+ ),
+ include_completions_for_module_exports: Some(
+ language_settings.suggest.enabled
+ && language_settings.suggest.auto_imports,
+ ),
+ include_completions_with_class_member_snippets: Some(
+ language_settings.suggest.enabled
+ && language_settings.suggest.class_member_snippets.enabled
+ && config.client_capabilities.snippet_support,
+ ),
+ include_completions_with_insert_text: Some(
+ language_settings.suggest.enabled,
+ ),
+ include_completions_with_object_literal_method_snippets: Some(
+ language_settings.suggest.enabled
+ && language_settings
+ .suggest
+ .object_literal_method_snippets
+ .enabled
+ && config.client_capabilities.snippet_support,
+ ),
+ import_module_specifier_preference: Some(
+ language_settings.preferences.import_module_specifier,
+ ),
+ include_inlay_parameter_name_hints: Some(
+ (&language_settings.inlay_hints.parameter_names.enabled).into(),
+ ),
+ include_inlay_parameter_name_hints_when_argument_matches_name: Some(
+ !language_settings
+ .inlay_hints
+ .parameter_names
+ .suppress_when_argument_matches_name,
+ ),
+ include_inlay_function_parameter_type_hints: Some(
+ language_settings.inlay_hints.parameter_types.enabled,
+ ),
+ include_inlay_variable_type_hints: Some(
+ language_settings.inlay_hints.variable_types.enabled,
+ ),
+ include_inlay_variable_type_hints_when_type_matches_name: Some(
+ !language_settings
+ .inlay_hints
+ .variable_types
+ .suppress_when_type_matches_name,
+ ),
+ include_inlay_property_declaration_type_hints: Some(
+ language_settings
+ .inlay_hints
+ .property_declaration_types
+ .enabled,
+ ),
+ include_inlay_function_like_return_type_hints: Some(
+ language_settings
+ .inlay_hints
+ .function_like_return_types
+ .enabled,
+ ),
+ include_inlay_enum_member_value_hints: Some(
+ language_settings.inlay_hints.enum_member_values.enabled,
+ ),
+ jsx_attribute_completion_style: Some(
+ language_settings.preferences.jsx_attribute_completion_style,
+ ),
+ provide_prefix_and_suffix_text_for_rename: Some(
+ language_settings.preferences.use_aliases_for_renames,
+ ),
+ ..base_preferences
}
}
}
@@ -5149,7 +5215,7 @@ mod tests {
}
#[test]
- fn include_suppress_inlay_hit_settings() {
+ fn include_suppress_inlay_hint_settings() {
let mut settings = WorkspaceSettings::default();
settings
.typescript
@@ -5161,11 +5227,13 @@ mod tests {
.inlay_hints
.variable_types
.suppress_when_type_matches_name = true;
- let user_preferences =
- UserPreferences::from_workspace_settings_for_specifier(
- &settings,
- &ModuleSpecifier::parse("file:///foo.ts").unwrap(),
- );
+ let mut config = config::Config::new();
+ config.set_workspace_settings(settings);
+ let user_preferences = UserPreferences::from_config_for_specifier(
+ &config,
+ &Default::default(),
+ &ModuleSpecifier::parse("file:///foo.ts").unwrap(),
+ );
assert_eq!(
user_preferences.include_inlay_variable_type_hints_when_type_matches_name,
Some(false)