diff --git a/crates/editor/src/editor.rs b/crates/editor/src/editor.rs index 39c9b6c7958a5ab62d74b6e9da377ea2eb6cfb41..5f25cab132e40c9aa89b1705c593b3572cac0484 100644 --- a/crates/editor/src/editor.rs +++ b/crates/editor/src/editor.rs @@ -20074,8 +20074,13 @@ fn process_completion_for_edit( let buffer = buffer.read(cx); let buffer_snapshot = buffer.snapshot(); let (snippet, new_text) = if completion.is_snippet() { + // Workaround for typescript language server issues so that methods don't expand within + // strings and functions with type expressions. The previous point is used because the query + // for function identifier doesn't match when the cursor is immediately after. See PR #30312 let mut snippet_source = completion.new_text.clone(); - if let Some(scope) = buffer_snapshot.language_scope_at(cursor_position) { + let mut previous_point = text::ToPoint::to_point(cursor_position, buffer); + previous_point.column = previous_point.column.saturating_sub(1); + if let Some(scope) = buffer_snapshot.language_scope_at(previous_point) { if scope.prefers_label_for_snippet_in_completion() { if let Some(label) = completion.label() { if matches!( diff --git a/crates/languages/src/tsx/config.toml b/crates/languages/src/tsx/config.toml index 7ceca7439e5448a93a9cdcca5a3b5fadd3c3bad5..4176e622158089b44cc393a83d25727a2e6efd98 100644 --- a/crates/languages/src/tsx/config.toml +++ b/crates/languages/src/tsx/config.toml @@ -38,5 +38,5 @@ completion_query_characters = ["-", "."] opt_into_language_servers = ["tailwindcss-language-server"] prefer_label_for_snippet = true -[overrides.call_expression] +[overrides.function_name_before_type_arguments] prefer_label_for_snippet = true diff --git a/crates/languages/src/tsx/overrides.scm b/crates/languages/src/tsx/overrides.scm index 7af776306c623d4414a82f607da4dd7924fa5e4e..b26d010ce34b58cac34e516075c8c010525ed5fe 100644 --- a/crates/languages/src/tsx/overrides.scm +++ b/crates/languages/src/tsx/overrides.scm @@ -14,4 +14,6 @@ (jsx_expression) ] @default -(_ value: (call_expression) @call_expression) +(_ value: (call_expression + function: (identifier) @function_name_before_type_arguments + type_arguments: (type_arguments))) diff --git a/crates/languages/src/typescript/config.toml b/crates/languages/src/typescript/config.toml index 27ad1a9e94327bfb0908b3ffd1562db9aa11f78f..db0f32aa0d767ef2735189df0e520dc566e2c5c6 100644 --- a/crates/languages/src/typescript/config.toml +++ b/crates/languages/src/typescript/config.toml @@ -25,5 +25,5 @@ documentation = { start = "/**", end = "*/", prefix = "* ", tab_size = 1 } completion_query_characters = ["."] prefer_label_for_snippet = true -[overrides.call_expression] +[overrides.function_name_before_type_arguments] prefer_label_for_snippet = true diff --git a/crates/languages/src/typescript/overrides.scm b/crates/languages/src/typescript/overrides.scm index 86cb0e19fb833e06413ede305885a66f9b927235..17ad7be339ccb2e670ebcf225b1ab9d2b9af40ae 100644 --- a/crates/languages/src/typescript/overrides.scm +++ b/crates/languages/src/typescript/overrides.scm @@ -1,4 +1,6 @@ (comment) @comment.inclusive (string) @string -(_ value: (call_expression) @call_expression) +(_ value: (call_expression + function: (identifier) @function_name_before_type_arguments + type_arguments: (type_arguments)))