From 7607a24cdb4f6d6d6e7aae37930d20ddac09435f Mon Sep 17 00:00:00 2001 From: Tarik Brown Date: Fri, 29 Sep 2023 16:44:55 -0700 Subject: [PATCH 1/8] Add loc string and Add Missing Include handler --- .../src/LanguageServer/Providers/codeActionProvider.ts | 8 ++++++-- Extension/src/LanguageServer/extension.ts | 9 +++++++++ Extension/src/nativeStrings.json | 1 + 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/Extension/src/LanguageServer/Providers/codeActionProvider.ts b/Extension/src/LanguageServer/Providers/codeActionProvider.ts index 66b966ebd8..b575673a84 100644 --- a/Extension/src/LanguageServer/Providers/codeActionProvider.ts +++ b/Extension/src/LanguageServer/Providers/codeActionProvider.ts @@ -97,13 +97,17 @@ export class CodeActionProvider implements vscode.CodeActionProvider { let title: string = getLocalizedString(command.localizeStringParams); let wsEdit: vscode.WorkspaceEdit | undefined; let codeActionKind: vscode.CodeActionKind = vscode.CodeActionKind.QuickFix; - if (command.edit) { + if (command.edit && command.command !== "C_Cpp.AddMissingInclude" ) { // Inline macro feature. codeActionKind = CodeActionProvider.inlineMacroKind; wsEdit = new vscode.WorkspaceEdit(); wsEdit.replace(document.uri, makeVscodeRange(command.edit.range), command.edit.newText); hasInlineMacro = true; - } else if (command.command === "C_Cpp.RemoveAllCodeAnalysisProblems" && command.uri !== undefined) { + } else if ( command.edit && command.command === "C_Cpp.AddMissingInclude") { + wsEdit = new vscode.WorkspaceEdit(); + wsEdit.replace(document.uri, makeVscodeRange(command.edit.range), command.edit.newText); + } + else if (command.command === "C_Cpp.RemoveAllCodeAnalysisProblems" && command.uri !== undefined) { // The "RemoveAll" message is sent for all code analysis squiggles. const vsCodeRange: vscode.Range = makeVscodeRange(r); const codeActionDiagnosticInfo: CodeActionDiagnosticInfo[] | undefined = codeAnalysisFileToCodeActions.get(command.uri); diff --git a/Extension/src/LanguageServer/extension.ts b/Extension/src/LanguageServer/extension.ts index b54ade583b..1f2ae99dc2 100644 --- a/Extension/src/LanguageServer/extension.ts +++ b/Extension/src/LanguageServer/extension.ts @@ -436,6 +436,7 @@ export function registerCommands(enabled: boolean): void { commandDisposables.push(vscode.commands.registerCommand('C_Cpp.CreateDeclarationOrDefinition', enabled ? onCreateDeclarationOrDefinition : onDisabledCommand)); commandDisposables.push(vscode.commands.registerCommand('C_Cpp.CopyDeclarationOrDefinition', enabled ? onCopyDeclarationOrDefinition : onDisabledCommand)); commandDisposables.push(vscode.commands.registerCommand('C_Cpp.RescanCompilers', enabled ? onRescanCompilers : onDisabledCommand)); + commandDisposables.push(vscode.commands.registerCommand('C_Cpp.AddMissingInclude', enabled ? onAddMissingInclude : onDisabledCommand)); } function onDisabledCommand() { @@ -531,6 +532,14 @@ async function onRescanCompilers(sender?: any): Promise { return clients.ActiveClient.rescanCompilers(sender); } +async function onAddMissingInclude(args?: any): Promise { + const sender: any | undefined = util.isString(args?.sender) ? args.sender : args; + const properties: Record = { + sender: util.getSenderType(sender) + }; + telemetry.logLanguageServerEvent('CopyDeclDefn', properties); +} + async function selectIntelliSenseConfiguration(sender?: any): Promise { await clients.ActiveClient.ready; return clients.ActiveClient.promptSelectIntelliSenseConfiguration(sender); diff --git a/Extension/src/nativeStrings.json b/Extension/src/nativeStrings.json index 734a3514f5..6b23f4b54b 100644 --- a/Extension/src/nativeStrings.json +++ b/Extension/src/nativeStrings.json @@ -3,6 +3,7 @@ "include_not_found_in_browse_path": "Include file not found in browse.path.", "update_browse_path": "Edit \"browse.path\" setting", "add_to_include_path": "Add to \"includePath\": {0}", + "add_missing_include_path": "Add {0}", "edit_include_path": "Edit \"includePath\" setting", "disable_error_squiggles": "Disable error squiggles", "enable_error_squiggles": "Enable all error squiggles", From 4618b7a9cbeba253a10caf1b405be931792e4f2e Mon Sep 17 00:00:00 2001 From: Tarik Brown Date: Wed, 11 Oct 2023 11:01:52 -0700 Subject: [PATCH 2/8] Add AddMissingInclude Command and resolve lint --- Extension/src/LanguageServer/Providers/codeActionProvider.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Extension/src/LanguageServer/Providers/codeActionProvider.ts b/Extension/src/LanguageServer/Providers/codeActionProvider.ts index b575673a84..325b6470ac 100644 --- a/Extension/src/LanguageServer/Providers/codeActionProvider.ts +++ b/Extension/src/LanguageServer/Providers/codeActionProvider.ts @@ -97,13 +97,14 @@ export class CodeActionProvider implements vscode.CodeActionProvider { let title: string = getLocalizedString(command.localizeStringParams); let wsEdit: vscode.WorkspaceEdit | undefined; let codeActionKind: vscode.CodeActionKind = vscode.CodeActionKind.QuickFix; - if (command.edit && command.command !== "C_Cpp.AddMissingInclude" ) { + if (command.edit && command.command !== "C_Cpp.AddMissingInclude") { // Inline macro feature. codeActionKind = CodeActionProvider.inlineMacroKind; wsEdit = new vscode.WorkspaceEdit(); wsEdit.replace(document.uri, makeVscodeRange(command.edit.range), command.edit.newText); hasInlineMacro = true; - } else if ( command.edit && command.command === "C_Cpp.AddMissingInclude") { + } + else if (command.edit && command.command === "C_Cpp.AddMissingInclude") { wsEdit = new vscode.WorkspaceEdit(); wsEdit.replace(document.uri, makeVscodeRange(command.edit.range), command.edit.newText); } From 8b6aabf72080f8e3a5929881bdb01d94369a2d55 Mon Sep 17 00:00:00 2001 From: Tarik Brown Date: Thu, 12 Oct 2023 14:35:43 -0700 Subject: [PATCH 3/8] Refactor codeActionProvider --- .../LanguageServer/Providers/codeActionProvider.ts | 14 ++++++-------- Extension/src/LanguageServer/extension.ts | 8 ++------ Extension/src/nativeStrings.json | 5 ++++- 3 files changed, 12 insertions(+), 15 deletions(-) diff --git a/Extension/src/LanguageServer/Providers/codeActionProvider.ts b/Extension/src/LanguageServer/Providers/codeActionProvider.ts index 325b6470ac..72fcf12750 100644 --- a/Extension/src/LanguageServer/Providers/codeActionProvider.ts +++ b/Extension/src/LanguageServer/Providers/codeActionProvider.ts @@ -97,16 +97,14 @@ export class CodeActionProvider implements vscode.CodeActionProvider { let title: string = getLocalizedString(command.localizeStringParams); let wsEdit: vscode.WorkspaceEdit | undefined; let codeActionKind: vscode.CodeActionKind = vscode.CodeActionKind.QuickFix; - if (command.edit && command.command !== "C_Cpp.AddMissingInclude") { - // Inline macro feature. - codeActionKind = CodeActionProvider.inlineMacroKind; - wsEdit = new vscode.WorkspaceEdit(); - wsEdit.replace(document.uri, makeVscodeRange(command.edit.range), command.edit.newText); - hasInlineMacro = true; - } - else if (command.edit && command.command === "C_Cpp.AddMissingInclude") { + if (command.edit) { wsEdit = new vscode.WorkspaceEdit(); wsEdit.replace(document.uri, makeVscodeRange(command.edit.range), command.edit.newText); + if (command.command === "edit") { + // Inline macro feature. + codeActionKind = CodeActionProvider.inlineMacroKind; + hasInlineMacro = true; + } } else if (command.command === "C_Cpp.RemoveAllCodeAnalysisProblems" && command.uri !== undefined) { // The "RemoveAll" message is sent for all code analysis squiggles. diff --git a/Extension/src/LanguageServer/extension.ts b/Extension/src/LanguageServer/extension.ts index 1f2ae99dc2..e6c740de49 100644 --- a/Extension/src/LanguageServer/extension.ts +++ b/Extension/src/LanguageServer/extension.ts @@ -532,12 +532,8 @@ async function onRescanCompilers(sender?: any): Promise { return clients.ActiveClient.rescanCompilers(sender); } -async function onAddMissingInclude(args?: any): Promise { - const sender: any | undefined = util.isString(args?.sender) ? args.sender : args; - const properties: Record = { - sender: util.getSenderType(sender) - }; - telemetry.logLanguageServerEvent('CopyDeclDefn', properties); +async function onAddMissingInclude(): Promise { + telemetry.logLanguageServerEvent('AddMissingInclude'); } async function selectIntelliSenseConfiguration(sender?: any): Promise { diff --git a/Extension/src/nativeStrings.json b/Extension/src/nativeStrings.json index 6b23f4b54b..9cae4ce265 100644 --- a/Extension/src/nativeStrings.json +++ b/Extension/src/nativeStrings.json @@ -3,7 +3,10 @@ "include_not_found_in_browse_path": "Include file not found in browse.path.", "update_browse_path": "Edit \"browse.path\" setting", "add_to_include_path": "Add to \"includePath\": {0}", - "add_missing_include_path": "Add {0}", + "add_missing_include_path": { + "text": "Add '{0}'", + "hint": "{0} is C++ code to add, such as '#include '" + }, "edit_include_path": "Edit \"includePath\" setting", "disable_error_squiggles": "Disable error squiggles", "enable_error_squiggles": "Enable all error squiggles", From 29376046294a25f5ebf4c0354cd00feda0e23c30 Mon Sep 17 00:00:00 2001 From: Tarik Brown Date: Mon, 16 Oct 2023 14:10:59 -0700 Subject: [PATCH 4/8] resolve formatting and append newline to includes --- Extension/src/LanguageServer/Providers/codeActionProvider.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Extension/src/LanguageServer/Providers/codeActionProvider.ts b/Extension/src/LanguageServer/Providers/codeActionProvider.ts index 534c271103..24d2023119 100644 --- a/Extension/src/LanguageServer/Providers/codeActionProvider.ts +++ b/Extension/src/LanguageServer/Providers/codeActionProvider.ts @@ -98,14 +98,14 @@ export class CodeActionProvider implements vscode.CodeActionProvider { let codeActionKind: vscode.CodeActionKind = vscode.CodeActionKind.QuickFix; if (command.edit) { wsEdit = new vscode.WorkspaceEdit(); + command.edit.newText = command.edit.newText + "\r\n"; wsEdit.replace(document.uri, makeVscodeRange(command.edit.range), command.edit.newText); if (command.command === "edit") { // Inline macro feature. codeActionKind = CodeActionProvider.inlineMacroKind; hasInlineMacro = true; } - } - else if (command.command === "C_Cpp.RemoveAllCodeAnalysisProblems" && command.uri !== undefined) { + } else if (command.command === "C_Cpp.RemoveAllCodeAnalysisProblems" && command.uri !== undefined) { // The "RemoveAll" message is sent for all code analysis squiggles. const vsCodeRange: vscode.Range = makeVscodeRange(r); const codeActionDiagnosticInfo: CodeActionDiagnosticInfo[] | undefined = codeAnalysisFileToCodeActions.get(command.uri); From ade1f41670b9fe72be1c7f7d9c25197ac448403c Mon Sep 17 00:00:00 2001 From: Tarik Brown Date: Mon, 16 Oct 2023 15:08:49 -0700 Subject: [PATCH 5/8] Only apply new line to Add Missing Include --- Extension/src/LanguageServer/Providers/codeActionProvider.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Extension/src/LanguageServer/Providers/codeActionProvider.ts b/Extension/src/LanguageServer/Providers/codeActionProvider.ts index 24d2023119..012b786807 100644 --- a/Extension/src/LanguageServer/Providers/codeActionProvider.ts +++ b/Extension/src/LanguageServer/Providers/codeActionProvider.ts @@ -98,7 +98,9 @@ export class CodeActionProvider implements vscode.CodeActionProvider { let codeActionKind: vscode.CodeActionKind = vscode.CodeActionKind.QuickFix; if (command.edit) { wsEdit = new vscode.WorkspaceEdit(); - command.edit.newText = command.edit.newText + "\r\n"; + if (command.command === 'C_Cpp.AddMissingInclude'){ + command.edit.newText = command.edit.newText + "\r\n"; + } wsEdit.replace(document.uri, makeVscodeRange(command.edit.range), command.edit.newText); if (command.command === "edit") { // Inline macro feature. From bd2b4f1138b5d44a7d7936ab611cd455dffa24e8 Mon Sep 17 00:00:00 2001 From: Tarik Brown Date: Mon, 16 Oct 2023 15:21:28 -0700 Subject: [PATCH 6/8] Resolve lint issue --- Extension/src/LanguageServer/Providers/codeActionProvider.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Extension/src/LanguageServer/Providers/codeActionProvider.ts b/Extension/src/LanguageServer/Providers/codeActionProvider.ts index 012b786807..5d62d1d111 100644 --- a/Extension/src/LanguageServer/Providers/codeActionProvider.ts +++ b/Extension/src/LanguageServer/Providers/codeActionProvider.ts @@ -98,7 +98,7 @@ export class CodeActionProvider implements vscode.CodeActionProvider { let codeActionKind: vscode.CodeActionKind = vscode.CodeActionKind.QuickFix; if (command.edit) { wsEdit = new vscode.WorkspaceEdit(); - if (command.command === 'C_Cpp.AddMissingInclude'){ + if (command.command === 'C_Cpp.AddMissingInclude') { command.edit.newText = command.edit.newText + "\r\n"; } wsEdit.replace(document.uri, makeVscodeRange(command.edit.range), command.edit.newText); From 816d29d42f06725c8c6de4f52b5c2b962e467b5c Mon Sep 17 00:00:00 2001 From: Tarik Brown Date: Tue, 17 Oct 2023 13:23:29 -0700 Subject: [PATCH 7/8] Add new line specific to OS --- .../src/LanguageServer/Providers/codeActionProvider.ts | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/Extension/src/LanguageServer/Providers/codeActionProvider.ts b/Extension/src/LanguageServer/Providers/codeActionProvider.ts index 5d62d1d111..ba8af622fa 100644 --- a/Extension/src/LanguageServer/Providers/codeActionProvider.ts +++ b/Extension/src/LanguageServer/Providers/codeActionProvider.ts @@ -2,6 +2,7 @@ * Copyright (c) Microsoft Corporation. All Rights Reserved. * See 'LICENSE' in the project root for license information. * ------------------------------------------------------------------------------------------ */ +import * as os from 'os'; import * as vscode from 'vscode'; import { Position, Range, RequestType, TextEdit } from 'vscode-languageclient'; import * as nls from 'vscode-nls'; @@ -99,7 +100,11 @@ export class CodeActionProvider implements vscode.CodeActionProvider { if (command.edit) { wsEdit = new vscode.WorkspaceEdit(); if (command.command === 'C_Cpp.AddMissingInclude') { - command.edit.newText = command.edit.newText + "\r\n"; + if (os.platform() === 'win32') { + command.edit.newText = command.edit.newText + "\r\n"; + } else { + command.edit.newText = command.edit.newText + "\n"; + } } wsEdit.replace(document.uri, makeVscodeRange(command.edit.range), command.edit.newText); if (command.command === "edit") { From 50ea01647dbfa9d74dbf1e27dfe04798ba2ca100 Mon Sep 17 00:00:00 2001 From: Tarik Brown Date: Wed, 18 Oct 2023 12:11:26 -0700 Subject: [PATCH 8/8] Resolve newline --- .../src/LanguageServer/Providers/codeActionProvider.ts | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/Extension/src/LanguageServer/Providers/codeActionProvider.ts b/Extension/src/LanguageServer/Providers/codeActionProvider.ts index ba8af622fa..e7fe8e11da 100644 --- a/Extension/src/LanguageServer/Providers/codeActionProvider.ts +++ b/Extension/src/LanguageServer/Providers/codeActionProvider.ts @@ -2,7 +2,6 @@ * Copyright (c) Microsoft Corporation. All Rights Reserved. * See 'LICENSE' in the project root for license information. * ------------------------------------------------------------------------------------------ */ -import * as os from 'os'; import * as vscode from 'vscode'; import { Position, Range, RequestType, TextEdit } from 'vscode-languageclient'; import * as nls from 'vscode-nls'; @@ -100,11 +99,7 @@ export class CodeActionProvider implements vscode.CodeActionProvider { if (command.edit) { wsEdit = new vscode.WorkspaceEdit(); if (command.command === 'C_Cpp.AddMissingInclude') { - if (os.platform() === 'win32') { - command.edit.newText = command.edit.newText + "\r\n"; - } else { - command.edit.newText = command.edit.newText + "\n"; - } + command.edit.newText += "\n"; } wsEdit.replace(document.uri, makeVscodeRange(command.edit.range), command.edit.newText); if (command.command === "edit") {