diff --git a/Extension/cpp.hint b/Extension/bin/cpp.hint similarity index 100% rename from Extension/cpp.hint rename to Extension/bin/cpp.hint diff --git a/Extension/c_cpp_properties.schema.json b/Extension/c_cpp_properties.schema.json index 1760634e9..999706ffe 100644 --- a/Extension/c_cpp_properties.schema.json +++ b/Extension/c_cpp_properties.schema.json @@ -213,17 +213,6 @@ "recursiveIncludes": { "type": "object", "properties": { - "reduce": { - "markdownDescription": "Set to `always` to always reduce the number of recursive include paths provided to IntelliSense to only those paths currently referenced by #include statements. This requires first parsing files to determine which headers are included. Set to `never` to provide all recursive include paths to IntelliSense. Reducing the number of recursive include paths may improve IntelliSense performance when a very large number of recursive include paths are involved. Not reducing the number of recursive include paths can improve IntelliSense performance by avoiding the need to parse files to determine which include paths to provide. The `default` value is currently to reduce the number of recursive include paths provided to IntelliSense.", - "descriptionHint": "Markdown text between `` should not be translated or localized (they represent literal text) and the capitalization, spacing, and punctuation (including the ``) should not be altered.", - "type": "string", - "enum": [ - "always", - "never", - "default", - "${default}" - ] - }, "priority": { "markdownDescription": "The priority of recursive include paths. If set to `beforeSystemIncludes`, the recursive include paths will be searched before system include paths. If set to `afterSystemIncludes`, the recursive include paths will be searched after system include paths. `beforeSystemIncludes` would more closely reflect the search order of a compiler, while `afterSystemIncludes` may result in improved performance.", "descriptionHint": "Markdown text between `` should not be translated or localized (they represent literal text) and the capitalization, spacing, and punctuation (including the ``) should not be altered.", diff --git a/Extension/src/LanguageServer/client.ts b/Extension/src/LanguageServer/client.ts index 2eaf60a25..b6c00ab44 100644 --- a/Extension/src/LanguageServer/client.ts +++ b/Extension/src/LanguageServer/client.ts @@ -625,12 +625,12 @@ const CreateDeclarationOrDefinitionRequest: RequestType = new RequestType('cpptools/extractToFunction'); const GoToDirectiveInGroupRequest: RequestType = new RequestType('cpptools/goToDirectiveInGroup'); const GenerateDoxygenCommentRequest: RequestType = new RequestType('cpptools/generateDoxygenComment'); -const ChangeCppPropertiesRequest: RequestType = new RequestType('cpptools/didChangeCppProperties'); const IncludesRequest: RequestType = new RequestType('cpptools/getIncludes'); const CppContextRequest: RequestType = new RequestType('cpptools/getChatContext'); const CopilotCompletionContextRequest: RequestType = new RequestType('cpptools/getCompletionContext'); // Notifications to the server +const ChangeCppPropertiesNotification: NotificationType = new NotificationType('cpptools/didChangeCppProperties'); const DidOpenNotification: NotificationType = new NotificationType('textDocument/didOpen'); const FileCreatedNotification: NotificationType = new NotificationType('cpptools/fileCreated'); const FileChangedNotification: NotificationType = new NotificationType('cpptools/fileChanged'); @@ -1811,6 +1811,21 @@ export class DefaultClient implements Client { // TODO: should I set the output channel? Does this sort output between servers? }; + // Reset all UI state to default, in case this is a restart after a crash. + this.model.isIndexingWorkspace.Value = false; + this.model.isParsingWorkspace.Value = false; + this.model.isParsingWorkspacePaused.Value = false; + this.model.isParsingFiles.Value = false; + this.model.isUpdatingIntelliSense.Value = false; + this.model.isRunningCodeAnalysis.Value = false; + this.model.isCodeAnalysisPaused.Value = false; + this.model.codeAnalysisProcessed.Value = 0; + this.model.codeAnalysisTotal.Value = 0; + this.model.parsingWorkspaceStatus.Value = ""; + + // Refresh initializing state in UI. + this.model.isInitializingWorkspace.Value = true; + // Create the language client languageClient = new LanguageClient(`cpptools`, serverOptions, clientOptions); languageClient.onNotification(DebugProtocolNotification, logDebugProtocol); @@ -3291,7 +3306,7 @@ export class DefaultClient implements Client { params.configurations.push(modifiedConfig); }); - await this.languageClient.sendRequest(ChangeCppPropertiesRequest, params); + await this.languageClient.sendNotification(ChangeCppPropertiesNotification, params); if (!!this.lastCustomBrowseConfigurationProviderId && !!this.lastCustomBrowseConfiguration && !!this.lastCustomBrowseConfigurationProviderVersion) { if (!this.doneInitialCustomBrowseConfigurationCheck) { // Send the last custom browse configuration we received from this provider. diff --git a/Extension/src/LanguageServer/configurations.ts b/Extension/src/LanguageServer/configurations.ts index ce2fd780a..b4686505c 100644 --- a/Extension/src/LanguageServer/configurations.ts +++ b/Extension/src/LanguageServer/configurations.ts @@ -88,7 +88,6 @@ export interface Configuration { browse?: Browse; recursiveIncludes?: RecursiveIncludes; customConfigurationVariables?: { [key: string]: string }; - recursiveIncludesReduceIsExplicit?: boolean; recursiveIncludesPriorityIsExplicit?: boolean; recursiveIncludesOrderIsExplicit?: boolean; } @@ -978,8 +977,6 @@ export class CppProperties { if (!configuration.recursiveIncludes) { configuration.recursiveIncludes = {}; } - configuration.recursiveIncludes.reduce = this.updateConfigurationString(configuration.recursiveIncludes.reduce, settings.defaultRecursiveIncludesReduce); - configuration.recursiveIncludesReduceIsExplicit = configuration.recursiveIncludesReduceIsExplicit || settings.defaultRecursiveIncludesReduce !== ""; configuration.recursiveIncludes.priority = this.updateConfigurationString(configuration.recursiveIncludes.priority, settings.defaultRecursiveIncludesPriority); configuration.recursiveIncludesPriorityIsExplicit = configuration.recursiveIncludesPriorityIsExplicit || settings.defaultRecursiveIncludesPriority !== ""; configuration.recursiveIncludes.order = this.updateConfigurationString(configuration.recursiveIncludes.order, settings.defaultRecursiveIncludesOrder); @@ -1560,7 +1557,6 @@ export class CppProperties { || (this.configurationJson.configurations[i].cStandardIsExplicit !== undefined) || (this.configurationJson.configurations[i].cppStandardIsExplicit !== undefined) || (this.configurationJson.configurations[i].intelliSenseModeIsExplicit !== undefined) - || (this.configurationJson.configurations[i].recursiveIncludesReduceIsExplicit !== undefined) || (this.configurationJson.configurations[i].recursiveIncludesPriorityIsExplicit !== undefined) || (this.configurationJson.configurations[i].recursiveIncludesOrderIsExplicit !== undefined)) { dirty = true; @@ -1583,7 +1579,6 @@ export class CppProperties { e.cStandardIsExplicit = e.cStandard !== undefined; e.cppStandardIsExplicit = e.cppStandard !== undefined; e.intelliSenseModeIsExplicit = e.intelliSenseMode !== undefined; - e.recursiveIncludesReduceIsExplicit = e.recursiveIncludes?.reduce !== undefined; e.recursiveIncludesPriorityIsExplicit = e.recursiveIncludes?.priority !== undefined; e.recursiveIncludesOrderIsExplicit = e.recursiveIncludes?.order !== undefined; }); @@ -2408,7 +2403,6 @@ export class CppProperties { const savedCStandardIsExplicit: boolean[] = []; const savedCppStandardIsExplicit: boolean[] = []; const savedIntelliSenseModeIsExplicit: boolean[] = []; - const savedRecursiveIncludesReduceIsExplicit: boolean[] = []; const savedRecursiveIncludesPriorityIsExplicit: boolean[] = []; const savedRecursiveIncludesOrderIsExplicit: boolean[] = []; @@ -2430,10 +2424,6 @@ export class CppProperties { if (e.intelliSenseModeIsExplicit !== undefined) { delete e.intelliSenseModeIsExplicit; } - savedRecursiveIncludesReduceIsExplicit.push(!!e.recursiveIncludesReduceIsExplicit); - if (e.recursiveIncludesReduceIsExplicit !== undefined) { - delete e.recursiveIncludesReduceIsExplicit; - } savedRecursiveIncludesPriorityIsExplicit.push(!!e.recursiveIncludesPriorityIsExplicit); if (e.recursiveIncludesPriorityIsExplicit !== undefined) { delete e.recursiveIncludesPriorityIsExplicit; @@ -2456,7 +2446,6 @@ export class CppProperties { this.configurationJson.configurations[i].cStandardIsExplicit = savedCStandardIsExplicit[i]; this.configurationJson.configurations[i].cppStandardIsExplicit = savedCppStandardIsExplicit[i]; this.configurationJson.configurations[i].intelliSenseModeIsExplicit = savedIntelliSenseModeIsExplicit[i]; - this.configurationJson.configurations[i].recursiveIncludesReduceIsExplicit = savedRecursiveIncludesReduceIsExplicit[i]; this.configurationJson.configurations[i].recursiveIncludesPriorityIsExplicit = savedRecursiveIncludesPriorityIsExplicit[i]; this.configurationJson.configurations[i].recursiveIncludesOrderIsExplicit = savedRecursiveIncludesOrderIsExplicit[i]; } diff --git a/Extension/src/LanguageServer/settings.ts b/Extension/src/LanguageServer/settings.ts index a80d54347..e3e02e6e5 100644 --- a/Extension/src/LanguageServer/settings.ts +++ b/Extension/src/LanguageServer/settings.ts @@ -454,7 +454,6 @@ export class CppSettings extends Settings { public get defaultBrowsePath(): string[] | undefined { return this.getArrayOfStringsWithUndefinedDefault("default.browse.path"); } public get defaultDatabaseFilename(): string | undefined { return changeBlankStringToUndefined(this.getAsStringOrUndefined("default.browse.databaseFilename")); } public get defaultLimitSymbolsToIncludedHeaders(): boolean { return this.getAsBoolean("default.browse.limitSymbolsToIncludedHeaders"); } - public get defaultRecursiveIncludesReduce(): string | undefined { return this.getAsStringOrUndefined("default.recursiveIncludes.reduce"); } public get defaultRecursiveIncludesPriority(): string | undefined { return this.getAsStringOrUndefined("default.recursiveIncludes.priority"); } public get defaultRecursiveIncludesOrder(): string | undefined { return this.getAsStringOrUndefined("default.recursiveIncludes.order"); } public get defaultSystemIncludePath(): string[] | undefined { return this.getArrayOfStringsWithUndefinedDefault("default.systemIncludePath"); } diff --git a/Extension/src/LanguageServer/settingsPanel.ts b/Extension/src/LanguageServer/settingsPanel.ts index 00105925b..efaafc987 100644 --- a/Extension/src/LanguageServer/settingsPanel.ts +++ b/Extension/src/LanguageServer/settingsPanel.ts @@ -52,7 +52,6 @@ const elementId: { [key: string]: string } = { mergeConfigurations: "mergeConfigurations", configurationProvider: "configurationProvider", forcedInclude: "forcedInclude", - recursiveIncludesReduce: "recursiveIncludes.reduce", recursiveIncludesPriority: "recursiveIncludes.priority", recursiveIncludesOrder: "recursiveIncludes.order", @@ -355,12 +354,6 @@ export class SettingsPanel { case elementId.forcedInclude: this.configValues.forcedInclude = splitEntries(message.value); break; - case elementId.recursiveIncludesReduce: - if (!this.configValues.recursiveIncludes) { - this.configValues.recursiveIncludes = {}; - } - this.configValues.recursiveIncludes.reduce = message.value; - break; case elementId.recursiveIncludesPriority: if (!this.configValues.recursiveIncludes) { this.configValues.recursiveIncludes = {}; diff --git a/Extension/src/main.ts b/Extension/src/main.ts index fed7e019f..45c1ef903 100644 --- a/Extension/src/main.ts +++ b/Extension/src/main.ts @@ -191,6 +191,7 @@ async function makeBinariesExecutable(): Promise { const commonBinaries: string[] = [ "./bin/cpptools", "./bin/cpptools-srv", + "./bin/cpptools-srv2", "./bin/cpptools-wordexp", "./LLVM/bin/clang-format", "./LLVM/bin/clang-tidy", diff --git a/Extension/src/nativeStrings.json b/Extension/src/nativeStrings.json index 085ac95b9..38b19517f 100644 --- a/Extension/src/nativeStrings.json +++ b/Extension/src/nativeStrings.json @@ -643,5 +643,49 @@ "intellisense_same_canonical_path": { "text": "Unable to process IntelliSense for a file with the same canonicalized path as an existing file. URI: {0}, canonicalized path: {1}", "hint": "{Locked=\"IntelliSense\"} {Locked=\"URI\"} {Locked=\"{0}\"} {Locked=\"{1}\"}" - } -} + }, + "status_initializing": "Initializing", + "status_initializing_with_n_of_m": "Initializing ({0} of {1})", + "status_initializing_with_n_of_m_and_text": "Initializing ({0} of {1}): {2}", + "status_initializing_with_text": "Initializing {0}", + "status_initializing_projects": "Initializing projects", + "status_initializing_projects_with_n_of_m": "Initializing projects ({0} of {1})", + "status_initializing_projects_with_n_of_m_and_text": "Initializing projects ({0} of {1}): {2}", + "status_initializing_projects_with_text": "Initializing projects {0}", + "status_checking_for_outdated_files": "Checking for out of date files", + "status_checking_for_outdated_files_with_n_of_m": "Checking for out of date files ({0} of {1})", + "status_checking_for_outdated_files_with_n_of_m_and_text": "Checking for out of date files ({0} of {1}): {2}", + "status_checking_for_outdated_files_with_text": "Checking for out of date files {0}", + "status_parsing_files": "Parsing files", + "status_parsing_files_with_n_of_m": "Parsing files ({0} of {1})", + "status_parsing_files_with_n_of_m_and_text": "Parsing files ({0} of {1}): {2}", + "status_parsing_files_with_text": "Parsing files {0}", + "status_parsing_includes": "Parsing included files", + "status_parsing_includes_with_n_of_m": "Parsing included files ({0} of {1})", + "status_parsing_includes_with_n_of_m_and_text": "Parsing included files ({0} of {1}): {2}", + "status_parsing_includes_with_text": "Parsing included files {0}", + "status_scanning_includes": "Scanning #includes for more files", + "status_scanning_includes_with_n_of_m": "Scanning #includes for more files ({0} of {1})", + "status_scanning_includes_with_n_of_m_and_text": "Scanning #includes for more files ({0} of {1}): {2}", + "status_scanning_includes_with_text": "Scanning #includes for more files {0} {1}", + "status_updating_external_dependencies": "Ready (Updating external dependencies)", + "status_updating_external_dependencies_with_n_of_m": "Ready (Updating external dependencies) ({0} of {1})", + "status_updating_external_dependencies_with_n_of_m_and_text": "Ready (Updating external dependencies) ({0} of {1}): {2}", + "status_updating_external_dependencies_with_text": "Ready (Updating external dependencies) {0}", + "status_optimizing_database": "Ready (Optimizing database)", + "status_optimizing_database_with_n_of_m": "Ready (Optimizing database) ({0} of {1})", + "status_optimizing_database_with_n_of_m_and_text": "Ready (Optimizing database) ({0} of {1}): {2}", + "status_optimizing_database_with_text": "Ready (Optimizing database) {0}", + "status_creating_indexes": "Creating Indexes", + "status_creating_indexes_with_n_of_m": "Creating Indexes ({0} of {1})", + "status_creating_indexes_with_n_of_m_and_text": "Creating Indexes ({0} of {1}): {2}", + "status_creating_indexes_with_text": "Creating Indexes {0}", + "status_evaluating_file": "Evaluating", + "status_evaluating_file_with_n_of_m": "Evaluating ({0} of {1})", + "status_evaluating_file_with_n_of_m_and_text": "Evaluating ({0} of {1}): {2}", + "status_evaluating_file_with_text": "Evaluating {0}", + "status_indexing_files": "Indexing files", + "status_indexing_files_with_n_of_m": "Indexing files ({0} of {1})", + "status_indexing_files_with_n_of_m_and_text": "Indexing files ({0} of {1}): {2}", + "status_indexing_files_with_text": "Indexing files {0}" +} \ No newline at end of file diff --git a/Extension/ui/settings.ts b/Extension/ui/settings.ts index 4223ddf7e..c7ea9a780 100644 --- a/Extension/ui/settings.ts +++ b/Extension/ui/settings.ts @@ -42,7 +42,6 @@ const elementId: { [key: string]: string } = { mergeConfigurations: "mergeConfigurations", dotConfig: "dotConfig", dotConfigInvalid: "dotConfigInvalid", - recursiveIncludesReduce: "recursiveIncludes.reduce", recursiveIncludesPriority: "recursiveIncludes.priority", recursiveIncludesOrder: "recursiveIncludes.order", @@ -304,7 +303,6 @@ class SettingsApp { (document.getElementById(elementId.forcedInclude)).value = joinEntries(config.forcedInclude); (document.getElementById(elementId.dotConfig)).value = config.dotConfig ?? ""; if (config.recursiveIncludes) { - (document.getElementById(elementId.recursiveIncludesReduce)).value = config.recursiveIncludes.reduce ?? "${default}"; (document.getElementById(elementId.recursiveIncludesPriority)).value = config.recursiveIncludes.priority ?? "${default}"; (document.getElementById(elementId.recursiveIncludesOrder)).value = config.recursiveIncludes.order ?? "${default}"; }