From 290f48d35cf65be68fe1f3199967c460a993ca9d Mon Sep 17 00:00:00 2001 From: Sean McManus Date: Mon, 2 Feb 2026 13:44:34 -0800 Subject: [PATCH 01/18] Update eslint from 8 to 9. --- Extension/.eslintignore | 4 - Extension/.eslintrc.js | 155 ----- Extension/.scripts/clean.ts | 3 +- Extension/.scripts/common.ts | 1 + Extension/.scripts/copyWalkthruMedia.ts | 3 +- Extension/.scripts/generateOptionsSchema.ts | 2 - Extension/eslint.config.js | 144 +++++ Extension/package.json | 9 +- .../src/Debugger/configurationProvider.ts | 3 - Extension/src/LanguageServer/client.ts | 129 ++-- .../LanguageServer/cppBuildTaskProvider.ts | 30 +- Extension/src/SSH/sshCommandToConfig.ts | 1 - Extension/src/Utility/Eventing/dispatcher.ts | 1 - Extension/src/Utility/Eventing/emitter.ts | 1 - Extension/src/Utility/Eventing/eventParser.ts | 1 - Extension/src/Utility/Process/process.ts | 1 - Extension/src/Utility/Process/streams.ts | 2 - Extension/src/Utility/Sandbox/sandbox.ts | 1 - Extension/src/Utility/System/array.ts | 1 - Extension/src/Utility/System/guards.ts | 1 - Extension/src/Utility/System/info.ts | 3 +- Extension/src/Utility/Text/scanner.ts | 2 - Extension/src/common.ts | 2 - .../Debugger/tests/integration.test.ts | 6 +- .../SingleRootProject/tests/common.test.ts | 1 - Extension/test/unit/asyncIterators.test.ts | 1 - Extension/ui/settings.ts | 1 - Extension/yarn.lock | 589 +++++++++--------- 28 files changed, 528 insertions(+), 570 deletions(-) delete mode 100644 Extension/.eslintignore delete mode 100644 Extension/.eslintrc.js create mode 100644 Extension/eslint.config.js diff --git a/Extension/.eslintignore b/Extension/.eslintignore deleted file mode 100644 index 37c9042eb..000000000 --- a/Extension/.eslintignore +++ /dev/null @@ -1,4 +0,0 @@ -*.js - -dist/ -vscode*.d.ts diff --git a/Extension/.eslintrc.js b/Extension/.eslintrc.js deleted file mode 100644 index 4cd07eb8b..000000000 --- a/Extension/.eslintrc.js +++ /dev/null @@ -1,155 +0,0 @@ -module.exports = { - "extends": [ - "eslint:recommended", - "plugin:@typescript-eslint/eslint-recommended", - "plugin:@typescript-eslint/strict", - ], - "env": { - "browser": true, - "es6": true, - "node": true - }, - "parser": "@typescript-eslint/parser", - "parserOptions": { - "project": ["tsconfig.json", ".scripts/tsconfig.json"], - "ecmaVersion": 2022, - "sourceType": "module", - "warnOnUnsupportedTypeScriptVersion": false, - }, - "plugins": [ - "@typescript-eslint", - "eslint-plugin-jsdoc", - "@typescript-eslint/eslint-plugin", - "eslint-plugin-import", - "eslint-plugin-header" - ], - "rules": { - "@typescript-eslint/adjacent-overload-signatures": "error", - "@typescript-eslint/array-type": "error", - "@typescript-eslint/await-thenable": "error", - "camelcase": "off", - "@typescript-eslint/naming-convention": [ - "error", - { - "selector": "typeLike", - "format": ["PascalCase"] - } - ], - "@typescript-eslint/member-delimiter-style": [ - "error", - { - "multiline": { - "delimiter": "semi", - "requireLast": true - }, - "singleline": { - "delimiter": "semi", - "requireLast": false - } - } - ], - "@typescript-eslint/no-explicit-any": "off", - "@typescript-eslint/no-extraneous-class": "off", - "no-case-declarations": "off", - "no-useless-escape": "off", - "no-floating-decimal": "error", - "keyword-spacing": ["error", { "before": true, "overrides": { "this": { "before": false } } }], - "arrow-spacing": ["error", { "before": true, "after": true }], - "semi-spacing": ["error", { "before": false, "after": true }], - "no-extra-parens": ["error", "all", { "nestedBinaryExpressions": false, "ternaryOperandBinaryExpressions": false }], - "@typescript-eslint/no-array-constructor": "error", - "@typescript-eslint/no-useless-constructor": "error", - "@typescript-eslint/no-for-in-array": "error", - "@typescript-eslint/no-misused-new": "error", - "@typescript-eslint/no-misused-promises": "error", - "@typescript-eslint/no-namespace": "error", - "@typescript-eslint/no-non-null-assertion": "error", - "@typescript-eslint/no-extra-non-null-assertion": "error", - "@typescript-eslint/no-this-alias": "error", - "@typescript-eslint/no-unnecessary-qualifier": "error", - "@typescript-eslint/no-unnecessary-type-arguments": "error", - "@typescript-eslint/no-var-requires": "error", - "@typescript-eslint/prefer-function-type": "error", - "@typescript-eslint/prefer-namespace-keyword": "error", - "@typescript-eslint/semi": "error", - "@typescript-eslint/triple-slash-reference": "error", - "@typescript-eslint/type-annotation-spacing": "error", - "@typescript-eslint/unified-signatures": "error", - "@typescript-eslint/no-floating-promises": "error", - "@typescript-eslint/method-signature-style": ["error", "method"], - "@typescript-eslint/space-infix-ops": "error", - "no-unused-vars": "off", - "@typescript-eslint/no-unused-vars": ["error", { "argsIgnorePattern": "^_" }], - "@typescript-eslint/no-unnecessary-boolean-literal-compare": "error", - "arrow-body-style": "error", - "comma-dangle": "error", - "comma-spacing": "off", - "@typescript-eslint/comma-spacing": "error", - "constructor-super": "error", - "curly": "error", - "eol-last": "error", - "eqeqeq": [ - "error", - "always" - ], - "import/no-default-export": "error", - "import/no-unassigned-import": "error", - "jsdoc/no-types": "error", - "new-parens": "error", - "no-bitwise": "error", - "no-caller": "error", - "no-cond-assign": "error", - "no-debugger": "error", - "no-duplicate-case": "error", - "no-duplicate-imports": "error", - "no-eval": "error", - "no-fallthrough": "error", - "no-invalid-this": "error", - "no-irregular-whitespace": "error", - "rest-spread-spacing": ["error", "never"], - "no-multiple-empty-lines": ["error", { "max": 1, "maxEOF": 1, "maxBOF": 0 }], - "no-new-wrappers": "error", - "no-return-await": "error", - "no-sequences": "error", - "no-sparse-arrays": "error", - "no-trailing-spaces": "error", - "no-multi-spaces": "error", - "no-undef-init": "error", - "no-unsafe-finally": "error", - "no-unused-expressions": "error", - "no-unused-labels": "error", - "space-before-blocks": "error", - "no-var": "error", - "one-var": [ - "error", - "never" - ], - "prefer-const": "error", - "prefer-object-spread": "error", - "space-in-parens": [ - "error", - "never" - ], - "spaced-comment": [ - "off", - "always", - { "line": { "exceptions": ["/"] } } // triple slash directives - ], - "use-isnan": "error", - "valid-typeof": "error", - "yoda": "error", - "space-infix-ops": "error", - "header/header": [ - "warn", - "block", - [ - " --------------------------------------------------------------------------------------------", - " * Copyright (c) Microsoft Corporation. All Rights Reserved.", - " * See 'LICENSE' in the project root for license information.", - " * ------------------------------------------------------------------------------------------ " - - ], - ], - - } -}; diff --git a/Extension/.scripts/clean.ts b/Extension/.scripts/clean.ts index 9d3ac258e..23a22810a 100644 --- a/Extension/.scripts/clean.ts +++ b/Extension/.scripts/clean.ts @@ -28,8 +28,7 @@ export async function reset() { async function details(files: string[]) { let all = await Promise.all(files.filter(each => each).map(async (each) => { - // eslint-disable-next-line @typescript-eslint/no-unused-vars - const [filename, stats ] = await filepath.stats(each); + const [filename, stats] = await filepath.stats(each); return { filename: stats.isDirectory() ? cyan(`${each}${sep}**`) : brightGreen(`${each}`), date: stats.mtime.toLocaleDateString().replace(/\b(\d)\//g, '0$1\/'), diff --git a/Extension/.scripts/common.ts b/Extension/.scripts/common.ts index 91adc0e30..7c22dd2ea 100644 --- a/Extension/.scripts/common.ts +++ b/Extension/.scripts/common.ts @@ -54,6 +54,7 @@ export async function getModifiedIgnoredFiles() { } // return the full path of files that would be removed. + // eslint-disable-next-line @typescript-eslint/no-misused-promises return Promise.all(stdio.filter("Would remove").map((s) => filepath.exists(s.replace(/^Would remove /, ''), $root)).filter(p => p)); } diff --git a/Extension/.scripts/copyWalkthruMedia.ts b/Extension/.scripts/copyWalkthruMedia.ts index e2b18823d..c42556015 100644 --- a/Extension/.scripts/copyWalkthruMedia.ts +++ b/Extension/.scripts/copyWalkthruMedia.ts @@ -18,8 +18,7 @@ export async function watch() { if (source) { verbose(`Watching ${source} folder for changes.`); console.log('Press Ctrl+C to exit.'); - // eslint-disable-next-line @typescript-eslint/no-unused-vars - for await (const event of watchFiles(source, {recursive: true })) { + for await (const event of watchFiles(source, { recursive: true })) { await main(); } } diff --git a/Extension/.scripts/generateOptionsSchema.ts b/Extension/.scripts/generateOptionsSchema.ts index b6c9a2029..346b21007 100644 --- a/Extension/.scripts/generateOptionsSchema.ts +++ b/Extension/.scripts/generateOptionsSchema.ts @@ -3,8 +3,6 @@ * See 'LICENSE' in the project root for license information. * ------------------------------------------------------------------------------------------ */ -/* eslint-disable no-prototype-builtins */ - import { resolve } from 'path'; import { $root, read, write } from './common'; diff --git a/Extension/eslint.config.js b/Extension/eslint.config.js new file mode 100644 index 000000000..1c3a17361 --- /dev/null +++ b/Extension/eslint.config.js @@ -0,0 +1,144 @@ +const js = require("@eslint/js"); +const tseslint = require("@typescript-eslint/eslint-plugin"); +const tsparser = require("@typescript-eslint/parser"); +const jsdoc = require("eslint-plugin-jsdoc"); +const eslintImport = require("eslint-plugin-import"); + +module.exports = [ + { + ignores: ["dist/", "vscode*.d.ts", "**/*.js"], + }, + { + files: ["**/*.ts", "**/*.tsx"], + languageOptions: { + parser: tsparser, + parserOptions: { + projectService: true, + tsconfigRootDir: __dirname, + }, + globals: { + window: "readonly", + document: "readonly", + console: "readonly", + process: "readonly", + module: "readonly", + require: "readonly", + global: "readonly", + __dirname: "readonly", + exports: "readonly", + }, + }, + plugins: { + "@typescript-eslint": tseslint, + jsdoc, + import: eslintImport, + }, + rules: { + // TypeScript-specific rules + "@typescript-eslint/adjacent-overload-signatures": "error", + "@typescript-eslint/array-type": "error", + "@typescript-eslint/await-thenable": "error", + "@typescript-eslint/naming-convention": [ + "error", + { + selector: "typeLike", + format: ["PascalCase"] + } + ], + "@typescript-eslint/no-explicit-any": "off", + "@typescript-eslint/no-extraneous-class": "off", + "@typescript-eslint/no-array-constructor": "error", + "@typescript-eslint/no-useless-constructor": "error", + "@typescript-eslint/no-for-in-array": "error", + "@typescript-eslint/no-misused-new": "error", + "@typescript-eslint/no-misused-promises": "error", + "@typescript-eslint/no-namespace": "error", + "@typescript-eslint/no-non-null-assertion": "error", + "@typescript-eslint/no-extra-non-null-assertion": "error", + "@typescript-eslint/no-this-alias": "error", + "@typescript-eslint/no-unnecessary-type-arguments": "error", + "@typescript-eslint/no-var-requires": "error", + "@typescript-eslint/prefer-function-type": "error", + "@typescript-eslint/prefer-namespace-keyword": "error", + "@typescript-eslint/triple-slash-reference": "error", + "@typescript-eslint/unified-signatures": "error", + "@typescript-eslint/no-floating-promises": "error", + "@typescript-eslint/method-signature-style": ["error", "method"], + "@typescript-eslint/no-unused-vars": ["off"], + "@typescript-eslint/no-unnecessary-boolean-literal-compare": "off", + + // Core ESLint rules + "camelcase": "off", + "no-case-declarations": "off", + "no-useless-escape": "off", + "no-floating-decimal": "error", + "keyword-spacing": ["error", { before: true, overrides: { this: { before: false } } }], + "arrow-spacing": ["error", { before: true, after: true }], + "semi-spacing": ["error", { before: false, after: true }], + "no-extra-parens": ["error", "all", { nestedBinaryExpressions: false, ternaryOperandBinaryExpressions: false }], + "arrow-body-style": "error", + "comma-dangle": "error", + "comma-spacing": "error", + "constructor-super": "error", + "curly": "error", + "eol-last": "error", + "eqeqeq": ["error", "always"], + "new-parens": "error", + "no-bitwise": "error", + "no-caller": "error", + "no-cond-assign": "error", + "no-debugger": "error", + "no-duplicate-case": "error", + "no-duplicate-imports": "error", + "no-eval": "error", + "no-fallthrough": "error", + "no-invalid-this": "error", + "no-irregular-whitespace": "error", + "rest-spread-spacing": ["error", "never"], + "no-multiple-empty-lines": ["error", { max: 1, maxEOF: 1, maxBOF: 0 }], + "no-new-wrappers": "error", + "no-return-await": "error", + "no-sequences": "error", + "no-sparse-arrays": "error", + "no-trailing-spaces": "error", + "no-multi-spaces": "error", + "no-undef-init": "error", + "no-unsafe-finally": "error", + "no-unused-expressions": "error", + "no-unused-labels": "error", + "no-unused-vars": "off", + "space-before-blocks": "error", + "no-var": "error", + "one-var": ["error", "never"], + "prefer-const": "error", + "prefer-object-spread": "error", + "space-in-parens": ["error", "never"], + "spaced-comment": ["off", "always", { line: { exceptions: ["/"] } }], + "use-isnan": "error", + "valid-typeof": "error", + "yoda": "error", + "space-infix-ops": "error", + + // Import rules + "import/no-default-export": "error", + "import/no-unassigned-import": "error", + + // JSDoc rules + "jsdoc/no-types": "error", + + // Header rules - TODO: eslint-plugin-header may not be compatible with ESLint 9 flat config + // The old config had: + // "header/header": ["warn", "block", [ + // " --------------------------------------------------------------------------------------------", + // " * Copyright (c) Microsoft Corporation. All Rights Reserved.", + // " * See 'LICENSE' in the project root for license information.", + // " * ------------------------------------------------------------------------------------------ " + // ]], + }, + }, + { + // Apply JS recommended rules only to JS files + ...js.configs.recommended, + files: ["**/*.{js,mjs,cjs}"] + }, +]; diff --git a/Extension/package.json b/Extension/package.json index 6e8db74be..ffc9739db 100644 --- a/Extension/package.json +++ b/Extension/package.json @@ -63,6 +63,7 @@ "onFileSystem:cpptools-schema" ], "main": "./dist/src/main", + "type": "commonjs", "contributes": { "languages": [ { @@ -6718,7 +6719,7 @@ "code": "yarn install && (yarn verify compiled --quiet || yarn build) && yarn verify binaries && ts-node -T .scripts/code.ts", "verify": "ts-node -T .scripts/verify.ts", "prep": "yarn prep:dts && yarn copy-walkthrough-media && yarn generate-native-strings && yarn translations-generate", - "lint": "yarn install && eslint -c .eslintrc.js --report-unused-disable-directives src test ui .scripts", + "lint": "yarn install && eslint --report-unused-disable-directives src test ui .scripts", "compile": "yarn install && (yarn verify prep --quiet || yarn prep) && yarn build", "watch": "yarn install && (yarn verify prep --quiet || yarn prep) && tsc --build tsconfig.json --watch", "rebuild": "yarn install && yarn clean && yarn prep && yarn build", @@ -6748,15 +6749,15 @@ "@types/tmp": "^0.2.6", "@types/which": "^2.0.2", "@types/yauzl": "^2.10.3", - "@typescript-eslint/eslint-plugin": "^6.1.0", - "@typescript-eslint/parser": "^6.1.0", + "@typescript-eslint/eslint-plugin": "^8.54.0", + "@typescript-eslint/parser": "^8.54.0", "@vscode/debugadapter": "^1.65.0", "@vscode/debugprotocol": "^1.65.0", "@vscode/dts": "^0.4.0", "@vscode/test-electron": "^2.3.10", "async-child-process": "^1.1.1", "await-notify": "^1.0.1", - "eslint": "^8.45.0", + "eslint": "^9.39.2", "eslint-plugin-header": "^3.1.1", "eslint-plugin-import": "^2.29.1", "eslint-plugin-jsdoc": "^48.2.8", diff --git a/Extension/src/Debugger/configurationProvider.ts b/Extension/src/Debugger/configurationProvider.ts index 559011251..51459e520 100644 --- a/Extension/src/Debugger/configurationProvider.ts +++ b/Extension/src/Debugger/configurationProvider.ts @@ -245,7 +245,6 @@ export class DebugConfigurationProvider implements vscode.DebugConfigurationProv } // Handle legacy 'externalConsole' bool and convert to console: "externalTerminal" - // eslint-disable-next-line no-prototype-builtins if (config.hasOwnProperty("externalConsole")) { void logger.getOutputChannelLogger().showWarningMessage(localize("debugger.deprecated.config", "The key '{0}' is deprecated. Please use '{1}' instead.", "externalConsole", "console")); if (config.externalConsole && !config.console) { @@ -710,7 +709,6 @@ export class DebugConfigurationProvider implements vscode.DebugConfigurationProv const newSourceFileMapSource: string = util.resolveVariables(sourceFileMapSource, undefined); if (sourceFileMapSource !== newSourceFileMapSource) { message = "\t" + localize("replacing.sourcepath", "Replacing {0} '{1}' with '{2}'.", "sourcePath", sourceFileMapSource, newSourceFileMapSource); - // eslint-disable-next-line @typescript-eslint/no-dynamic-delete delete config.sourceFileMap[sourceFileMapSource]; source = newSourceFileMapSource; } @@ -790,7 +788,6 @@ export class DebugConfigurationProvider implements vscode.DebugConfigurationProv } private findDefaultConfig(configs: CppDebugConfiguration[]): CppDebugConfiguration[] { - // eslint-disable-next-line no-prototype-builtins return configs.filter((config: CppDebugConfiguration) => config.hasOwnProperty("isDefault") && config.isDefault); } diff --git a/Extension/src/LanguageServer/client.ts b/Extension/src/LanguageServer/client.ts index decbfaca6..234e6183f 100644 --- a/Extension/src/LanguageServer/client.ts +++ b/Extension/src/LanguageServer/client.ts @@ -1779,10 +1779,12 @@ export class DefaultClient implements Client { return { wasShutdown: initializeResult.shouldShutdown }; } - public async sendDidChangeSettings(): Promise { + public sendDidChangeSettings(): void { // Send settings json to native side - await this.ready; - await this.languageClient.sendNotification(DidChangeSettingsNotification, this.getAllSettings()); + void (async () => { + await this.ready; + await this.languageClient.sendNotification(DidChangeSettingsNotification, this.getAllSettings()); + })(); } public async onDidChangeSettings(_event: vscode.ConfigurationChangeEvent): Promise> { @@ -2074,7 +2076,7 @@ export class DefaultClient implements Client { if (!hasCompleted) { hasCompleted = true; if (currentProvider.version >= Version.v2) { - await this.resumeParsing(); + this.resumeParsing(); } } } @@ -2097,7 +2099,7 @@ export class DefaultClient implements Client { if (!hasCompleted) { hasCompleted = true; if (currentProvider.version >= Version.v2) { - await this.resumeParsing(); + this.resumeParsing(); } } } @@ -2109,7 +2111,7 @@ export class DefaultClient implements Client { this.sendCustomBrowseConfiguration(null, undefined, Version.v0, true); if (currentProvider.version >= Version.v2) { console.warn(`Configuration Provider timed out in ${configProviderTimeout}ms.`); - void this.resumeParsing().catch(logAndReturn.undefined); + this.resumeParsing(); } } }, configProviderTimeout); @@ -3112,16 +3114,18 @@ export class DefaultClient implements Client { */ public activate(): void { this.model.activate(); - void this.resumeParsing().catch(logAndReturn.undefined); + this.resumeParsing(); } - public async selectionChanged(selection: Range): Promise { - return this.languageClient.sendNotification(DidChangeTextEditorSelectionNotification, selection); + public selectionChanged(selection: Range): void { + void this.languageClient.sendNotification(DidChangeTextEditorSelectionNotification, selection); } - public async resetDatabase(): Promise { - await this.ready; - return this.languageClient.sendNotification(ResetDatabaseNotification); + public resetDatabase(): void { + void (async () => { + await this.ready; + await this.languageClient.sendNotification(ResetDatabaseNotification); + })(); } /** @@ -3131,31 +3135,41 @@ export class DefaultClient implements Client { this.model.deactivate(); } - public async pauseParsing(): Promise { - await this.ready; - return this.languageClient.sendNotification(PauseParsingNotification); + public pauseParsing(): void { + void (async () => { + await this.ready; + await this.languageClient.sendNotification(PauseParsingNotification); + })(); } - public async resumeParsing(): Promise { - await this.ready; - return this.languageClient.sendNotification(ResumeParsingNotification); + public resumeParsing(): void { + void (async () => { + await this.ready; + await this.languageClient.sendNotification(ResumeParsingNotification); + })(); } - public async PauseCodeAnalysis(): Promise { - await this.ready; - this.model.isCodeAnalysisPaused.Value = true; - return this.languageClient.sendNotification(PauseCodeAnalysisNotification); + public PauseCodeAnalysis(): void { + void (async () => { + await this.ready; + this.model.isCodeAnalysisPaused.Value = true; + await this.languageClient.sendNotification(PauseCodeAnalysisNotification); + })(); } - public async ResumeCodeAnalysis(): Promise { - await this.ready; - this.model.isCodeAnalysisPaused.Value = false; - return this.languageClient.sendNotification(ResumeCodeAnalysisNotification); + public ResumeCodeAnalysis(): void { + void (async () => { + await this.ready; + this.model.isCodeAnalysisPaused.Value = false; + await this.languageClient.sendNotification(ResumeCodeAnalysisNotification); + })(); } - public async CancelCodeAnalysis(): Promise { - await this.ready; - return this.languageClient.sendNotification(CancelCodeAnalysisNotification); + public CancelCodeAnalysis(): void { + void (async () => { + await this.ready; + await this.languageClient.sendNotification(CancelCodeAnalysisNotification); + })(); } private updateCodeAnalysisProcessed(processed: number): void { @@ -3418,7 +3432,6 @@ export class DefaultClient implements Client { this.browseConfigurationLogging = ""; // This while (true) is here just so we can break out early if the config is set on error - // eslint-disable-next-line no-constant-condition while (true) { // config is marked as 'any' because it is untrusted data coming from a 3rd-party. We need to sanitize it before sending it to the language server. if (timeoutOccured || !config || config instanceof Array) { @@ -3563,24 +3576,32 @@ export class DefaultClient implements Client { } } - public async handleConfigurationEditCommand(viewColumn: vscode.ViewColumn = vscode.ViewColumn.Active): Promise { - await this.ready; - return this.configuration.handleConfigurationEditCommand(undefined, vscode.window.showTextDocument, viewColumn); + public handleConfigurationEditCommand(viewColumn: vscode.ViewColumn = vscode.ViewColumn.Active): void { + void (async () => { + await this.ready; + await this.configuration.handleConfigurationEditCommand(undefined, vscode.window.showTextDocument, viewColumn); + })(); } - public async handleConfigurationEditJSONCommand(viewColumn: vscode.ViewColumn = vscode.ViewColumn.Active): Promise { - await this.ready; - return this.configuration.handleConfigurationEditJSONCommand(undefined, vscode.window.showTextDocument, viewColumn); + public handleConfigurationEditJSONCommand(viewColumn: vscode.ViewColumn = vscode.ViewColumn.Active): void { + void (async () => { + await this.ready; + await this.configuration.handleConfigurationEditJSONCommand(undefined, vscode.window.showTextDocument, viewColumn); + })(); } - public async handleConfigurationEditUICommand(viewColumn: vscode.ViewColumn = vscode.ViewColumn.Active): Promise { - await this.ready; - return this.configuration.handleConfigurationEditUICommand(undefined, vscode.window.showTextDocument, viewColumn); + public handleConfigurationEditUICommand(viewColumn: vscode.ViewColumn = vscode.ViewColumn.Active): void { + void (async () => { + await this.ready; + await this.configuration.handleConfigurationEditUICommand(undefined, vscode.window.showTextDocument, viewColumn); + })(); } - public async handleAddToIncludePathCommand(path: string): Promise { - await this.ready; - return this.configuration.addToIncludePathCommand(path); + public handleAddToIncludePathCommand(path: string): void { + void (async () => { + await this.ready; + this.configuration.addToIncludePathCommand(path); + })(); } public async handleGoToDirectiveInGroup(next: boolean): Promise { @@ -4237,19 +4258,20 @@ export class DefaultClient implements Client { return languageClient ? languageClient.stop() : Promise.resolve(); } - public async handleReferencesIcon(): Promise { - await this.ready; - - workspaceReferences.UpdateProgressUICounter(this.model.referencesCommandMode.Value); + public handleReferencesIcon(): void { + void (async () => { + await this.ready; - // If the search is find all references, preview partial results. - // This will cause the language server to send partial results to display - // in the "Other References" view or channel. Doing a preview should not complete - // an in-progress request until it is finished or canceled. - if (this.ReferencesCommandMode === refs.ReferencesCommandMode.Find) { - void this.languageClient.sendNotification(PreviewReferencesNotification); - } + workspaceReferences.UpdateProgressUICounter(this.model.referencesCommandMode.Value); + // If the search is find all references, preview partial results. + // This will cause the language server to send partial results to display + // in the "Other References" view or channel. Doing a preview should not complete + // an in-progress request until it is finished or canceled. + if (this.ReferencesCommandMode === refs.ReferencesCommandMode.Find) { + void this.languageClient.sendNotification(PreviewReferencesNotification); + } + })(); } private serverCanceledReferences(): void { @@ -4315,7 +4337,6 @@ function getLanguageServerFileName(): string { return path.resolve(util.getExtensionFilePath("bin"), extensionProcessName); } -/* eslint-disable @typescript-eslint/no-unused-vars */ class NullClient implements Client { private booleanEvent = new vscode.EventEmitter(); private numberEvent = new vscode.EventEmitter(); diff --git a/Extension/src/LanguageServer/cppBuildTaskProvider.ts b/Extension/src/LanguageServer/cppBuildTaskProvider.ts index efb282335..80b633c9d 100644 --- a/Extension/src/LanguageServer/cppBuildTaskProvider.ts +++ b/Extension/src/LanguageServer/cppBuildTaskProvider.ts @@ -370,21 +370,23 @@ class CustomBuildTaskTerminal implements Pseudoterminal { constructor(private command: string | util.IQuotedString, private args: (string | util.IQuotedString)[], private options: cp.ExecOptions | undefined, private buildOptions: BuildOptions) { } - async open(_initialDimensions: TerminalDimensions | undefined): Promise { - if (this.buildOptions.taskUsesActiveFile && !util.isCppOrCFile(window.activeTextEditor?.document.uri)) { - this.writeEmitter.fire(localize("cannot.build.non.cpp", 'Cannot build and debug because the active file is not a C or C++ source file.') + this.endOfLine); - this.closeEmitter.fire(-1); - return; - } + open(_initialDimensions: TerminalDimensions | undefined): void { + void (async () => { + if (this.buildOptions.taskUsesActiveFile && !util.isCppOrCFile(window.activeTextEditor?.document.uri)) { + this.writeEmitter.fire(localize("cannot.build.non.cpp", 'Cannot build and debug because the active file is not a C or C++ source file.') + this.endOfLine); + this.closeEmitter.fire(-1); + return; + } - // TODO: Remove when compiler query work goes in and we can determine the standard version from TypeScript - if (this.buildOptions.taskUsesActiveFile && window.activeTextEditor?.document.languageId === 'cpp' && this.buildOptions.insertStd) { - this.args.unshift('-std=gnu++14'); - } - telemetry.logLanguageServerEvent("cppBuildTaskStarted"); - // At this point we can start using the terminal. - this.writeEmitter.fire(localize("starting.build", "Starting build...") + this.endOfLine); - await this.doBuild(); + // TODO: Remove when compiler query work goes in and we can determine the standard version from TypeScript + if (this.buildOptions.taskUsesActiveFile && window.activeTextEditor?.document.languageId === 'cpp' && this.buildOptions.insertStd) { + this.args.unshift('-std=gnu++14'); + } + telemetry.logLanguageServerEvent("cppBuildTaskStarted"); + // At this point we can start using the terminal. + this.writeEmitter.fire(localize("starting.build", "Starting build...") + this.endOfLine); + await this.doBuild(); + })(); } close(): void { diff --git a/Extension/src/SSH/sshCommandToConfig.ts b/Extension/src/SSH/sshCommandToConfig.ts index 80b9a0562..e60463bd6 100644 --- a/Extension/src/SSH/sshCommandToConfig.ts +++ b/Extension/src/SSH/sshCommandToConfig.ts @@ -175,7 +175,6 @@ function parseFlags(input: string[], entries: { [key: string]: string }): number // prefix with `:` to tell the library not to log anything itself const parser: BasicParser = new BasicParser(`:${getOptDirective}`, input, 0); - // eslint-disable-next-line no-constant-condition while (true) { const next: IParsedOption | undefined = parser.getopt(); if (!next) { diff --git a/Extension/src/Utility/Eventing/dispatcher.ts b/Extension/src/Utility/Eventing/dispatcher.ts index b233d49fb..b81bfc7b0 100644 --- a/Extension/src/Utility/Eventing/dispatcher.ts +++ b/Extension/src/Utility/Eventing/dispatcher.ts @@ -3,7 +3,6 @@ * See 'LICENSE' in the project root for license information. * ------------------------------------------------------------------------------------------ */ -/* eslint-disable @typescript-eslint/no-unused-vars */ /* eslint-disable @typescript-eslint/unified-signatures */ import { readFile } from 'node:fs/promises'; diff --git a/Extension/src/Utility/Eventing/emitter.ts b/Extension/src/Utility/Eventing/emitter.ts index 36324c94a..736281f0e 100644 --- a/Extension/src/Utility/Eventing/emitter.ts +++ b/Extension/src/Utility/Eventing/emitter.ts @@ -3,7 +3,6 @@ * See 'LICENSE' in the project root for license information. * ------------------------------------------------------------------------------------------ */ -/* eslint-disable @typescript-eslint/no-unused-vars */ /* eslint-disable @typescript-eslint/unified-signatures */ import { is } from '../System/guards'; import { smash } from '../Text/identifiers'; diff --git a/Extension/src/Utility/Eventing/eventParser.ts b/Extension/src/Utility/Eventing/eventParser.ts index fb9cc6e48..4ebf5d649 100644 --- a/Extension/src/Utility/Eventing/eventParser.ts +++ b/Extension/src/Utility/Eventing/eventParser.ts @@ -116,7 +116,6 @@ export function parse(triggerExpression: string, sourceToBindTo: ArbitraryObject if (token.kind !== Kind.Slash) { throw new Error(`unexpected token ${JSON.stringify(token)}`); } - // eslint-disable-next-line no-constant-condition } while (true); // for each discriminator[filter] diff --git a/Extension/src/Utility/Process/process.ts b/Extension/src/Utility/Process/process.ts index 248311b12..eb09026e6 100644 --- a/Extension/src/Utility/Process/process.ts +++ b/Extension/src/Utility/Process/process.ts @@ -5,7 +5,6 @@ /* eslint-disable @typescript-eslint/naming-convention */ /* eslint-disable @typescript-eslint/unified-signatures */ -/* eslint-disable @typescript-eslint/no-unsafe-declaration-merging */ import { ChildProcess, spawn } from 'child_process'; import { basename, resolve } from 'path'; diff --git a/Extension/src/Utility/Process/streams.ts b/Extension/src/Utility/Process/streams.ts index 2ce90013f..a266e1505 100644 --- a/Extension/src/Utility/Process/streams.ts +++ b/Extension/src/Utility/Process/streams.ts @@ -13,8 +13,6 @@ import { finalize } from '../System/finalize'; import { is } from '../System/guards'; import { verbose } from '../Text/streams'; -/* eslint-disable no-constant-condition */ - /** An iterator/iterable wrapper to process a stream of lines. */ export class LineIterator implements AsyncIterable, AsyncIterator { #current = 0; diff --git a/Extension/src/Utility/Sandbox/sandbox.ts b/Extension/src/Utility/Sandbox/sandbox.ts index 6e8d16ca6..6c588b20d 100644 --- a/Extension/src/Utility/Sandbox/sandbox.ts +++ b/Extension/src/Utility/Sandbox/sandbox.ts @@ -23,7 +23,6 @@ export function createSandbox(): (code: string, context?: any) => T { sandbox ); for (const key of Object.keys(context)) { - // eslint-disable-next-line @typescript-eslint/no-dynamic-delete delete sandbox[key]; } } else { diff --git a/Extension/src/Utility/System/array.ts b/Extension/src/Utility/System/array.ts index 3b312b5c3..09267dd7f 100644 --- a/Extension/src/Utility/System/array.ts +++ b/Extension/src/Utility/System/array.ts @@ -4,7 +4,6 @@ * ------------------------------------------------------------------------------------------ */ /* eslint-disable @typescript-eslint/unified-signatures */ -/* eslint-disable @typescript-eslint/no-unused-vars */ import { fail } from 'assert'; import { is } from '../System/guards'; diff --git a/Extension/src/Utility/System/guards.ts b/Extension/src/Utility/System/guards.ts index 4dbec77d8..06e9130ad 100644 --- a/Extension/src/Utility/System/guards.ts +++ b/Extension/src/Utility/System/guards.ts @@ -61,7 +61,6 @@ export class is { return instance instanceof Socket; } - // eslint-disable-next-line @typescript-eslint/ban-types static function(instance: any): instance is Function { return typeof instance === 'function'; } diff --git a/Extension/src/Utility/System/info.ts b/Extension/src/Utility/System/info.ts index 3f3690dc2..1205953a8 100644 --- a/Extension/src/Utility/System/info.ts +++ b/Extension/src/Utility/System/info.ts @@ -75,7 +75,6 @@ interface FunctionInfo { /** a bound callable function for the member (saves us from having to do it later anyway) */ - // eslint-disable-next-line @typescript-eslint/ban-types fn: Function; } @@ -140,7 +139,7 @@ export function members(obj: any): Members { result.fields.set(memberName, type); } } - // eslint-disable-next-line no-cond-assign + // eslint-disable-next-line no-cond-assign } while (instance = Object.getPrototypeOf(instance)); } return result; diff --git a/Extension/src/Utility/Text/scanner.ts b/Extension/src/Utility/Text/scanner.ts index aaa683d0c..6f90bfd82 100644 --- a/Extension/src/Utility/Text/scanner.ts +++ b/Extension/src/Utility/Text/scanner.ts @@ -117,11 +117,9 @@ export enum Kind { Comma, QuestionDot, LessThan, - // eslint-disable-next-line @typescript-eslint/prefer-literal-enum-member OpenAngle = LessThan, LessThanSlash, GreaterThan, - // eslint-disable-next-line @typescript-eslint/prefer-literal-enum-member CloseAngle = GreaterThan, LessThanEquals, GreaterThanEquals, diff --git a/Extension/src/common.ts b/Extension/src/common.ts index e32f23043..9b0e27cd8 100644 --- a/Extension/src/common.ts +++ b/Extension/src/common.ts @@ -1474,9 +1474,7 @@ export function isVsCodeInsiders(): boolean { export function stripEscapeSequences(str: string): string { return str - // eslint-disable-next-line no-control-regex .replace(/\x1b\[\??[0-9]{0,3}(;[0-9]{1,3})?[a-zA-Z]/g, '') - // eslint-disable-next-line no-control-regex .replace(/\u0008/g, '') .replace(/\r/g, ''); } diff --git a/Extension/test/scenarios/Debugger/tests/integration.test.ts b/Extension/test/scenarios/Debugger/tests/integration.test.ts index 5ce790cbd..fbf99b72d 100644 --- a/Extension/test/scenarios/Debugger/tests/integration.test.ts +++ b/Extension/test/scenarios/Debugger/tests/integration.test.ts @@ -2,16 +2,16 @@ * Copyright (c) Microsoft Corporation. All Rights Reserved. * See 'LICENSE' in the project root for license information. * ------------------------------------------------------------------------------------------ */ -/* eslint-disable @typescript-eslint/no-unused-vars */ + /* eslint-disable @typescript-eslint/triple-slash-reference */ /// import * as assert from 'assert'; import { suite } from 'mocha'; import * as vscode from 'vscode'; -suite(`Debug Integration Test: `, function(): void { +suite(`Debug Integration Test: `, function (): void { - suiteSetup(async function(): Promise { + suiteSetup(async function (): Promise { const extension: vscode.Extension = vscode.extensions.getExtension("ms-vscode.cpptools") || assert.fail("Extension not found"); if (!extension.isActive) { await extension.activate(); diff --git a/Extension/test/scenarios/SingleRootProject/tests/common.test.ts b/Extension/test/scenarios/SingleRootProject/tests/common.test.ts index 28182b863..e04c88ea2 100644 --- a/Extension/test/scenarios/SingleRootProject/tests/common.test.ts +++ b/Extension/test/scenarios/SingleRootProject/tests/common.test.ts @@ -62,7 +62,6 @@ suite("resolveVariables", () => { process.env[processKey] = "bar"; actual = resolveVariables(input, {}); } finally { - // eslint-disable-next-line @typescript-eslint/no-dynamic-delete delete process.env[processKey]; } assert.equal(actual, "foobar"); diff --git a/Extension/test/unit/asyncIterators.test.ts b/Extension/test/unit/asyncIterators.test.ts index 80e8cfdca..afbfa017f 100644 --- a/Extension/test/unit/asyncIterators.test.ts +++ b/Extension/test/unit/asyncIterators.test.ts @@ -3,7 +3,6 @@ * See 'LICENSE' in the project root for license information. * ------------------------------------------------------------------------------------------ */ -/* eslint-disable @typescript-eslint/no-unused-vars */ import { describe, it } from 'mocha'; import { fail, ok, strictEqual } from 'node:assert'; import { accumulator } from '../../src/Utility/Async/iterators'; diff --git a/Extension/ui/settings.ts b/Extension/ui/settings.ts index 4223ddf7e..d299e0df4 100644 --- a/Extension/ui/settings.ts +++ b/Extension/ui/settings.ts @@ -413,5 +413,4 @@ class SettingsApp { } } -// eslint-disable-next-line @typescript-eslint/no-unused-vars const app: SettingsApp = new SettingsApp(); diff --git a/Extension/yarn.lock b/Extension/yarn.lock index e6d8bbacf..480afcd10 100644 --- a/Extension/yarn.lock +++ b/Extension/yarn.lock @@ -23,37 +23,73 @@ esquery "^1.6.0" jsdoc-type-pratt-parser "~4.0.0" -"@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0": - version "4.4.1" - resolved "https://pkgs.dev.azure.com/azure-public/VisualCpp/_packaging/cpp_PublicPackages/npm/registry/@eslint-community/eslint-utils/-/eslint-utils-4.4.1.tgz#d1145bf2c20132d6400495d6df4bf59362fd9d56" - integrity sha1-0RRb8sIBMtZABJXW30v1k2L9nVY= +"@eslint-community/eslint-utils@^4.8.0", "@eslint-community/eslint-utils@^4.9.1": + version "4.9.1" + resolved "https://pkgs.dev.azure.com/azure-public/VisualCpp/_packaging/cpp_PublicPackages/npm/registry/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz#4e90af67bc51ddee6cdef5284edf572ec376b595" + integrity sha1-TpCvZ7xR3e5s3vUoTt9XLsN2tZU= dependencies: eslint-visitor-keys "^3.4.3" -"@eslint-community/regexpp@^4.5.1", "@eslint-community/regexpp@^4.6.1": - version "4.12.1" - resolved "https://pkgs.dev.azure.com/azure-public/VisualCpp/_packaging/cpp_PublicPackages/npm/registry/@eslint-community/regexpp/-/regexpp-4.12.1.tgz#cfc6cffe39df390a3841cde2abccf92eaa7ae0e0" - integrity sha1-z8bP/jnfOQo4Qc3iq8z5Lqp64OA= +"@eslint-community/regexpp@^4.12.1", "@eslint-community/regexpp@^4.12.2": + version "4.12.2" + resolved "https://pkgs.dev.azure.com/azure-public/VisualCpp/_packaging/cpp_PublicPackages/npm/registry/@eslint-community/regexpp/-/regexpp-4.12.2.tgz#bccdf615bcf7b6e8db830ec0b8d21c9a25de597b" + integrity sha1-vM32Fbz3tujbgw7AuNIcmiXeWXs= + +"@eslint/config-array@^0.21.1": + version "0.21.1" + resolved "https://pkgs.dev.azure.com/azure-public/VisualCpp/_packaging/cpp_PublicPackages/npm/registry/@eslint/config-array/-/config-array-0.21.1.tgz#7d1b0060fea407f8301e932492ba8c18aff29713" + integrity sha1-fRsAYP6kB/gwHpMkkrqMGK/ylxM= + dependencies: + "@eslint/object-schema" "^2.1.7" + debug "^4.3.1" + minimatch "^3.1.2" + +"@eslint/config-helpers@^0.4.2": + version "0.4.2" + resolved "https://pkgs.dev.azure.com/azure-public/VisualCpp/_packaging/cpp_PublicPackages/npm/registry/@eslint/config-helpers/-/config-helpers-0.4.2.tgz#1bd006ceeb7e2e55b2b773ab318d300e1a66aeda" + integrity sha1-G9AGzut+LlWyt3OrMY0wDhpmrto= + dependencies: + "@eslint/core" "^0.17.0" + +"@eslint/core@^0.17.0": + version "0.17.0" + resolved "https://pkgs.dev.azure.com/azure-public/VisualCpp/_packaging/cpp_PublicPackages/npm/registry/@eslint/core/-/core-0.17.0.tgz#77225820413d9617509da9342190a2019e78761c" + integrity sha1-dyJYIEE9lhdQnak0IZCiAZ54dhw= + dependencies: + "@types/json-schema" "^7.0.15" -"@eslint/eslintrc@^2.1.4": - version "2.1.4" - resolved "https://pkgs.dev.azure.com/azure-public/VisualCpp/_packaging/cpp_PublicPackages/npm/registry/@eslint/eslintrc/-/eslintrc-2.1.4.tgz#388a269f0f25c1b6adc317b5a2c55714894c70ad" - integrity sha1-OIomnw8lwbatwxe1osVXFIlMcK0= +"@eslint/eslintrc@^3.3.1": + version "3.3.3" + resolved "https://pkgs.dev.azure.com/azure-public/VisualCpp/_packaging/cpp_PublicPackages/npm/registry/@eslint/eslintrc/-/eslintrc-3.3.3.tgz#26393a0806501b5e2b6a43aa588a4d8df67880ac" + integrity sha1-Jjk6CAZQG14rakOqWIpNjfZ4gKw= dependencies: ajv "^6.12.4" debug "^4.3.2" - espree "^9.6.0" - globals "^13.19.0" + espree "^10.0.1" + globals "^14.0.0" ignore "^5.2.0" import-fresh "^3.2.1" - js-yaml "^4.1.0" + js-yaml "^4.1.1" minimatch "^3.1.2" strip-json-comments "^3.1.1" -"@eslint/js@8.57.1": - version "8.57.1" - resolved "https://pkgs.dev.azure.com/azure-public/VisualCpp/_packaging/cpp_PublicPackages/npm/registry/@eslint/js/-/js-8.57.1.tgz#de633db3ec2ef6a3c89e2f19038063e8a122e2c2" - integrity sha1-3mM9s+wu9qPIni8ZA4Bj6KEi4sI= +"@eslint/js@9.39.2": + version "9.39.2" + resolved "https://pkgs.dev.azure.com/azure-public/VisualCpp/_packaging/cpp_PublicPackages/npm/registry/@eslint/js/-/js-9.39.2.tgz#2d4b8ec4c3ea13c1b3748e0c97ecd766bdd80599" + integrity sha1-LUuOxMPqE8GzdI4Ml+zXZr3YBZk= + +"@eslint/object-schema@^2.1.7": + version "2.1.7" + resolved "https://pkgs.dev.azure.com/azure-public/VisualCpp/_packaging/cpp_PublicPackages/npm/registry/@eslint/object-schema/-/object-schema-2.1.7.tgz#6e2126a1347e86a4dedf8706ec67ff8e107ebbad" + integrity sha1-biEmoTR+hqTe34cG7Gf/jhB+u60= + +"@eslint/plugin-kit@^0.4.1": + version "0.4.1" + resolved "https://pkgs.dev.azure.com/azure-public/VisualCpp/_packaging/cpp_PublicPackages/npm/registry/@eslint/plugin-kit/-/plugin-kit-0.4.1.tgz#9779e3fd9b7ee33571a57435cf4335a1794a6cb2" + integrity sha1-l3nj/Zt+4zVxpXQ1z0M1oXlKbLI= + dependencies: + "@eslint/core" "^0.17.0" + levn "^0.4.1" "@github/copilot-language-server@^1.316.0": version "1.316.0" @@ -93,24 +129,28 @@ dependencies: is-negated-glob "^1.0.0" -"@humanwhocodes/config-array@^0.13.0": - version "0.13.0" - resolved "https://pkgs.dev.azure.com/azure-public/VisualCpp/_packaging/cpp_PublicPackages/npm/registry/@humanwhocodes/config-array/-/config-array-0.13.0.tgz#fb907624df3256d04b9aa2df50d7aa97ec648748" - integrity sha1-+5B2JN8yVtBLmqLfUNeql+xkh0g= +"@humanfs/core@^0.19.1": + version "0.19.1" + resolved "https://pkgs.dev.azure.com/azure-public/VisualCpp/_packaging/cpp_PublicPackages/npm/registry/@humanfs/core/-/core-0.19.1.tgz#17c55ca7d426733fe3c561906b8173c336b40a77" + integrity sha1-F8Vcp9Qmcz/jxWGQa4Fzwza0Cnc= + +"@humanfs/node@^0.16.6": + version "0.16.7" + resolved "https://pkgs.dev.azure.com/azure-public/VisualCpp/_packaging/cpp_PublicPackages/npm/registry/@humanfs/node/-/node-0.16.7.tgz#822cb7b3a12c5a240a24f621b5a2413e27a45f26" + integrity sha1-giy3s6EsWiQKJPYhtaJBPiekXyY= dependencies: - "@humanwhocodes/object-schema" "^2.0.3" - debug "^4.3.1" - minimatch "^3.0.5" + "@humanfs/core" "^0.19.1" + "@humanwhocodes/retry" "^0.4.0" "@humanwhocodes/module-importer@^1.0.1": version "1.0.1" resolved "https://pkgs.dev.azure.com/azure-public/VisualCpp/_packaging/cpp_PublicPackages/npm/registry/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" integrity sha1-r1smkaIrRL6EewyoFkHF+2rQFyw= -"@humanwhocodes/object-schema@^2.0.3": - version "2.0.3" - resolved "https://pkgs.dev.azure.com/azure-public/VisualCpp/_packaging/cpp_PublicPackages/npm/registry/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz#4a2868d75d6d6963e423bcf90b7fd1be343409d3" - integrity sha1-Siho111taWPkI7z5C3/RvjQ0CdM= +"@humanwhocodes/retry@^0.4.0", "@humanwhocodes/retry@^0.4.2": + version "0.4.3" + resolved "https://pkgs.dev.azure.com/azure-public/VisualCpp/_packaging/cpp_PublicPackages/npm/registry/@humanwhocodes/retry/-/retry-0.4.3.tgz#c2b9d2e374ee62c586d3adbea87199b1d7a7a6ba" + integrity sha1-wrnS43TuYsWG062+qHGZsdenpro= "@jridgewell/gen-mapping@^0.3.5": version "0.3.8" @@ -253,27 +293,6 @@ resolved "https://pkgs.dev.azure.com/azure-public/VisualCpp/_packaging/cpp_PublicPackages/npm/registry/@nevware21/ts-utils/-/ts-utils-0.11.7.tgz#d7e67f8bafd4d81e9bec9599800a15fd08467055" integrity sha1-1+Z/i6/U2B6b7JWZgAoV/QhGcFU= -"@nodelib/fs.scandir@2.1.5": - version "2.1.5" - resolved "https://pkgs.dev.azure.com/azure-public/VisualCpp/_packaging/cpp_PublicPackages/npm/registry/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" - integrity sha1-dhnC6yGyVIP20WdUi0z9WnSIw9U= - dependencies: - "@nodelib/fs.stat" "2.0.5" - run-parallel "^1.1.9" - -"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": - version "2.0.5" - resolved "https://pkgs.dev.azure.com/azure-public/VisualCpp/_packaging/cpp_PublicPackages/npm/registry/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" - integrity sha1-W9Jir5Tp0lvR5xsF3u1Eh2oiLos= - -"@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8": - version "1.2.8" - resolved "https://pkgs.dev.azure.com/azure-public/VisualCpp/_packaging/cpp_PublicPackages/npm/registry/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" - integrity sha1-6Vc36LtnRt3t9pxVaVNJTxlv5po= - dependencies: - "@nodelib/fs.scandir" "2.1.5" - fastq "^1.6.0" - "@octokit/auth-token@^5.0.0": version "5.1.2" resolved "https://pkgs.dev.azure.com/azure-public/VisualCpp/_packaging/cpp_PublicPackages/npm/registry/@octokit/auth-token/-/auth-token-5.1.2.tgz#68a486714d7a7fd1df56cb9bc89a860a0de866de" @@ -449,7 +468,7 @@ "@types/minimatch" "*" "@types/node" "*" -"@types/json-schema@*", "@types/json-schema@^7.0.12", "@types/json-schema@^7.0.9": +"@types/json-schema@*", "@types/json-schema@^7.0.15", "@types/json-schema@^7.0.9": version "7.0.15" resolved "https://pkgs.dev.azure.com/azure-public/VisualCpp/_packaging/cpp_PublicPackages/npm/registry/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" integrity sha1-WWoXRyM2lNUPatinhp/Lb1bPWEE= @@ -509,7 +528,7 @@ resolved "https://pkgs.dev.azure.com/azure-public/VisualCpp/_packaging/cpp_PublicPackages/npm/registry/@types/proxyquire/-/proxyquire-1.3.31.tgz#a008b78dad6061754e3adf2cb64b60303f68deaa" integrity sha1-oAi3ja1gYXVOOt8stktgMD9o3qo= -"@types/semver@^7.5.0", "@types/semver@^7.5.8": +"@types/semver@^7.5.8": version "7.5.8" resolved "https://pkgs.dev.azure.com/azure-public/VisualCpp/_packaging/cpp_PublicPackages/npm/registry/@types/semver/-/semver-7.5.8.tgz#8268a8c57a3e4abd25c165ecd36237db7948a55e" integrity sha1-gmioxXo+Sr0lwWXs02I323lIpV4= @@ -548,96 +567,101 @@ dependencies: "@types/node" "*" -"@typescript-eslint/eslint-plugin@^6.1.0": - version "6.21.0" - resolved "https://pkgs.dev.azure.com/azure-public/VisualCpp/_packaging/cpp_PublicPackages/npm/registry/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.21.0.tgz#30830c1ca81fd5f3c2714e524c4303e0194f9cd3" - integrity sha1-MIMMHKgf1fPCcU5STEMD4BlPnNM= - dependencies: - "@eslint-community/regexpp" "^4.5.1" - "@typescript-eslint/scope-manager" "6.21.0" - "@typescript-eslint/type-utils" "6.21.0" - "@typescript-eslint/utils" "6.21.0" - "@typescript-eslint/visitor-keys" "6.21.0" - debug "^4.3.4" - graphemer "^1.4.0" - ignore "^5.2.4" +"@typescript-eslint/eslint-plugin@^8.54.0": + version "8.54.0" + resolved "https://pkgs.dev.azure.com/azure-public/VisualCpp/_packaging/cpp_PublicPackages/npm/registry/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.54.0.tgz#d8899e5c2eccf5c4a20d01c036a193753748454d" + integrity sha1-2ImeXC7M9cSiDQHANqGTdTdIRU0= + dependencies: + "@eslint-community/regexpp" "^4.12.2" + "@typescript-eslint/scope-manager" "8.54.0" + "@typescript-eslint/type-utils" "8.54.0" + "@typescript-eslint/utils" "8.54.0" + "@typescript-eslint/visitor-keys" "8.54.0" + ignore "^7.0.5" natural-compare "^1.4.0" - semver "^7.5.4" - ts-api-utils "^1.0.1" - -"@typescript-eslint/parser@^6.1.0": - version "6.21.0" - resolved "https://pkgs.dev.azure.com/azure-public/VisualCpp/_packaging/cpp_PublicPackages/npm/registry/@typescript-eslint/parser/-/parser-6.21.0.tgz#af8fcf66feee2edc86bc5d1cf45e33b0630bf35b" - integrity sha1-r4/PZv7uLtyGvF0c9F4zsGML81s= - dependencies: - "@typescript-eslint/scope-manager" "6.21.0" - "@typescript-eslint/types" "6.21.0" - "@typescript-eslint/typescript-estree" "6.21.0" - "@typescript-eslint/visitor-keys" "6.21.0" - debug "^4.3.4" + ts-api-utils "^2.4.0" + +"@typescript-eslint/parser@^8.54.0": + version "8.54.0" + resolved "https://pkgs.dev.azure.com/azure-public/VisualCpp/_packaging/cpp_PublicPackages/npm/registry/@typescript-eslint/parser/-/parser-8.54.0.tgz#3d01a6f54ed247deb9982621f70e7abf1810bd97" + integrity sha1-PQGm9U7SR965mCYh9w56vxgQvZc= + dependencies: + "@typescript-eslint/scope-manager" "8.54.0" + "@typescript-eslint/types" "8.54.0" + "@typescript-eslint/typescript-estree" "8.54.0" + "@typescript-eslint/visitor-keys" "8.54.0" + debug "^4.4.3" + +"@typescript-eslint/project-service@8.54.0": + version "8.54.0" + resolved "https://pkgs.dev.azure.com/azure-public/VisualCpp/_packaging/cpp_PublicPackages/npm/registry/@typescript-eslint/project-service/-/project-service-8.54.0.tgz#f582aceb3d752544c8e1b11fea8d95d00cf9adc6" + integrity sha1-9YKs6z11JUTI4bEf6o2V0Az5rcY= + dependencies: + "@typescript-eslint/tsconfig-utils" "^8.54.0" + "@typescript-eslint/types" "^8.54.0" + debug "^4.4.3" + +"@typescript-eslint/scope-manager@8.54.0": + version "8.54.0" + resolved "https://pkgs.dev.azure.com/azure-public/VisualCpp/_packaging/cpp_PublicPackages/npm/registry/@typescript-eslint/scope-manager/-/scope-manager-8.54.0.tgz#307dc8cbd80157e2772c2d36216857415a71ab33" + integrity sha1-MH3Iy9gBV+J3LC02IWhXQVpxqzM= + dependencies: + "@typescript-eslint/types" "8.54.0" + "@typescript-eslint/visitor-keys" "8.54.0" + +"@typescript-eslint/tsconfig-utils@8.54.0", "@typescript-eslint/tsconfig-utils@^8.54.0": + version "8.54.0" + resolved "https://pkgs.dev.azure.com/azure-public/VisualCpp/_packaging/cpp_PublicPackages/npm/registry/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.54.0.tgz#71dd7ba1674bd48b172fc4c85b2f734b0eae3dbc" + integrity sha1-cd17oWdL1IsXL8TIWy9zSw6uPbw= + +"@typescript-eslint/type-utils@8.54.0": + version "8.54.0" + resolved "https://pkgs.dev.azure.com/azure-public/VisualCpp/_packaging/cpp_PublicPackages/npm/registry/@typescript-eslint/type-utils/-/type-utils-8.54.0.tgz#64965317dd4118346c2fa5ee94492892200e9fb9" + integrity sha1-ZJZTF91BGDRsL6XulEkokiAOn7k= + dependencies: + "@typescript-eslint/types" "8.54.0" + "@typescript-eslint/typescript-estree" "8.54.0" + "@typescript-eslint/utils" "8.54.0" + debug "^4.4.3" + ts-api-utils "^2.4.0" + +"@typescript-eslint/types@8.54.0", "@typescript-eslint/types@^8.54.0": + version "8.54.0" + resolved "https://pkgs.dev.azure.com/azure-public/VisualCpp/_packaging/cpp_PublicPackages/npm/registry/@typescript-eslint/types/-/types-8.54.0.tgz#c12d41f67a2e15a8a96fbc5f2d07b17331130889" + integrity sha1-wS1B9nouFaipb7xfLQexczETCIk= + +"@typescript-eslint/typescript-estree@8.54.0": + version "8.54.0" + resolved "https://pkgs.dev.azure.com/azure-public/VisualCpp/_packaging/cpp_PublicPackages/npm/registry/@typescript-eslint/typescript-estree/-/typescript-estree-8.54.0.tgz#3c7716905b2b811fadbd2114804047d1bfc86527" + integrity sha1-PHcWkFsrgR+tvSEUgEBH0b/IZSc= + dependencies: + "@typescript-eslint/project-service" "8.54.0" + "@typescript-eslint/tsconfig-utils" "8.54.0" + "@typescript-eslint/types" "8.54.0" + "@typescript-eslint/visitor-keys" "8.54.0" + debug "^4.4.3" + minimatch "^9.0.5" + semver "^7.7.3" + tinyglobby "^0.2.15" + ts-api-utils "^2.4.0" -"@typescript-eslint/scope-manager@6.21.0": - version "6.21.0" - resolved "https://pkgs.dev.azure.com/azure-public/VisualCpp/_packaging/cpp_PublicPackages/npm/registry/@typescript-eslint/scope-manager/-/scope-manager-6.21.0.tgz#ea8a9bfc8f1504a6ac5d59a6df308d3a0630a2b1" - integrity sha1-6oqb/I8VBKasXVmm3zCNOgYworE= +"@typescript-eslint/utils@8.54.0": + version "8.54.0" + resolved "https://pkgs.dev.azure.com/azure-public/VisualCpp/_packaging/cpp_PublicPackages/npm/registry/@typescript-eslint/utils/-/utils-8.54.0.tgz#c79a4bcbeebb4f571278c0183ed1cb601d84c6c8" + integrity sha1-x5pLy+67T1cSeMAYPtHLYB2Exsg= dependencies: - "@typescript-eslint/types" "6.21.0" - "@typescript-eslint/visitor-keys" "6.21.0" + "@eslint-community/eslint-utils" "^4.9.1" + "@typescript-eslint/scope-manager" "8.54.0" + "@typescript-eslint/types" "8.54.0" + "@typescript-eslint/typescript-estree" "8.54.0" -"@typescript-eslint/type-utils@6.21.0": - version "6.21.0" - resolved "https://pkgs.dev.azure.com/azure-public/VisualCpp/_packaging/cpp_PublicPackages/npm/registry/@typescript-eslint/type-utils/-/type-utils-6.21.0.tgz#6473281cfed4dacabe8004e8521cee0bd9d4c01e" - integrity sha1-ZHMoHP7U2sq+gAToUhzuC9nUwB4= +"@typescript-eslint/visitor-keys@8.54.0": + version "8.54.0" + resolved "https://pkgs.dev.azure.com/azure-public/VisualCpp/_packaging/cpp_PublicPackages/npm/registry/@typescript-eslint/visitor-keys/-/visitor-keys-8.54.0.tgz#0e4b50124b210b8600b245dd66cbad52deb15590" + integrity sha1-DktQEkshC4YAskXdZsutUt6xVZA= dependencies: - "@typescript-eslint/typescript-estree" "6.21.0" - "@typescript-eslint/utils" "6.21.0" - debug "^4.3.4" - ts-api-utils "^1.0.1" - -"@typescript-eslint/types@6.21.0": - version "6.21.0" - resolved "https://pkgs.dev.azure.com/azure-public/VisualCpp/_packaging/cpp_PublicPackages/npm/registry/@typescript-eslint/types/-/types-6.21.0.tgz#205724c5123a8fef7ecd195075fa6e85bac3436d" - integrity sha1-IFckxRI6j+9+zRlQdfpuhbrDQ20= - -"@typescript-eslint/typescript-estree@6.21.0": - version "6.21.0" - resolved "https://pkgs.dev.azure.com/azure-public/VisualCpp/_packaging/cpp_PublicPackages/npm/registry/@typescript-eslint/typescript-estree/-/typescript-estree-6.21.0.tgz#c47ae7901db3b8bddc3ecd73daff2d0895688c46" - integrity sha1-xHrnkB2zuL3cPs1z2v8tCJVojEY= - dependencies: - "@typescript-eslint/types" "6.21.0" - "@typescript-eslint/visitor-keys" "6.21.0" - debug "^4.3.4" - globby "^11.1.0" - is-glob "^4.0.3" - minimatch "9.0.3" - semver "^7.5.4" - ts-api-utils "^1.0.1" - -"@typescript-eslint/utils@6.21.0": - version "6.21.0" - resolved "https://pkgs.dev.azure.com/azure-public/VisualCpp/_packaging/cpp_PublicPackages/npm/registry/@typescript-eslint/utils/-/utils-6.21.0.tgz#4714e7a6b39e773c1c8e97ec587f520840cd8134" - integrity sha1-RxTnprOedzwcjpfsWH9SCEDNgTQ= - dependencies: - "@eslint-community/eslint-utils" "^4.4.0" - "@types/json-schema" "^7.0.12" - "@types/semver" "^7.5.0" - "@typescript-eslint/scope-manager" "6.21.0" - "@typescript-eslint/types" "6.21.0" - "@typescript-eslint/typescript-estree" "6.21.0" - semver "^7.5.4" - -"@typescript-eslint/visitor-keys@6.21.0": - version "6.21.0" - resolved "https://pkgs.dev.azure.com/azure-public/VisualCpp/_packaging/cpp_PublicPackages/npm/registry/@typescript-eslint/visitor-keys/-/visitor-keys-6.21.0.tgz#87a99d077aa507e20e238b11d56cc26ade45fe47" - integrity sha1-h6mdB3qlB+IOI4sR1WzCat5F/kc= - dependencies: - "@typescript-eslint/types" "6.21.0" - eslint-visitor-keys "^3.4.1" - -"@ungap/structured-clone@^1.2.0": - version "1.3.0" - resolved "https://pkgs.dev.azure.com/azure-public/VisualCpp/_packaging/cpp_PublicPackages/npm/registry/@ungap/structured-clone/-/structured-clone-1.3.0.tgz#d06bbb384ebcf6c505fde1c3d0ed4ddffe0aaff8" - integrity sha1-0Gu7OE689sUF/eHD0O1N3/4Kr/g= + "@typescript-eslint/types" "8.54.0" + eslint-visitor-keys "^4.2.1" "@vscode/debugadapter@^1.65.0": version "1.68.0" @@ -848,11 +872,16 @@ acorn@^6.4.1: resolved "https://pkgs.dev.azure.com/azure-public/VisualCpp/_packaging/cpp_PublicPackages/npm/registry/acorn/-/acorn-6.4.2.tgz#35866fd710528e92de10cf06016498e47e39e1e6" integrity sha1-NYZv1xBSjpLeEM8GAWSY5H454eY= -acorn@^8.11.0, acorn@^8.14.0, acorn@^8.4.1, acorn@^8.8.2, acorn@^8.9.0: +acorn@^8.11.0, acorn@^8.14.0, acorn@^8.4.1, acorn@^8.8.2: version "8.14.0" resolved "https://pkgs.dev.azure.com/azure-public/VisualCpp/_packaging/cpp_PublicPackages/npm/registry/acorn/-/acorn-8.14.0.tgz#063e2c70cac5fb4f6467f0b11152e04c682795b0" integrity sha1-Bj4scMrF+09kZ/CxEVLgTGgnlbA= +acorn@^8.15.0: + version "8.15.0" + resolved "https://pkgs.dev.azure.com/azure-public/VisualCpp/_packaging/cpp_PublicPackages/npm/registry/acorn/-/acorn-8.15.0.tgz#a360898bc415edaac46c8241f6383975b930b816" + integrity sha1-o2CJi8QV7arEbIJB9jg5dbkwuBY= + agent-base@^7.1.0, agent-base@^7.1.2: version "7.1.3" resolved "https://pkgs.dev.azure.com/azure-public/VisualCpp/_packaging/cpp_PublicPackages/npm/registry/agent-base/-/agent-base-7.1.3.tgz#29435eb821bc4194633a5b89e5bc4703bafc25a1" @@ -1474,7 +1503,7 @@ create-require@^1.1.0: resolved "https://pkgs.dev.azure.com/azure-public/VisualCpp/_packaging/cpp_PublicPackages/npm/registry/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" integrity sha1-wdfo8eX2z8n/ZfnNNS03NIdWwzM= -cross-spawn@^7.0.2, cross-spawn@^7.0.3: +cross-spawn@^7.0.3, cross-spawn@^7.0.6: version "7.0.6" resolved "https://pkgs.dev.azure.com/azure-public/VisualCpp/_packaging/cpp_PublicPackages/npm/registry/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f" integrity sha1-ilj+ePANzXDDcEUXWd+/rwPo7p8= @@ -1550,6 +1579,13 @@ debug@4, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4, debug@^4.3.5: dependencies: ms "^2.1.3" +debug@^4.4.3: + version "4.4.3" + resolved "https://pkgs.dev.azure.com/azure-public/VisualCpp/_packaging/cpp_PublicPackages/npm/registry/debug/-/debug-4.4.3.tgz#c6ae432d9bd9662582fce08709b038c58e9e3d6a" + integrity sha1-xq5DLZvZZiWC/OCHCbA4xY6ePWo= + dependencies: + ms "^2.1.3" + decamelize@^4.0.0: version "4.0.0" resolved "https://pkgs.dev.azure.com/azure-public/VisualCpp/_packaging/cpp_PublicPackages/npm/registry/decamelize/-/decamelize-4.0.0.tgz#aa472d7bf660eb15f3494efd531cab7f2a709837" @@ -1613,13 +1649,6 @@ diff@^8.0.2: resolved "https://pkgs.dev.azure.com/azure-public/VisualCpp/_packaging/cpp_PublicPackages/npm/registry/diff/-/diff-8.0.3.tgz#c7da3d9e0e8c283bb548681f8d7174653720c2d5" integrity sha1-x9o9ng6MKDu1SGgfjXF0ZTcgwtU= -dir-glob@^3.0.1: - version "3.0.1" - resolved "https://pkgs.dev.azure.com/azure-public/VisualCpp/_packaging/cpp_PublicPackages/npm/registry/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" - integrity sha1-Vtv3PZkqSpO6FYT0U0Bj/S5BcX8= - dependencies: - path-type "^4.0.0" - doctrine@^2.1.0: version "2.1.0" resolved "https://pkgs.dev.azure.com/azure-public/VisualCpp/_packaging/cpp_PublicPackages/npm/registry/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" @@ -1627,13 +1656,6 @@ doctrine@^2.1.0: dependencies: esutils "^2.0.2" -doctrine@^3.0.0: - version "3.0.0" - resolved "https://pkgs.dev.azure.com/azure-public/VisualCpp/_packaging/cpp_PublicPackages/npm/registry/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" - integrity sha1-rd6+rXKmV023g2OdyHoSF3OXOWE= - dependencies: - esutils "^2.0.2" - dunder-proto@^1.0.0, dunder-proto@^1.0.1: version "1.0.1" resolved "https://pkgs.dev.azure.com/azure-public/VisualCpp/_packaging/cpp_PublicPackages/npm/registry/dunder-proto/-/dunder-proto-1.0.1.tgz#d7ae667e1dc83482f8b70fd0f6eefc50da30f58a" @@ -1944,15 +1966,15 @@ eslint-scope@5.1.1: esrecurse "^4.3.0" estraverse "^4.1.1" -eslint-scope@^7.2.2: - version "7.2.2" - resolved "https://pkgs.dev.azure.com/azure-public/VisualCpp/_packaging/cpp_PublicPackages/npm/registry/eslint-scope/-/eslint-scope-7.2.2.tgz#deb4f92563390f32006894af62a22dba1c46423f" - integrity sha1-3rT5JWM5DzIAaJSvYqItuhxGQj8= +eslint-scope@^8.4.0: + version "8.4.0" + resolved "https://pkgs.dev.azure.com/azure-public/VisualCpp/_packaging/cpp_PublicPackages/npm/registry/eslint-scope/-/eslint-scope-8.4.0.tgz#88e646a207fad61436ffa39eb505147200655c82" + integrity sha1-iOZGogf61hQ2/6OetQUUcgBlXII= dependencies: esrecurse "^4.3.0" estraverse "^5.2.0" -eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.3: +eslint-visitor-keys@^3.4.3: version "3.4.3" resolved "https://pkgs.dev.azure.com/azure-public/VisualCpp/_packaging/cpp_PublicPackages/npm/registry/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" integrity sha1-DNcv6FUOPC6uFWqWpN3c0cisWAA= @@ -1962,49 +1984,50 @@ eslint-visitor-keys@^4.2.0: resolved "https://pkgs.dev.azure.com/azure-public/VisualCpp/_packaging/cpp_PublicPackages/npm/registry/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz#687bacb2af884fcdda8a6e7d65c606f46a14cd45" integrity sha1-aHussq+IT83aim59ZcYG9GoUzUU= -eslint@^8.45.0: - version "8.57.1" - resolved "https://pkgs.dev.azure.com/azure-public/VisualCpp/_packaging/cpp_PublicPackages/npm/registry/eslint/-/eslint-8.57.1.tgz#7df109654aba7e3bbe5c8eae533c5e461d3c6ca9" - integrity sha1-ffEJZUq6fju+XI6uUzxeRh08bKk= - dependencies: - "@eslint-community/eslint-utils" "^4.2.0" - "@eslint-community/regexpp" "^4.6.1" - "@eslint/eslintrc" "^2.1.4" - "@eslint/js" "8.57.1" - "@humanwhocodes/config-array" "^0.13.0" +eslint-visitor-keys@^4.2.1: + version "4.2.1" + resolved "https://pkgs.dev.azure.com/azure-public/VisualCpp/_packaging/cpp_PublicPackages/npm/registry/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz#4cfea60fe7dd0ad8e816e1ed026c1d5251b512c1" + integrity sha1-TP6mD+fdCtjoFuHtAmwdUlG1EsE= + +eslint@^9.39.2: + version "9.39.2" + resolved "https://pkgs.dev.azure.com/azure-public/VisualCpp/_packaging/cpp_PublicPackages/npm/registry/eslint/-/eslint-9.39.2.tgz#cb60e6d16ab234c0f8369a3fe7cc87967faf4b6c" + integrity sha1-y2Dm0WqyNMD4Npo/58yHln+vS2w= + dependencies: + "@eslint-community/eslint-utils" "^4.8.0" + "@eslint-community/regexpp" "^4.12.1" + "@eslint/config-array" "^0.21.1" + "@eslint/config-helpers" "^0.4.2" + "@eslint/core" "^0.17.0" + "@eslint/eslintrc" "^3.3.1" + "@eslint/js" "9.39.2" + "@eslint/plugin-kit" "^0.4.1" + "@humanfs/node" "^0.16.6" "@humanwhocodes/module-importer" "^1.0.1" - "@nodelib/fs.walk" "^1.2.8" - "@ungap/structured-clone" "^1.2.0" + "@humanwhocodes/retry" "^0.4.2" + "@types/estree" "^1.0.6" ajv "^6.12.4" chalk "^4.0.0" - cross-spawn "^7.0.2" + cross-spawn "^7.0.6" debug "^4.3.2" - doctrine "^3.0.0" escape-string-regexp "^4.0.0" - eslint-scope "^7.2.2" - eslint-visitor-keys "^3.4.3" - espree "^9.6.1" - esquery "^1.4.2" + eslint-scope "^8.4.0" + eslint-visitor-keys "^4.2.1" + espree "^10.4.0" + esquery "^1.5.0" esutils "^2.0.2" fast-deep-equal "^3.1.3" - file-entry-cache "^6.0.1" + file-entry-cache "^8.0.0" find-up "^5.0.0" glob-parent "^6.0.2" - globals "^13.19.0" - graphemer "^1.4.0" ignore "^5.2.0" imurmurhash "^0.1.4" is-glob "^4.0.0" - is-path-inside "^3.0.3" - js-yaml "^4.1.0" json-stable-stringify-without-jsonify "^1.0.1" - levn "^0.4.1" lodash.merge "^4.6.2" minimatch "^3.1.2" natural-compare "^1.4.0" optionator "^0.9.3" - strip-ansi "^6.0.1" - text-table "^0.2.0" esniff@^2.0.1: version "2.0.1" @@ -2016,6 +2039,15 @@ esniff@^2.0.1: event-emitter "^0.3.5" type "^2.7.2" +espree@^10.0.1, espree@^10.4.0: + version "10.4.0" + resolved "https://pkgs.dev.azure.com/azure-public/VisualCpp/_packaging/cpp_PublicPackages/npm/registry/espree/-/espree-10.4.0.tgz#d54f4949d4629005a1fa168d937c3ff1f7e2a837" + integrity sha1-1U9JSdRikAWh+haNk3w/8ffiqDc= + dependencies: + acorn "^8.15.0" + acorn-jsx "^5.3.2" + eslint-visitor-keys "^4.2.1" + espree@^10.1.0: version "10.3.0" resolved "https://pkgs.dev.azure.com/azure-public/VisualCpp/_packaging/cpp_PublicPackages/npm/registry/espree/-/espree-10.3.0.tgz#29267cf5b0cb98735b65e64ba07e0ed49d1eed8a" @@ -2025,21 +2057,19 @@ espree@^10.1.0: acorn-jsx "^5.3.2" eslint-visitor-keys "^4.2.0" -espree@^9.6.0, espree@^9.6.1: - version "9.6.1" - resolved "https://pkgs.dev.azure.com/azure-public/VisualCpp/_packaging/cpp_PublicPackages/npm/registry/espree/-/espree-9.6.1.tgz#a2a17b8e434690a5432f2f8018ce71d331a48c6f" - integrity sha1-oqF7jkNGkKVDLy+AGM5x0zGkjG8= - dependencies: - acorn "^8.9.0" - acorn-jsx "^5.3.2" - eslint-visitor-keys "^3.4.1" - esprima@^4.0.1: version "4.0.1" resolved "https://pkgs.dev.azure.com/azure-public/VisualCpp/_packaging/cpp_PublicPackages/npm/registry/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha1-E7BM2z5sXRnfkatph6hpVhmwqnE= -esquery@^1.4.2, esquery@^1.6.0: +esquery@^1.5.0: + version "1.7.0" + resolved "https://pkgs.dev.azure.com/azure-public/VisualCpp/_packaging/cpp_PublicPackages/npm/registry/esquery/-/esquery-1.7.0.tgz#08d048f261f0ddedb5bae95f46809463d9c9496d" + integrity sha1-CNBI8mHw3e21uulfRoCUY9nJSW0= + dependencies: + estraverse "^5.1.0" + +esquery@^1.6.0: version "1.6.0" resolved "https://pkgs.dev.azure.com/azure-public/VisualCpp/_packaging/cpp_PublicPackages/npm/registry/esquery/-/esquery-1.6.0.tgz#91419234f804d852a82dceec3e16cdc22cf9dae7" integrity sha1-kUGSNPgE2FKoLc7sPhbNwiz52uc= @@ -2159,17 +2189,6 @@ fast-fifo@^1.3.2: resolved "https://pkgs.dev.azure.com/azure-public/VisualCpp/_packaging/cpp_PublicPackages/npm/registry/fast-fifo/-/fast-fifo-1.3.2.tgz#286e31de96eb96d38a97899815740ba2a4f3640c" integrity sha1-KG4x3pbrltOKl4mYFXQLoqTzZAw= -fast-glob@^3.2.9: - version "3.3.3" - resolved "https://pkgs.dev.azure.com/azure-public/VisualCpp/_packaging/cpp_PublicPackages/npm/registry/fast-glob/-/fast-glob-3.3.3.tgz#d06d585ce8dba90a16b0505c543c3ccfb3aeb818" - integrity sha1-0G1YXOjbqQoWsFBcVDw8z7OuuBg= - dependencies: - "@nodelib/fs.stat" "^2.0.2" - "@nodelib/fs.walk" "^1.2.3" - glob-parent "^5.1.2" - merge2 "^1.3.0" - micromatch "^4.0.8" - fast-json-stable-stringify@^2.0.0: version "2.1.0" resolved "https://pkgs.dev.azure.com/azure-public/VisualCpp/_packaging/cpp_PublicPackages/npm/registry/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" @@ -2197,19 +2216,24 @@ fastest-levenshtein@^1.0.12, fastest-levenshtein@^1.0.7: resolved "https://pkgs.dev.azure.com/azure-public/VisualCpp/_packaging/cpp_PublicPackages/npm/registry/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz#210e61b6ff181de91ea9b3d1b84fdedd47e034e5" integrity sha1-IQ5htv8YHekeqbPRuE/e3UfgNOU= -fastq@^1.13.0, fastq@^1.6.0: +fastq@^1.13.0: version "1.19.0" resolved "https://pkgs.dev.azure.com/azure-public/VisualCpp/_packaging/cpp_PublicPackages/npm/registry/fastq/-/fastq-1.19.0.tgz#a82c6b7c2bb4e44766d865f07997785fecfdcb89" integrity sha1-qCxrfCu05Edm2GXweZd4X+z9y4k= dependencies: reusify "^1.0.4" -file-entry-cache@^6.0.1: - version "6.0.1" - resolved "https://pkgs.dev.azure.com/azure-public/VisualCpp/_packaging/cpp_PublicPackages/npm/registry/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" - integrity sha1-IRst2WWcsDlLBz5zI6w8kz1SICc= +fdir@^6.5.0: + version "6.5.0" + resolved "https://pkgs.dev.azure.com/azure-public/VisualCpp/_packaging/cpp_PublicPackages/npm/registry/fdir/-/fdir-6.5.0.tgz#ed2ab967a331ade62f18d077dae192684d50d350" + integrity sha1-7Sq5Z6MxreYvGNB32uGSaE1Q01A= + +file-entry-cache@^8.0.0: + version "8.0.0" + resolved "https://pkgs.dev.azure.com/azure-public/VisualCpp/_packaging/cpp_PublicPackages/npm/registry/file-entry-cache/-/file-entry-cache-8.0.0.tgz#7787bddcf1131bffb92636c69457bbc0edd6d81f" + integrity sha1-d4e93PETG/+5JjbGlFe7wO3W2B8= dependencies: - flat-cache "^3.0.4" + flat-cache "^4.0.0" fill-keys@^1.0.2: version "1.0.2" @@ -2268,14 +2292,13 @@ flagged-respawn@^2.0.0: resolved "https://pkgs.dev.azure.com/azure-public/VisualCpp/_packaging/cpp_PublicPackages/npm/registry/flagged-respawn/-/flagged-respawn-2.0.0.tgz#abf39719dcfe1ac06c86c9466081c541c682987b" integrity sha1-q/OXGdz+GsBshslGYIHFQcaCmHs= -flat-cache@^3.0.4: - version "3.2.0" - resolved "https://pkgs.dev.azure.com/azure-public/VisualCpp/_packaging/cpp_PublicPackages/npm/registry/flat-cache/-/flat-cache-3.2.0.tgz#2c0c2d5040c99b1632771a9d105725c0115363ee" - integrity sha1-LAwtUEDJmxYydxqdEFclwBFTY+4= +flat-cache@^4.0.0: + version "4.0.1" + resolved "https://pkgs.dev.azure.com/azure-public/VisualCpp/_packaging/cpp_PublicPackages/npm/registry/flat-cache/-/flat-cache-4.0.1.tgz#0ece39fcb14ee012f4b0410bd33dd9c1f011127c" + integrity sha1-Ds45/LFO4BL0sEEL0z3ZwfAREnw= dependencies: flatted "^3.2.9" - keyv "^4.5.3" - rimraf "^3.0.2" + keyv "^4.5.4" flat@^5.0.2: version "5.0.2" @@ -2482,7 +2505,7 @@ glob-watcher@^6.0.0: async-done "^2.0.0" chokidar "^3.5.3" -glob@^7.1.1, glob@^7.1.3, glob@^7.2.0, glob@^7.2.3: +glob@^7.1.1, glob@^7.2.0, glob@^7.2.3: version "7.2.3" resolved "https://pkgs.dev.azure.com/azure-public/VisualCpp/_packaging/cpp_PublicPackages/npm/registry/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" integrity sha1-uN8PuAK7+o6JvR2Ti04WV47UTys= @@ -2525,12 +2548,10 @@ global-prefix@^1.0.1: is-windows "^1.0.1" which "^1.2.14" -globals@^13.19.0: - version "13.24.0" - resolved "https://pkgs.dev.azure.com/azure-public/VisualCpp/_packaging/cpp_PublicPackages/npm/registry/globals/-/globals-13.24.0.tgz#8432a19d78ce0c1e833949c36adb345400bb1171" - integrity sha1-hDKhnXjODB6DOUnDats0VAC7EXE= - dependencies: - type-fest "^0.20.2" +globals@^14.0.0: + version "14.0.0" + resolved "https://pkgs.dev.azure.com/azure-public/VisualCpp/_packaging/cpp_PublicPackages/npm/registry/globals/-/globals-14.0.0.tgz#898d7413c29babcf6bafe56fcadded858ada724e" + integrity sha1-iY10E8Kbq89rr+Vvyt3thYrack4= globalthis@^1.0.4: version "1.0.4" @@ -2540,18 +2561,6 @@ globalthis@^1.0.4: define-properties "^1.2.1" gopd "^1.0.1" -globby@^11.1.0: - version "11.1.0" - resolved "https://pkgs.dev.azure.com/azure-public/VisualCpp/_packaging/cpp_PublicPackages/npm/registry/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" - integrity sha1-vUvpi7BC+D15b344EZkfvoKg00s= - dependencies: - array-union "^2.1.0" - dir-glob "^3.0.1" - fast-glob "^3.2.9" - ignore "^5.2.0" - merge2 "^1.4.1" - slash "^3.0.0" - glogg@^2.2.0: version "2.2.0" resolved "https://pkgs.dev.azure.com/azure-public/VisualCpp/_packaging/cpp_PublicPackages/npm/registry/glogg/-/glogg-2.2.0.tgz#956ceb855a05a2aa1fa668d748f2be8e7361c11c" @@ -2569,11 +2578,6 @@ graceful-fs@^4.0.0, graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6, resolved "https://pkgs.dev.azure.com/azure-public/VisualCpp/_packaging/cpp_PublicPackages/npm/registry/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" integrity sha1-QYPk6L8Iu24Fu7L30uDI9xLKQOM= -graphemer@^1.4.0: - version "1.4.0" - resolved "https://pkgs.dev.azure.com/azure-public/VisualCpp/_packaging/cpp_PublicPackages/npm/registry/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" - integrity sha1-+y8dVeDjoYSa7/yQxPoN1ToOZsY= - gulp-cli@^3.0.0: version "3.0.0" resolved "https://pkgs.dev.azure.com/azure-public/VisualCpp/_packaging/cpp_PublicPackages/npm/registry/gulp-cli/-/gulp-cli-3.0.0.tgz#577008f5323fad6106b44db24803c27c3a649841" @@ -2744,11 +2748,16 @@ ieee754@^1.2.1: resolved "https://pkgs.dev.azure.com/azure-public/VisualCpp/_packaging/cpp_PublicPackages/npm/registry/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" integrity sha1-jrehCmP/8l0VpXsAFYbRd9Gw01I= -ignore@^5.2.0, ignore@^5.2.4: +ignore@^5.2.0: version "5.3.2" resolved "https://pkgs.dev.azure.com/azure-public/VisualCpp/_packaging/cpp_PublicPackages/npm/registry/ignore/-/ignore-5.3.2.tgz#3cd40e729f3643fd87cb04e50bf0eb722bc596f5" integrity sha1-PNQOcp82Q/2HywTlC/DrcivFlvU= +ignore@^7.0.5: + version "7.0.5" + resolved "https://pkgs.dev.azure.com/azure-public/VisualCpp/_packaging/cpp_PublicPackages/npm/registry/ignore/-/ignore-7.0.5.tgz#4cb5f6cd7d4c7ab0365738c7aea888baa6d7efd9" + integrity sha1-TLX2zX1MerA2VzjHrqiIuqbX79k= + immediate@~3.0.5: version "3.0.6" resolved "https://pkgs.dev.azure.com/azure-public/VisualCpp/_packaging/cpp_PublicPackages/npm/registry/immediate/-/immediate-3.0.6.tgz#9db1dbd0faf8de6fbe0f5dd5e56bb606280de69b" @@ -2965,11 +2974,6 @@ is-object@~1.0.1: resolved "https://pkgs.dev.azure.com/azure-public/VisualCpp/_packaging/cpp_PublicPackages/npm/registry/is-object/-/is-object-1.0.2.tgz#a56552e1c665c9e950b4a025461da87e72f86fcf" integrity sha1-pWVS4cZlyelQtKAlRh2ofnL4b88= -is-path-inside@^3.0.3: - version "3.0.3" - resolved "https://pkgs.dev.azure.com/azure-public/VisualCpp/_packaging/cpp_PublicPackages/npm/registry/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" - integrity sha1-0jE2LlOgf/Kw4Op/7QSRYf/RYoM= - is-plain-obj@^2.1.0: version "2.1.0" resolved "https://pkgs.dev.azure.com/azure-public/VisualCpp/_packaging/cpp_PublicPackages/npm/registry/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" @@ -3131,7 +3135,7 @@ jest-worker@^27.4.5: merge-stream "^2.0.0" supports-color "^8.0.0" -js-yaml@^4.1.0: +js-yaml@^4.1.0, js-yaml@^4.1.1: version "4.1.1" resolved "https://pkgs.dev.azure.com/azure-public/VisualCpp/_packaging/cpp_PublicPackages/npm/registry/js-yaml/-/js-yaml-4.1.1.tgz#854c292467705b699476e1a2decc0c8a3458806b" integrity sha1-hUwpJGdwW2mUduGi3swMijRYgGs= @@ -3199,7 +3203,7 @@ jszip@^3.10.1: readable-stream "~2.3.6" setimmediate "^1.0.5" -keyv@^4.5.3: +keyv@^4.5.4: version "4.5.4" resolved "https://pkgs.dev.azure.com/azure-public/VisualCpp/_packaging/cpp_PublicPackages/npm/registry/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" integrity sha1-qHmpnilFL5QkOfKkBeOvizHU3pM= @@ -3368,12 +3372,7 @@ merge-stream@^2.0.0: resolved "https://pkgs.dev.azure.com/azure-public/VisualCpp/_packaging/cpp_PublicPackages/npm/registry/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" integrity sha1-UoI2KaFN0AyXcPtq1H3GMQ8sH2A= -merge2@^1.3.0, merge2@^1.4.1: - version "1.4.1" - resolved "https://pkgs.dev.azure.com/azure-public/VisualCpp/_packaging/cpp_PublicPackages/npm/registry/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" - integrity sha1-Q2iJL4hekHRVpv19xVwMnUBJkK4= - -micromatch@^4.0.0, micromatch@^4.0.4, micromatch@^4.0.8: +micromatch@^4.0.0, micromatch@^4.0.4: version "4.0.8" resolved "https://pkgs.dev.azure.com/azure-public/VisualCpp/_packaging/cpp_PublicPackages/npm/registry/micromatch/-/micromatch-4.0.8.tgz#d66fa18f3a47076789320b9b1af32bd86d9fa202" integrity sha1-1m+hjzpHB2eJMgubGvMr2G2fogI= @@ -3398,14 +3397,7 @@ mimic-fn@^2.1.0: resolved "https://pkgs.dev.azure.com/azure-public/VisualCpp/_packaging/cpp_PublicPackages/npm/registry/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" integrity sha1-ftLCzMyvhNP/y3pptXcR/CCDQBs= -minimatch@9.0.3: - version "9.0.3" - resolved "https://pkgs.dev.azure.com/azure-public/VisualCpp/_packaging/cpp_PublicPackages/npm/registry/minimatch/-/minimatch-9.0.3.tgz#a6e00c3de44c3a542bfaae70abfc22420a6da825" - integrity sha1-puAMPeRMOlQr+q5wq/wiQgptqCU= - dependencies: - brace-expansion "^2.0.1" - -minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: +minimatch@^3.0.4, minimatch@^3.1.1, minimatch@^3.1.2: version "3.1.2" resolved "https://pkgs.dev.azure.com/azure-public/VisualCpp/_packaging/cpp_PublicPackages/npm/registry/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" integrity sha1-Gc0ZS/0+Qo8EmnCBfAONiatL41s= @@ -3426,6 +3418,13 @@ minimatch@^5.0.1, minimatch@^5.1.0, minimatch@^5.1.6: dependencies: brace-expansion "^2.0.1" +minimatch@^9.0.5: + version "9.0.5" + resolved "https://pkgs.dev.azure.com/azure-public/VisualCpp/_packaging/cpp_PublicPackages/npm/registry/minimatch/-/minimatch-9.0.5.tgz#d74f9dd6b57d83d8e98cfb82133b03978bc929e5" + integrity sha1-10+d1rV9g9jpjPuCEzsDl4vJKeU= + dependencies: + brace-expansion "^2.0.1" + minimist@^1.2.0, minimist@^1.2.6, minimist@^1.2.8: version "1.2.8" resolved "https://pkgs.dev.azure.com/azure-public/VisualCpp/_packaging/cpp_PublicPackages/npm/registry/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" @@ -3818,11 +3817,6 @@ path-root@^0.1.1: dependencies: path-root-regex "^0.1.0" -path-type@^4.0.0: - version "4.0.0" - resolved "https://pkgs.dev.azure.com/azure-public/VisualCpp/_packaging/cpp_PublicPackages/npm/registry/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" - integrity sha1-hO0BwKe6OAr+CdkKjBgNzZ0DBDs= - pause-stream@^0.0.11: version "0.0.11" resolved "https://pkgs.dev.azure.com/azure-public/VisualCpp/_packaging/cpp_PublicPackages/npm/registry/pause-stream/-/pause-stream-0.0.11.tgz#fe5a34b0cbce12b5aa6a2b403ee2e73b602f1445" @@ -3840,6 +3834,11 @@ picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: resolved "https://pkgs.dev.azure.com/azure-public/VisualCpp/_packaging/cpp_PublicPackages/npm/registry/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" integrity sha1-O6ODNzNkbZ0+SZWUbBNlpn+wekI= +picomatch@^4.0.3: + version "4.0.3" + resolved "https://pkgs.dev.azure.com/azure-public/VisualCpp/_packaging/cpp_PublicPackages/npm/registry/picomatch/-/picomatch-4.0.3.tgz#796c76136d1eead715db1e7bad785dedd695a042" + integrity sha1-eWx2E20e6tcV2x57rXhd7daVoEI= + pkg-dir@^4.2.0: version "4.2.0" resolved "https://pkgs.dev.azure.com/azure-public/VisualCpp/_packaging/cpp_PublicPackages/npm/registry/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" @@ -3934,11 +3933,6 @@ punycode@^2.1.0: resolved "https://pkgs.dev.azure.com/azure-public/VisualCpp/_packaging/cpp_PublicPackages/npm/registry/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" integrity sha1-AnQi4vrsCyXhVJw+G9gwm5EztuU= -queue-microtask@^1.2.2: - version "1.2.3" - resolved "https://pkgs.dev.azure.com/azure-public/VisualCpp/_packaging/cpp_PublicPackages/npm/registry/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" - integrity sha1-SSkii7xyTfrEPg77BYyve2z7YkM= - randombytes@^2.1.0: version "2.1.0" resolved "https://pkgs.dev.azure.com/azure-public/VisualCpp/_packaging/cpp_PublicPackages/npm/registry/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" @@ -4126,20 +4120,6 @@ reusify@^1.0.4: resolved "https://pkgs.dev.azure.com/azure-public/VisualCpp/_packaging/cpp_PublicPackages/npm/registry/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" integrity sha1-kNo4Kx4SbvwCFG6QhFqI2xKSXXY= -rimraf@^3.0.2: - version "3.0.2" - resolved "https://pkgs.dev.azure.com/azure-public/VisualCpp/_packaging/cpp_PublicPackages/npm/registry/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" - integrity sha1-8aVAK6YiCtUswSgrrBrjqkn9Bho= - dependencies: - glob "^7.1.3" - -run-parallel@^1.1.9: - version "1.2.0" - resolved "https://pkgs.dev.azure.com/azure-public/VisualCpp/_packaging/cpp_PublicPackages/npm/registry/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" - integrity sha1-ZtE2jae9+SHrnZW9GpIp5/IaQ+4= - dependencies: - queue-microtask "^1.2.2" - safe-array-concat@^1.1.3: version "1.1.3" resolved "https://pkgs.dev.azure.com/azure-public/VisualCpp/_packaging/cpp_PublicPackages/npm/registry/safe-array-concat/-/safe-array-concat-1.1.3.tgz#c9e54ec4f603b0bbb8e7e5007a5ee7aecd1538c3" @@ -4210,7 +4190,7 @@ semver@^6.3.0, semver@^6.3.1: resolved "https://pkgs.dev.azure.com/azure-public/VisualCpp/_packaging/cpp_PublicPackages/npm/registry/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" integrity sha1-VW0u+GiRRuRtzqS/3QlfNDTf/LQ= -semver@^7.3.4, semver@^7.3.7, semver@^7.5.4, semver@^7.6.2, semver@^7.6.3: +semver@^7.3.4, semver@^7.3.7, semver@^7.6.2, semver@^7.6.3: version "7.7.1" resolved "https://pkgs.dev.azure.com/azure-public/VisualCpp/_packaging/cpp_PublicPackages/npm/registry/semver/-/semver-7.7.1.tgz#abd5098d82b18c6c81f6074ff2647fd3e7220c9f" integrity sha1-q9UJjYKxjGyB9gdP8mR/0+ciDJ8= @@ -4348,11 +4328,6 @@ sisteransi@^1.0.5: resolved "https://pkgs.dev.azure.com/azure-public/VisualCpp/_packaging/cpp_PublicPackages/npm/registry/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" integrity sha1-E01oEpd1ZDfMBcoBNw06elcQde0= -slash@^3.0.0: - version "3.0.0" - resolved "https://pkgs.dev.azure.com/azure-public/VisualCpp/_packaging/cpp_PublicPackages/npm/registry/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" - integrity sha1-ZTm+hwwWWtvVJAIg2+Nh8bxNRjQ= - slashes@^3.0.12: version "3.0.12" resolved "https://pkgs.dev.azure.com/azure-public/VisualCpp/_packaging/cpp_PublicPackages/npm/registry/slashes/-/slashes-3.0.12.tgz#3d664c877ad542dc1509eaf2c50f38d483a6435a" @@ -4645,11 +4620,6 @@ text-decoder@^1.1.0: dependencies: b4a "^1.6.4" -text-table@^0.2.0: - version "0.2.0" - resolved "https://pkgs.dev.azure.com/azure-public/VisualCpp/_packaging/cpp_PublicPackages/npm/registry/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" - integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= - through2-filter@^3.0.0: version "3.1.0" resolved "https://pkgs.dev.azure.com/azure-public/VisualCpp/_packaging/cpp_PublicPackages/npm/registry/through2-filter/-/through2-filter-3.1.0.tgz#4a1b45d2b76b3ac93ec137951e372c268efc1a4e" @@ -4698,6 +4668,14 @@ timers-ext@^0.1.7: es5-ext "^0.10.64" next-tick "^1.1.0" +tinyglobby@^0.2.15: + version "0.2.15" + resolved "https://pkgs.dev.azure.com/azure-public/VisualCpp/_packaging/cpp_PublicPackages/npm/registry/tinyglobby/-/tinyglobby-0.2.15.tgz#e228dd1e638cea993d2fdb4fcd2d4602a79951c2" + integrity sha1-4ijdHmOM6pk9L9tPzS1GAqeZUcI= + dependencies: + fdir "^6.5.0" + picomatch "^4.0.3" + tmp@^0.2.5: version "0.2.5" resolved "https://pkgs.dev.azure.com/azure-public/VisualCpp/_packaging/cpp_PublicPackages/npm/registry/tmp/-/tmp-0.2.5.tgz#b06bcd23f0f3c8357b426891726d16015abfd8f8" @@ -4737,10 +4715,10 @@ tr46@~0.0.3: resolved "https://pkgs.dev.azure.com/azure-public/VisualCpp/_packaging/cpp_PublicPackages/npm/registry/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" integrity sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o= -ts-api-utils@^1.0.1: - version "1.4.3" - resolved "https://pkgs.dev.azure.com/azure-public/VisualCpp/_packaging/cpp_PublicPackages/npm/registry/ts-api-utils/-/ts-api-utils-1.4.3.tgz#bfc2215fe6528fecab2b0fba570a2e8a4263b064" - integrity sha1-v8IhX+ZSj+yrKw+6VwouikJjsGQ= +ts-api-utils@^2.4.0: + version "2.4.0" + resolved "https://pkgs.dev.azure.com/azure-public/VisualCpp/_packaging/cpp_PublicPackages/npm/registry/ts-api-utils/-/ts-api-utils-2.4.0.tgz#2690579f96d2790253bdcf1ca35d569ad78f9ad8" + integrity sha1-JpBXn5bSeQJTvc8co11WmtePmtg= ts-loader@^9.5.1: version "9.5.2" @@ -4804,11 +4782,6 @@ type-detect@^4.1.0: resolved "https://pkgs.dev.azure.com/azure-public/VisualCpp/_packaging/cpp_PublicPackages/npm/registry/type-detect/-/type-detect-4.1.0.tgz#deb2453e8f08dcae7ae98c626b13dddb0155906c" integrity sha1-3rJFPo8I3K566YxiaxPd2wFVkGw= -type-fest@^0.20.2: - version "0.20.2" - resolved "https://pkgs.dev.azure.com/azure-public/VisualCpp/_packaging/cpp_PublicPackages/npm/registry/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" - integrity sha1-G/IH9LKPkVg2ZstfvTJ4hzAc1fQ= - type@^2.7.2: version "2.7.3" resolved "https://pkgs.dev.azure.com/azure-public/VisualCpp/_packaging/cpp_PublicPackages/npm/registry/type/-/type-2.7.3.tgz#436981652129285cc3ba94f392886c2637ea0486" From edde02e64f3ab68ba2c2d5cb6ec6ebcffff4acbb Mon Sep 17 00:00:00 2001 From: Sean McManus Date: Mon, 2 Feb 2026 14:08:35 -0800 Subject: [PATCH 02/18] Update. --- Extension/eslint.config.js | 9 --------- 1 file changed, 9 deletions(-) diff --git a/Extension/eslint.config.js b/Extension/eslint.config.js index 1c3a17361..b5e1dd121 100644 --- a/Extension/eslint.config.js +++ b/Extension/eslint.config.js @@ -125,15 +125,6 @@ module.exports = [ // JSDoc rules "jsdoc/no-types": "error", - - // Header rules - TODO: eslint-plugin-header may not be compatible with ESLint 9 flat config - // The old config had: - // "header/header": ["warn", "block", [ - // " --------------------------------------------------------------------------------------------", - // " * Copyright (c) Microsoft Corporation. All Rights Reserved.", - // " * See 'LICENSE' in the project root for license information.", - // " * ------------------------------------------------------------------------------------------ " - // ]], }, }, { From a6bebccf5fbcceff42a99946ff2c065c75fb175c Mon Sep 17 00:00:00 2001 From: Sean McManus Date: Mon, 2 Feb 2026 14:26:39 -0800 Subject: [PATCH 03/18] Re-enable no-unused-variables. Fix fast-glob dependency. --- Extension/.scripts/clean.ts | 1 + Extension/.scripts/copyWalkthruMedia.ts | 1 + Extension/eslint.config.js | 2 +- Extension/package.json | 1 + .../src/Debugger/configurationProvider.ts | 4 +- Extension/src/Debugger/nativeAttach.ts | 4 +- Extension/src/LanguageServer/client.ts | 5 +- .../src/LanguageServer/configurations.ts | 6 +- .../LanguageServer/cppBuildTaskProvider.ts | 2 +- Extension/src/LanguageServer/extension.ts | 4 +- Extension/src/LanguageServer/settings.ts | 6 +- Extension/src/SSH/commandInteractors.ts | 2 +- Extension/src/SSH/sshHosts.ts | 6 +- Extension/src/Utility/Eventing/dispatcher.ts | 1 + Extension/src/Utility/Eventing/emitter.ts | 1 + Extension/src/Utility/Sandbox/sandbox.ts | 2 +- Extension/src/Utility/System/array.ts | 1 + Extension/src/common.ts | 10 ++-- Extension/src/id.ts | 8 +-- Extension/src/main.ts | 2 +- Extension/src/telemetry.ts | 2 +- .../Debugger/tests/integration.test.ts | 1 + Extension/test/unit/asyncIterators.test.ts | 1 + Extension/ui/settings.ts | 1 + Extension/yarn.lock | 58 ++++++++++++++++++- 25 files changed, 99 insertions(+), 33 deletions(-) diff --git a/Extension/.scripts/clean.ts b/Extension/.scripts/clean.ts index 23a22810a..f1e1a4e20 100644 --- a/Extension/.scripts/clean.ts +++ b/Extension/.scripts/clean.ts @@ -28,6 +28,7 @@ export async function reset() { async function details(files: string[]) { let all = await Promise.all(files.filter(each => each).map(async (each) => { + // eslint-disable-next-line @typescript-eslint/no-unused-vars const [filename, stats] = await filepath.stats(each); return { filename: stats.isDirectory() ? cyan(`${each}${sep}**`) : brightGreen(`${each}`), diff --git a/Extension/.scripts/copyWalkthruMedia.ts b/Extension/.scripts/copyWalkthruMedia.ts index c42556015..842d5da3d 100644 --- a/Extension/.scripts/copyWalkthruMedia.ts +++ b/Extension/.scripts/copyWalkthruMedia.ts @@ -18,6 +18,7 @@ export async function watch() { if (source) { verbose(`Watching ${source} folder for changes.`); console.log('Press Ctrl+C to exit.'); + // eslint-disable-next-line @typescript-eslint/no-unused-vars for await (const event of watchFiles(source, { recursive: true })) { await main(); } diff --git a/Extension/eslint.config.js b/Extension/eslint.config.js index b5e1dd121..599cd7c08 100644 --- a/Extension/eslint.config.js +++ b/Extension/eslint.config.js @@ -64,7 +64,7 @@ module.exports = [ "@typescript-eslint/unified-signatures": "error", "@typescript-eslint/no-floating-promises": "error", "@typescript-eslint/method-signature-style": ["error", "method"], - "@typescript-eslint/no-unused-vars": ["off"], + "@typescript-eslint/no-unused-vars": ["error", { "argsIgnorePattern": "^_" }], "@typescript-eslint/no-unnecessary-boolean-literal-compare": "off", // Core ESLint rules diff --git a/Extension/package.json b/Extension/package.json index ffc9739db..4bab826ce 100644 --- a/Extension/package.json +++ b/Extension/package.json @@ -6788,6 +6788,7 @@ "chokidar": "^3.6.0", "comment-json": "^4.2.3", "escape-string-regexp": "^2.0.0", + "fast-glob": "^3.3.3", "glob": "^7.2.3", "minimatch": "^4.2.0", "mkdirp": "^3.0.1", diff --git a/Extension/src/Debugger/configurationProvider.ts b/Extension/src/Debugger/configurationProvider.ts index 51459e520..37945823a 100644 --- a/Extension/src/Debugger/configurationProvider.ts +++ b/Extension/src/Debugger/configurationProvider.ts @@ -179,7 +179,7 @@ export class DebugConfigurationProvider implements vscode.DebugConfigurationProv await cppBuildTaskProvider.runBuildTask(config.preLaunchTask); config.preLaunchTask = undefined; Telemetry.logDebuggerEvent(DebuggerEvent.debugPanel, { "debugType": DebugType.debug, "configSource": config.configSource || ConfigSource.unknown, "configMode": ConfigMode.launchConfig, "cancelled": "false", "succeeded": "true" }); - } catch (err) { + } catch { Telemetry.logDebuggerEvent(DebuggerEvent.debugPanel, { "debugType": DebugType.debug, "configSource": config.configSource || ConfigSource.unknown, "configMode": ConfigMode.launchConfig, "cancelled": "false", "succeeded": "false" }); } return config; @@ -620,7 +620,7 @@ export class DebugConfigurationProvider implements vscode.DebugConfigurationProv if (response === applyButton || response === updateButton) { try { await vscode.commands.executeCommand('C_Cpp.SetVsDeveloperEnvironment', 'buildAndDebug'); - } catch (e: any) { + } catch { // Ignore the error, the user will be prompted to apply the environment manually. } } diff --git a/Extension/src/Debugger/nativeAttach.ts b/Extension/src/Debugger/nativeAttach.ts index 26914a90e..669fe7570 100644 --- a/Extension/src/Debugger/nativeAttach.ts +++ b/Extension/src/Debugger/nativeAttach.ts @@ -184,7 +184,7 @@ function spawnChildProcess(command: string, token?: vscode.CancellationToken): P try { process.kill(); - } catch (e) { + } catch { // Failed to kill process. } reject(new Error(localize("timeout.processList.spawn", '"{0}" timed out after {1} seconds.', command, seconds))); @@ -198,7 +198,7 @@ function spawnChildProcess(command: string, token?: vscode.CancellationToken): P try { process.kill(); - } catch (e) { + } catch { // Failed to kill process. } reject(new Error(localize("cancel.processList.spawn", '"{0}" canceled.', command))); diff --git a/Extension/src/LanguageServer/client.ts b/Extension/src/LanguageServer/client.ts index 234e6183f..edb991bb0 100644 --- a/Extension/src/LanguageServer/client.ts +++ b/Extension/src/LanguageServer/client.ts @@ -2228,13 +2228,13 @@ export class DefaultClient implements Client { if (!await provider.canProvideConfiguration(docUri, tokenSource.token)) { return []; } - } catch (err) { + } catch { console.warn("Caught exception from canProvideConfiguration"); } let configs: util.Mutable[] = []; try { configs = await provider.provideConfigurations([docUri], tokenSource.token); - } catch (err) { + } catch { console.warn("Caught exception from provideConfigurations"); } @@ -4337,6 +4337,7 @@ function getLanguageServerFileName(): string { return path.resolve(util.getExtensionFilePath("bin"), extensionProcessName); } +/* eslint-disable @typescript-eslint/no-unused-vars */ class NullClient implements Client { private booleanEvent = new vscode.EventEmitter(); private numberEvent = new vscode.EventEmitter(); diff --git a/Extension/src/LanguageServer/configurations.ts b/Extension/src/LanguageServer/configurations.ts index ea135109d..6f3c1588a 100644 --- a/Extension/src/LanguageServer/configurations.ts +++ b/Extension/src/LanguageServer/configurations.ts @@ -493,7 +493,7 @@ export class CppProperties { }); } } - } catch (error) { + } catch { /*ignore*/ } finally { this.vcpkgPathReady = true; @@ -1196,7 +1196,7 @@ export class CppProperties { }, 1000); })); }); - } catch (e) { + } catch { // The file watcher limit is hit. // TODO: Check if the compile commands file has a higher timestamp during the interval timer. } @@ -1571,7 +1571,7 @@ export class CppProperties { if (dirty) { try { this.writeToJson(); - } catch (err) { + } catch { // Ignore write errors, the file may be under source control. Updated settings will only be modified in memory. void vscode.window.showWarningMessage(localize('update.properties.failed', 'Attempt to update "{0}" failed (do you have write access?)', this.propertiesFile.fsPath)); success = false; diff --git a/Extension/src/LanguageServer/cppBuildTaskProvider.ts b/Extension/src/LanguageServer/cppBuildTaskProvider.ts index 80b633c9d..1ff5be87b 100644 --- a/Extension/src/LanguageServer/cppBuildTaskProvider.ts +++ b/Extension/src/LanguageServer/cppBuildTaskProvider.ts @@ -93,7 +93,7 @@ export class CppBuildTaskProvider implements TaskProvider { let activeClient: Client; try { activeClient = ext.getActiveClient(); - } catch (errJS) { + } catch { return emptyTasks; // Language service features may be disabled. } diff --git a/Extension/src/LanguageServer/extension.ts b/Extension/src/LanguageServer/extension.ts index 89ede26ed..fdb3b0e0d 100644 --- a/Extension/src/LanguageServer/extension.ts +++ b/Extension/src/LanguageServer/extension.ts @@ -964,7 +964,7 @@ function reportMacCrashes(): void { }); }, 5000); }); - } catch (e) { + } catch { // The file watcher limit is hit (may not be possible on Mac, but just in case). } }); @@ -1023,7 +1023,7 @@ export function watchForCrashes(crashDirectory: string): void { }); }, 5000); }); - } catch (e) { + } catch { // The file watcher limit is hit (may not be possible on Mac, but just in case). } }); diff --git a/Extension/src/LanguageServer/settings.ts b/Extension/src/LanguageServer/settings.ts index 86ddf401a..3ee17d794 100644 --- a/Extension/src/LanguageServer/settings.ts +++ b/Extension/src/LanguageServer/settings.ts @@ -301,7 +301,7 @@ export class CppSettings extends Settings { if (!semver.valid(bundledVersion)) { return path; } - } catch (e) { + } catch { // Unable to invoke our own clang-*. Use the system installed clang-*. return path; } @@ -314,7 +314,7 @@ export class CppSettings extends Settings { path = ""; setCachedClangPath(path); } - } catch (e) { + } catch { path = ""; setCachedClangPath(path); } @@ -898,7 +898,7 @@ export class CppSettings extends Settings { try { await vscode.workspace.applyEdit(edits); document = await vscode.workspace.openTextDocument(uri); - } catch (e) { + } catch { document = await vscode.workspace.openTextDocument(); } } else { diff --git a/Extension/src/SSH/commandInteractors.ts b/Extension/src/SSH/commandInteractors.ts index 01f4808d1..ce676c070 100644 --- a/Extension/src/SSH/commandInteractors.ts +++ b/Extension/src/SSH/commandInteractors.ts @@ -182,7 +182,7 @@ export function getExitCode(output: string, marker: string): number | undefined try { const num: number = parseInt(match[1]); return Number.isNaN(num) ? undefined : num; - } catch (err) { + } catch { return undefined; } } diff --git a/Extension/src/SSH/sshHosts.ts b/Extension/src/SSH/sshHosts.ts index 98c4d9308..b1b37f4b7 100644 --- a/Extension/src/SSH/sshHosts.ts +++ b/Extension/src/SSH/sshHosts.ts @@ -61,7 +61,7 @@ function extractHostNames(parsedConfig: Configuration): { [host: string]: string let resolvedConfig: ResolvedConfiguration | undefined; try { resolvedConfig = parsedConfig.compute(host); - } catch (e) { + } catch { getSshChannel().appendLine(localize("failed.to.find.user.info.for.SSH", "Failed to find user info for SSH. This could be caused by VS Code being installed using 'snap'. Please reinstall VS Code using the 'deb' package if you are planning to use SSH features.")); } @@ -160,7 +160,7 @@ async function getIncludedConfigFile( let includedContents: string; try { includedContents = (await fs.readFile(includePath)).toString(); - } catch (e) { + } catch { getSshChannel().appendLine(localize("failed.to.read.file", "Failed to read file {0}.", includePath)); return; } @@ -181,7 +181,7 @@ export async function writeSshConfiguration(configurationPath: string, configura try { await vscode.workspace.fs.createDirectory(vscode.Uri.file(path.dirname(configurationPath))); await fs.writeFile(configurationPath, configuration.toString()); - } catch (e) { + } catch { getSshChannel().appendLine(localize("failed.to.write.file", "Failed to write to file {0}.", configurationPath)); } } diff --git a/Extension/src/Utility/Eventing/dispatcher.ts b/Extension/src/Utility/Eventing/dispatcher.ts index b81bfc7b0..b233d49fb 100644 --- a/Extension/src/Utility/Eventing/dispatcher.ts +++ b/Extension/src/Utility/Eventing/dispatcher.ts @@ -3,6 +3,7 @@ * See 'LICENSE' in the project root for license information. * ------------------------------------------------------------------------------------------ */ +/* eslint-disable @typescript-eslint/no-unused-vars */ /* eslint-disable @typescript-eslint/unified-signatures */ import { readFile } from 'node:fs/promises'; diff --git a/Extension/src/Utility/Eventing/emitter.ts b/Extension/src/Utility/Eventing/emitter.ts index 736281f0e..36324c94a 100644 --- a/Extension/src/Utility/Eventing/emitter.ts +++ b/Extension/src/Utility/Eventing/emitter.ts @@ -3,6 +3,7 @@ * See 'LICENSE' in the project root for license information. * ------------------------------------------------------------------------------------------ */ +/* eslint-disable @typescript-eslint/no-unused-vars */ /* eslint-disable @typescript-eslint/unified-signatures */ import { is } from '../System/guards'; import { smash } from '../Text/identifiers'; diff --git a/Extension/src/Utility/Sandbox/sandbox.ts b/Extension/src/Utility/Sandbox/sandbox.ts index 6c588b20d..4da9d8a3f 100644 --- a/Extension/src/Utility/Sandbox/sandbox.ts +++ b/Extension/src/Utility/Sandbox/sandbox.ts @@ -28,7 +28,7 @@ export function createSandbox(): (code: string, context?: any) => T { } else { try { runInContext(`${response} = ${code}`, sandbox); - } catch (e) { + } catch { sandbox[response] = undefined; } } diff --git a/Extension/src/Utility/System/array.ts b/Extension/src/Utility/System/array.ts index 09267dd7f..a391bbbe4 100644 --- a/Extension/src/Utility/System/array.ts +++ b/Extension/src/Utility/System/array.ts @@ -3,6 +3,7 @@ * See 'LICENSE' in the project root for license information. * ------------------------------------------------------------------------------------------ */ +/* eslint-disable @typescript-eslint/no-unused-vars */ /* eslint-disable @typescript-eslint/unified-signatures */ import { fail } from 'assert'; diff --git a/Extension/src/common.ts b/Extension/src/common.ts index 9b0e27cd8..9ee2cb46c 100644 --- a/Extension/src/common.ts +++ b/Extension/src/common.ts @@ -95,7 +95,7 @@ export async function getRawJson(path: string | undefined): Promise { let rawElement: any = {}; try { rawElement = jsonc.parse(fileContents, undefined, true); - } catch (error) { + } catch { throw new Error(failedToParseJson); } return rawElement; @@ -501,7 +501,7 @@ export async function fsStat(filePath: fs.PathLike): Promise { // The first MAC address is the one Visual Studio uses const primary = await getMachineId(macAddresses.shift()); if (primary) { - logLanguageServerEvent('machineIdMap', {primary}); + logLanguageServerEvent('machineIdMap', { primary }); } // VS Code uses os.networkInterfaces() which has different sorting and availability, @@ -30,7 +30,7 @@ export async function logMachineIdMappings(): Promise { for (const macAddress of macAddresses) { const additional = await getMachineId(macAddress); if (additional) { - logLanguageServerEvent('machineIdMap', {additional}); + logLanguageServerEvent('machineIdMap', { additional }); } } } @@ -43,7 +43,7 @@ async function getMacAddresses(): Promise { const output = await execChildProcess('getmac'); const regex = /(?:[a-z0-9]{2}[:\-]){5}[a-z0-9]{2}/gmi; return output.match(regex) ?? []; - } catch (err) { + } catch { return []; } } @@ -62,7 +62,7 @@ async function getMachineId(macAddress?: string): Promise { const crypto = await import('crypto'); const normalized = macAddress.toUpperCase().replace(/:/g, '-'); return crypto.createHash('sha256').update(normalized, 'utf8').digest('hex'); - } catch (err) { + } catch { return undefined; } } diff --git a/Extension/src/main.ts b/Extension/src/main.ts index ac9030d55..fed7e019f 100644 --- a/Extension/src/main.ts +++ b/Extension/src/main.ts @@ -131,7 +131,7 @@ export async function activate(context: vscode.ExtensionContext): Promise import * as assert from 'assert'; diff --git a/Extension/test/unit/asyncIterators.test.ts b/Extension/test/unit/asyncIterators.test.ts index afbfa017f..80e8cfdca 100644 --- a/Extension/test/unit/asyncIterators.test.ts +++ b/Extension/test/unit/asyncIterators.test.ts @@ -3,6 +3,7 @@ * See 'LICENSE' in the project root for license information. * ------------------------------------------------------------------------------------------ */ +/* eslint-disable @typescript-eslint/no-unused-vars */ import { describe, it } from 'mocha'; import { fail, ok, strictEqual } from 'node:assert'; import { accumulator } from '../../src/Utility/Async/iterators'; diff --git a/Extension/ui/settings.ts b/Extension/ui/settings.ts index d299e0df4..4223ddf7e 100644 --- a/Extension/ui/settings.ts +++ b/Extension/ui/settings.ts @@ -413,4 +413,5 @@ class SettingsApp { } } +// eslint-disable-next-line @typescript-eslint/no-unused-vars const app: SettingsApp = new SettingsApp(); diff --git a/Extension/yarn.lock b/Extension/yarn.lock index 480afcd10..40ee3d8ed 100644 --- a/Extension/yarn.lock +++ b/Extension/yarn.lock @@ -293,6 +293,27 @@ resolved "https://pkgs.dev.azure.com/azure-public/VisualCpp/_packaging/cpp_PublicPackages/npm/registry/@nevware21/ts-utils/-/ts-utils-0.11.7.tgz#d7e67f8bafd4d81e9bec9599800a15fd08467055" integrity sha1-1+Z/i6/U2B6b7JWZgAoV/QhGcFU= +"@nodelib/fs.scandir@2.1.5": + version "2.1.5" + resolved "https://pkgs.dev.azure.com/azure-public/VisualCpp/_packaging/cpp_PublicPackages/npm/registry/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" + integrity sha1-dhnC6yGyVIP20WdUi0z9WnSIw9U= + dependencies: + "@nodelib/fs.stat" "2.0.5" + run-parallel "^1.1.9" + +"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": + version "2.0.5" + resolved "https://pkgs.dev.azure.com/azure-public/VisualCpp/_packaging/cpp_PublicPackages/npm/registry/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" + integrity sha1-W9Jir5Tp0lvR5xsF3u1Eh2oiLos= + +"@nodelib/fs.walk@^1.2.3": + version "1.2.8" + resolved "https://pkgs.dev.azure.com/azure-public/VisualCpp/_packaging/cpp_PublicPackages/npm/registry/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" + integrity sha1-6Vc36LtnRt3t9pxVaVNJTxlv5po= + dependencies: + "@nodelib/fs.scandir" "2.1.5" + fastq "^1.6.0" + "@octokit/auth-token@^5.0.0": version "5.1.2" resolved "https://pkgs.dev.azure.com/azure-public/VisualCpp/_packaging/cpp_PublicPackages/npm/registry/@octokit/auth-token/-/auth-token-5.1.2.tgz#68a486714d7a7fd1df56cb9bc89a860a0de866de" @@ -2189,6 +2210,17 @@ fast-fifo@^1.3.2: resolved "https://pkgs.dev.azure.com/azure-public/VisualCpp/_packaging/cpp_PublicPackages/npm/registry/fast-fifo/-/fast-fifo-1.3.2.tgz#286e31de96eb96d38a97899815740ba2a4f3640c" integrity sha1-KG4x3pbrltOKl4mYFXQLoqTzZAw= +fast-glob@^3.3.3: + version "3.3.3" + resolved "https://pkgs.dev.azure.com/azure-public/VisualCpp/_packaging/cpp_PublicPackages/npm/registry/fast-glob/-/fast-glob-3.3.3.tgz#d06d585ce8dba90a16b0505c543c3ccfb3aeb818" + integrity sha1-0G1YXOjbqQoWsFBcVDw8z7OuuBg= + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.2" + merge2 "^1.3.0" + micromatch "^4.0.8" + fast-json-stable-stringify@^2.0.0: version "2.1.0" resolved "https://pkgs.dev.azure.com/azure-public/VisualCpp/_packaging/cpp_PublicPackages/npm/registry/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" @@ -2223,6 +2255,13 @@ fastq@^1.13.0: dependencies: reusify "^1.0.4" +fastq@^1.6.0: + version "1.20.1" + resolved "https://pkgs.dev.azure.com/azure-public/VisualCpp/_packaging/cpp_PublicPackages/npm/registry/fastq/-/fastq-1.20.1.tgz#ca750a10dc925bc8b18839fd203e3ef4b3ced675" + integrity sha1-ynUKENySW8ixiDn9ID4+9LPO1nU= + dependencies: + reusify "^1.0.4" + fdir@^6.5.0: version "6.5.0" resolved "https://pkgs.dev.azure.com/azure-public/VisualCpp/_packaging/cpp_PublicPackages/npm/registry/fdir/-/fdir-6.5.0.tgz#ed2ab967a331ade62f18d077dae192684d50d350" @@ -3372,7 +3411,12 @@ merge-stream@^2.0.0: resolved "https://pkgs.dev.azure.com/azure-public/VisualCpp/_packaging/cpp_PublicPackages/npm/registry/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" integrity sha1-UoI2KaFN0AyXcPtq1H3GMQ8sH2A= -micromatch@^4.0.0, micromatch@^4.0.4: +merge2@^1.3.0: + version "1.4.1" + resolved "https://pkgs.dev.azure.com/azure-public/VisualCpp/_packaging/cpp_PublicPackages/npm/registry/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" + integrity sha1-Q2iJL4hekHRVpv19xVwMnUBJkK4= + +micromatch@^4.0.0, micromatch@^4.0.4, micromatch@^4.0.8: version "4.0.8" resolved "https://pkgs.dev.azure.com/azure-public/VisualCpp/_packaging/cpp_PublicPackages/npm/registry/micromatch/-/micromatch-4.0.8.tgz#d66fa18f3a47076789320b9b1af32bd86d9fa202" integrity sha1-1m+hjzpHB2eJMgubGvMr2G2fogI= @@ -3933,6 +3977,11 @@ punycode@^2.1.0: resolved "https://pkgs.dev.azure.com/azure-public/VisualCpp/_packaging/cpp_PublicPackages/npm/registry/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" integrity sha1-AnQi4vrsCyXhVJw+G9gwm5EztuU= +queue-microtask@^1.2.2: + version "1.2.3" + resolved "https://pkgs.dev.azure.com/azure-public/VisualCpp/_packaging/cpp_PublicPackages/npm/registry/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" + integrity sha1-SSkii7xyTfrEPg77BYyve2z7YkM= + randombytes@^2.1.0: version "2.1.0" resolved "https://pkgs.dev.azure.com/azure-public/VisualCpp/_packaging/cpp_PublicPackages/npm/registry/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" @@ -4120,6 +4169,13 @@ reusify@^1.0.4: resolved "https://pkgs.dev.azure.com/azure-public/VisualCpp/_packaging/cpp_PublicPackages/npm/registry/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" integrity sha1-kNo4Kx4SbvwCFG6QhFqI2xKSXXY= +run-parallel@^1.1.9: + version "1.2.0" + resolved "https://pkgs.dev.azure.com/azure-public/VisualCpp/_packaging/cpp_PublicPackages/npm/registry/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" + integrity sha1-ZtE2jae9+SHrnZW9GpIp5/IaQ+4= + dependencies: + queue-microtask "^1.2.2" + safe-array-concat@^1.1.3: version "1.1.3" resolved "https://pkgs.dev.azure.com/azure-public/VisualCpp/_packaging/cpp_PublicPackages/npm/registry/safe-array-concat/-/safe-array-concat-1.1.3.tgz#c9e54ec4f603b0bbb8e7e5007a5ee7aecd1538c3" From eae5b388183319ae6ef7c32fe3551317b97b23a4 Mon Sep 17 00:00:00 2001 From: Sean McManus Date: Mon, 2 Feb 2026 14:54:46 -0800 Subject: [PATCH 04/18] Add back @typescript-eslint/no-unnecessary-boolean-literal-compare. --- Extension/.scripts/clean.ts | 11 +++++++---- Extension/.scripts/common.ts | 9 ++++++--- Extension/.scripts/tsconfig.json | 3 ++- Extension/eslint.config.js | 15 ++++++++------- Extension/src/Utility/System/array.ts | 2 +- .../scenarios/Debugger/tests/integration.test.ts | 1 - 6 files changed, 24 insertions(+), 17 deletions(-) diff --git a/Extension/.scripts/clean.ts b/Extension/.scripts/clean.ts index f1e1a4e20..8154e8b68 100644 --- a/Extension/.scripts/clean.ts +++ b/Extension/.scripts/clean.ts @@ -18,25 +18,28 @@ export async function main() { } export async function all() { - await rimraf(...(await getModifiedIgnoredFiles()).filter(each => !each.includes('node_modules'))); + await rimraf(...(await getModifiedIgnoredFiles()).filter((each): each is string => each !== undefined && !each.includes('node_modules'))); } export async function reset() { verbose(`Resetting all .gitignored files in extension`); - await rimraf(...await getModifiedIgnoredFiles()); + await rimraf(...(await getModifiedIgnoredFiles()).filter((each): each is string => each !== undefined)); } async function details(files: string[]) { let all = await Promise.all(files.filter(each => each).map(async (each) => { // eslint-disable-next-line @typescript-eslint/no-unused-vars const [filename, stats] = await filepath.stats(each); + if (!stats) { + return null; + } return { filename: stats.isDirectory() ? cyan(`${each}${sep}**`) : brightGreen(`${each}`), date: stats.mtime.toLocaleDateString().replace(/\b(\d)\//g, '0$1\/'), time: stats.mtime.toLocaleTimeString().replace(/^(\d)\:/g, '0$1:'), modified: stats.mtime }; - })); + })).then(results => results.filter((each): each is NonNullable => each !== null)); all = all.sort((a, b) => a.modified.getTime() - b.modified.getTime()); // print a formatted table so the date and time are aligned const max = all.reduce((max, each) => Math.max(max, each.filename.length), 0); @@ -56,7 +59,7 @@ export async function show(opt?: string) { case 'ignored': case 'untracked': console.log(cyan('\n\nUntracked+Ignored files:')); - return details(await getModifiedIgnoredFiles()); + return details((await getModifiedIgnoredFiles()).filter((each): each is string => each !== undefined)); default: return error(`Unknown option '${opt}'`); diff --git a/Extension/.scripts/common.ts b/Extension/.scripts/common.ts index 7c22dd2ea..3bebb9b49 100644 --- a/Extension/.scripts/common.ts +++ b/Extension/.scripts/common.ts @@ -59,7 +59,7 @@ export async function getModifiedIgnoredFiles() { } export async function rimraf(...paths: string[]) { - const all = []; + const all: Promise[] = []; for (const each of paths) { if (!each) { continue; @@ -83,6 +83,9 @@ export async function mkdir(filePath: string) { } throw new Error(`Cannot create directory '${filePath}' because there is a file there.`); } + if (!fullPath) { + throw new Error(`Cannot create directory '${filePath}' because the path is invalid.`); + } await md(fullPath, { recursive: true }); return fullPath; @@ -259,7 +262,7 @@ export function position(text: string) { return gray(`${text}`); } -export async function assertAnyFolder(oneOrMoreFolders: string | string[], errorMessage?: string): Promise { +export async function assertAnyFolder(oneOrMoreFolders: string | string[], errorMessage?: string): Promise { oneOrMoreFolders = is.array(oneOrMoreFolders) ? oneOrMoreFolders : [oneOrMoreFolders]; for (const each of oneOrMoreFolders) { const result = await filepath.isFolder(each, $root); @@ -276,7 +279,7 @@ export async function assertAnyFolder(oneOrMoreFolders: string | string[], error } } -export async function assertAnyFile(oneOrMoreFiles: string | string[], errorMessage?: string): Promise { +export async function assertAnyFile(oneOrMoreFiles: string | string[], errorMessage?: string): Promise { oneOrMoreFiles = is.array(oneOrMoreFiles) ? oneOrMoreFiles : [oneOrMoreFiles]; for (const each of oneOrMoreFiles) { const result = await filepath.isFile(each, $root); diff --git a/Extension/.scripts/tsconfig.json b/Extension/.scripts/tsconfig.json index f382b7844..9253a3c8e 100644 --- a/Extension/.scripts/tsconfig.json +++ b/Extension/.scripts/tsconfig.json @@ -7,6 +7,7 @@ "experimentalDecorators": true, "allowSyntheticDefaultImports": true, "sourceMap": true, - "esModuleInterop": true + "esModuleInterop": true, + "strictNullChecks": true } } diff --git a/Extension/eslint.config.js b/Extension/eslint.config.js index 599cd7c08..c223a0ba4 100644 --- a/Extension/eslint.config.js +++ b/Extension/eslint.config.js @@ -38,6 +38,7 @@ module.exports = [ "@typescript-eslint/adjacent-overload-signatures": "error", "@typescript-eslint/array-type": "error", "@typescript-eslint/await-thenable": "error", + "@typescript-eslint/method-signature-style": ["error", "method"], "@typescript-eslint/naming-convention": [ "error", { @@ -45,27 +46,27 @@ module.exports = [ format: ["PascalCase"] } ], + "@typescript-eslint/no-array-constructor": "error", "@typescript-eslint/no-explicit-any": "off", "@typescript-eslint/no-extraneous-class": "off", - "@typescript-eslint/no-array-constructor": "error", - "@typescript-eslint/no-useless-constructor": "error", + "@typescript-eslint/no-extra-non-null-assertion": "error", + "@typescript-eslint/no-floating-promises": "error", "@typescript-eslint/no-for-in-array": "error", "@typescript-eslint/no-misused-new": "error", "@typescript-eslint/no-misused-promises": "error", "@typescript-eslint/no-namespace": "error", "@typescript-eslint/no-non-null-assertion": "error", - "@typescript-eslint/no-extra-non-null-assertion": "error", "@typescript-eslint/no-this-alias": "error", + "@typescript-eslint/no-unnecessary-boolean-literal-compare": "error", + "@typescript-eslint/no-unnecessary-qualifier": "error", "@typescript-eslint/no-unnecessary-type-arguments": "error", + "@typescript-eslint/no-unused-vars": ["error", { "argsIgnorePattern": "^_" }], + "@typescript-eslint/no-useless-constructor": "error", "@typescript-eslint/no-var-requires": "error", "@typescript-eslint/prefer-function-type": "error", "@typescript-eslint/prefer-namespace-keyword": "error", "@typescript-eslint/triple-slash-reference": "error", "@typescript-eslint/unified-signatures": "error", - "@typescript-eslint/no-floating-promises": "error", - "@typescript-eslint/method-signature-style": ["error", "method"], - "@typescript-eslint/no-unused-vars": ["error", { "argsIgnorePattern": "^_" }], - "@typescript-eslint/no-unnecessary-boolean-literal-compare": "off", // Core ESLint rules "camelcase": "off", diff --git a/Extension/src/Utility/System/array.ts b/Extension/src/Utility/System/array.ts index a391bbbe4..3b312b5c3 100644 --- a/Extension/src/Utility/System/array.ts +++ b/Extension/src/Utility/System/array.ts @@ -3,8 +3,8 @@ * See 'LICENSE' in the project root for license information. * ------------------------------------------------------------------------------------------ */ -/* eslint-disable @typescript-eslint/no-unused-vars */ /* eslint-disable @typescript-eslint/unified-signatures */ +/* eslint-disable @typescript-eslint/no-unused-vars */ import { fail } from 'assert'; import { is } from '../System/guards'; diff --git a/Extension/test/scenarios/Debugger/tests/integration.test.ts b/Extension/test/scenarios/Debugger/tests/integration.test.ts index 49998c659..be118bcad 100644 --- a/Extension/test/scenarios/Debugger/tests/integration.test.ts +++ b/Extension/test/scenarios/Debugger/tests/integration.test.ts @@ -2,7 +2,6 @@ * Copyright (c) Microsoft Corporation. All Rights Reserved. * See 'LICENSE' in the project root for license information. * ------------------------------------------------------------------------------------------ */ - /* eslint-disable @typescript-eslint/no-unused-vars */ /* eslint-disable @typescript-eslint/triple-slash-reference */ /// From bcc6fc6064a9f7313a7082ae9d9617357ea17ccd Mon Sep 17 00:00:00 2001 From: Sean McManus Date: Mon, 2 Feb 2026 14:57:45 -0800 Subject: [PATCH 05/18] Format. --- Extension/eslint.config.js | 250 ++++++++++++++++++------------------- 1 file changed, 125 insertions(+), 125 deletions(-) diff --git a/Extension/eslint.config.js b/Extension/eslint.config.js index c223a0ba4..a22a98be3 100644 --- a/Extension/eslint.config.js +++ b/Extension/eslint.config.js @@ -5,132 +5,132 @@ const jsdoc = require("eslint-plugin-jsdoc"); const eslintImport = require("eslint-plugin-import"); module.exports = [ - { - ignores: ["dist/", "vscode*.d.ts", "**/*.js"], - }, - { - files: ["**/*.ts", "**/*.tsx"], - languageOptions: { - parser: tsparser, - parserOptions: { - projectService: true, - tsconfigRootDir: __dirname, - }, - globals: { - window: "readonly", - document: "readonly", - console: "readonly", - process: "readonly", - module: "readonly", - require: "readonly", - global: "readonly", - __dirname: "readonly", - exports: "readonly", - }, + { + ignores: ["dist/", "vscode*.d.ts", "**/*.js"], }, - plugins: { - "@typescript-eslint": tseslint, - jsdoc, - import: eslintImport, + { + files: ["**/*.ts", "**/*.tsx"], + languageOptions: { + parser: tsparser, + parserOptions: { + projectService: true, + tsconfigRootDir: __dirname, + }, + globals: { + window: "readonly", + document: "readonly", + console: "readonly", + process: "readonly", + module: "readonly", + require: "readonly", + global: "readonly", + __dirname: "readonly", + exports: "readonly", + }, + }, + plugins: { + "@typescript-eslint": tseslint, + jsdoc, + import: eslintImport, + }, + rules: { + // TypeScript-specific rules + "@typescript-eslint/adjacent-overload-signatures": "error", + "@typescript-eslint/array-type": "error", + "@typescript-eslint/await-thenable": "error", + "@typescript-eslint/method-signature-style": ["error", "method"], + "@typescript-eslint/naming-convention": [ + "error", + { + selector: "typeLike", + format: ["PascalCase"] + } + ], + "@typescript-eslint/no-array-constructor": "error", + "@typescript-eslint/no-explicit-any": "off", + "@typescript-eslint/no-extraneous-class": "off", + "@typescript-eslint/no-extra-non-null-assertion": "error", + "@typescript-eslint/no-floating-promises": "error", + "@typescript-eslint/no-for-in-array": "error", + "@typescript-eslint/no-misused-new": "error", + "@typescript-eslint/no-misused-promises": "error", + "@typescript-eslint/no-namespace": "error", + "@typescript-eslint/no-non-null-assertion": "error", + "@typescript-eslint/no-this-alias": "error", + "@typescript-eslint/no-unnecessary-boolean-literal-compare": "error", + "@typescript-eslint/no-unnecessary-qualifier": "error", + "@typescript-eslint/no-unnecessary-type-arguments": "error", + "@typescript-eslint/no-unused-vars": ["error", { "argsIgnorePattern": "^_" }], + "@typescript-eslint/no-useless-constructor": "error", + "@typescript-eslint/no-var-requires": "error", + "@typescript-eslint/prefer-function-type": "error", + "@typescript-eslint/prefer-namespace-keyword": "error", + "@typescript-eslint/triple-slash-reference": "error", + "@typescript-eslint/unified-signatures": "error", + + // Core ESLint rules + "camelcase": "off", + "no-case-declarations": "off", + "no-useless-escape": "off", + "no-floating-decimal": "error", + "keyword-spacing": ["error", { before: true, overrides: { this: { before: false } } }], + "arrow-spacing": ["error", { before: true, after: true }], + "semi-spacing": ["error", { before: false, after: true }], + "no-extra-parens": ["error", "all", { nestedBinaryExpressions: false, ternaryOperandBinaryExpressions: false }], + "arrow-body-style": "error", + "comma-dangle": "error", + "comma-spacing": "error", + "constructor-super": "error", + "curly": "error", + "eol-last": "error", + "eqeqeq": ["error", "always"], + "new-parens": "error", + "no-bitwise": "error", + "no-caller": "error", + "no-cond-assign": "error", + "no-debugger": "error", + "no-duplicate-case": "error", + "no-duplicate-imports": "error", + "no-eval": "error", + "no-fallthrough": "error", + "no-invalid-this": "error", + "no-irregular-whitespace": "error", + "rest-spread-spacing": ["error", "never"], + "no-multiple-empty-lines": ["error", { max: 1, maxEOF: 1, maxBOF: 0 }], + "no-new-wrappers": "error", + "no-return-await": "error", + "no-sequences": "error", + "no-sparse-arrays": "error", + "no-trailing-spaces": "error", + "no-multi-spaces": "error", + "no-undef-init": "error", + "no-unsafe-finally": "error", + "no-unused-expressions": "error", + "no-unused-labels": "error", + "no-unused-vars": "off", + "space-before-blocks": "error", + "no-var": "error", + "one-var": ["error", "never"], + "prefer-const": "error", + "prefer-object-spread": "error", + "space-in-parens": ["error", "never"], + "spaced-comment": ["off", "always", { line: { exceptions: ["/"] } }], + "use-isnan": "error", + "valid-typeof": "error", + "yoda": "error", + "space-infix-ops": "error", + + // Import rules + "import/no-default-export": "error", + "import/no-unassigned-import": "error", + + // JSDoc rules + "jsdoc/no-types": "error", + }, }, - rules: { - // TypeScript-specific rules - "@typescript-eslint/adjacent-overload-signatures": "error", - "@typescript-eslint/array-type": "error", - "@typescript-eslint/await-thenable": "error", - "@typescript-eslint/method-signature-style": ["error", "method"], - "@typescript-eslint/naming-convention": [ - "error", - { - selector: "typeLike", - format: ["PascalCase"] - } - ], - "@typescript-eslint/no-array-constructor": "error", - "@typescript-eslint/no-explicit-any": "off", - "@typescript-eslint/no-extraneous-class": "off", - "@typescript-eslint/no-extra-non-null-assertion": "error", - "@typescript-eslint/no-floating-promises": "error", - "@typescript-eslint/no-for-in-array": "error", - "@typescript-eslint/no-misused-new": "error", - "@typescript-eslint/no-misused-promises": "error", - "@typescript-eslint/no-namespace": "error", - "@typescript-eslint/no-non-null-assertion": "error", - "@typescript-eslint/no-this-alias": "error", - "@typescript-eslint/no-unnecessary-boolean-literal-compare": "error", - "@typescript-eslint/no-unnecessary-qualifier": "error", - "@typescript-eslint/no-unnecessary-type-arguments": "error", - "@typescript-eslint/no-unused-vars": ["error", { "argsIgnorePattern": "^_" }], - "@typescript-eslint/no-useless-constructor": "error", - "@typescript-eslint/no-var-requires": "error", - "@typescript-eslint/prefer-function-type": "error", - "@typescript-eslint/prefer-namespace-keyword": "error", - "@typescript-eslint/triple-slash-reference": "error", - "@typescript-eslint/unified-signatures": "error", - - // Core ESLint rules - "camelcase": "off", - "no-case-declarations": "off", - "no-useless-escape": "off", - "no-floating-decimal": "error", - "keyword-spacing": ["error", { before: true, overrides: { this: { before: false } } }], - "arrow-spacing": ["error", { before: true, after: true }], - "semi-spacing": ["error", { before: false, after: true }], - "no-extra-parens": ["error", "all", { nestedBinaryExpressions: false, ternaryOperandBinaryExpressions: false }], - "arrow-body-style": "error", - "comma-dangle": "error", - "comma-spacing": "error", - "constructor-super": "error", - "curly": "error", - "eol-last": "error", - "eqeqeq": ["error", "always"], - "new-parens": "error", - "no-bitwise": "error", - "no-caller": "error", - "no-cond-assign": "error", - "no-debugger": "error", - "no-duplicate-case": "error", - "no-duplicate-imports": "error", - "no-eval": "error", - "no-fallthrough": "error", - "no-invalid-this": "error", - "no-irregular-whitespace": "error", - "rest-spread-spacing": ["error", "never"], - "no-multiple-empty-lines": ["error", { max: 1, maxEOF: 1, maxBOF: 0 }], - "no-new-wrappers": "error", - "no-return-await": "error", - "no-sequences": "error", - "no-sparse-arrays": "error", - "no-trailing-spaces": "error", - "no-multi-spaces": "error", - "no-undef-init": "error", - "no-unsafe-finally": "error", - "no-unused-expressions": "error", - "no-unused-labels": "error", - "no-unused-vars": "off", - "space-before-blocks": "error", - "no-var": "error", - "one-var": ["error", "never"], - "prefer-const": "error", - "prefer-object-spread": "error", - "space-in-parens": ["error", "never"], - "spaced-comment": ["off", "always", { line: { exceptions: ["/"] } }], - "use-isnan": "error", - "valid-typeof": "error", - "yoda": "error", - "space-infix-ops": "error", - - // Import rules - "import/no-default-export": "error", - "import/no-unassigned-import": "error", - - // JSDoc rules - "jsdoc/no-types": "error", + { + // Apply JS recommended rules only to JS files + ...js.configs.recommended, + files: ["**/*.{js,mjs,cjs}"] }, - }, - { - // Apply JS recommended rules only to JS files - ...js.configs.recommended, - files: ["**/*.{js,mjs,cjs}"] - }, ]; From d3d9e1c062466bd634ef3c1d4dfeff8f4e481a38 Mon Sep 17 00:00:00 2001 From: Sean McManus Date: Mon, 2 Feb 2026 16:15:44 -0800 Subject: [PATCH 06/18] Code review changes. --- Extension/.scripts/clean.ts | 8 ++++---- Extension/.scripts/common.ts | 16 ++++++---------- 2 files changed, 10 insertions(+), 14 deletions(-) diff --git a/Extension/.scripts/clean.ts b/Extension/.scripts/clean.ts index 8154e8b68..92a85edab 100644 --- a/Extension/.scripts/clean.ts +++ b/Extension/.scripts/clean.ts @@ -27,9 +27,8 @@ export async function reset() { } async function details(files: string[]) { - let all = await Promise.all(files.filter(each => each).map(async (each) => { - // eslint-disable-next-line @typescript-eslint/no-unused-vars - const [filename, stats] = await filepath.stats(each); + const results = await Promise.all(files.filter(each => each).map(async (each) => { + const [, stats] = await filepath.stats(each); if (!stats) { return null; } @@ -39,7 +38,8 @@ async function details(files: string[]) { time: stats.mtime.toLocaleTimeString().replace(/^(\d)\:/g, '0$1:'), modified: stats.mtime }; - })).then(results => results.filter((each): each is NonNullable => each !== null)); + })); + let all = results.filter((each): each is NonNullable => each !== null); all = all.sort((a, b) => a.modified.getTime() - b.modified.getTime()); // print a formatted table so the date and time are aligned const max = all.reduce((max, each) => Math.max(max, each.filename.length), 0); diff --git a/Extension/.scripts/common.ts b/Extension/.scripts/common.ts index 3bebb9b49..c141ddd22 100644 --- a/Extension/.scripts/common.ts +++ b/Extension/.scripts/common.ts @@ -271,12 +271,10 @@ export async function assertAnyFolder(oneOrMoreFolders: string | string[], error return result; } } - if (errorMessage) { - if (!$switches.includes('--quiet')) { - error(errorMessage); - } - process.exit(1); + if (errorMessage && !$switches.includes('--quiet')) { + error(errorMessage); } + process.exit(1); } export async function assertAnyFile(oneOrMoreFiles: string | string[], errorMessage?: string): Promise { @@ -288,12 +286,10 @@ export async function assertAnyFile(oneOrMoreFiles: string | string[], errorMess return result; } } - if (errorMessage) { - if (!$switches.includes('--quiet')) { - error(errorMessage); - } - process.exit(1); + if (errorMessage && !$switches.includes('--quiet')) { + error(errorMessage); } + process.exit(1); } const quiet = process.argv.includes('--quiet'); From a6c7038971db8ef8ad46c5d37f8aea6a3d90403d Mon Sep 17 00:00:00 2001 From: Sean McManus Date: Mon, 2 Feb 2026 16:18:29 -0800 Subject: [PATCH 07/18] Remove | undefined. --- Extension/.scripts/common.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Extension/.scripts/common.ts b/Extension/.scripts/common.ts index c141ddd22..6a0c382ef 100644 --- a/Extension/.scripts/common.ts +++ b/Extension/.scripts/common.ts @@ -262,7 +262,7 @@ export function position(text: string) { return gray(`${text}`); } -export async function assertAnyFolder(oneOrMoreFolders: string | string[], errorMessage?: string): Promise { +export async function assertAnyFolder(oneOrMoreFolders: string | string[], errorMessage?: string): Promise { oneOrMoreFolders = is.array(oneOrMoreFolders) ? oneOrMoreFolders : [oneOrMoreFolders]; for (const each of oneOrMoreFolders) { const result = await filepath.isFolder(each, $root); @@ -277,7 +277,7 @@ export async function assertAnyFolder(oneOrMoreFolders: string | string[], error process.exit(1); } -export async function assertAnyFile(oneOrMoreFiles: string | string[], errorMessage?: string): Promise { +export async function assertAnyFile(oneOrMoreFiles: string | string[], errorMessage?: string): Promise { oneOrMoreFiles = is.array(oneOrMoreFiles) ? oneOrMoreFiles : [oneOrMoreFiles]; for (const each of oneOrMoreFiles) { const result = await filepath.isFile(each, $root); From 99547ab901fceedd942d18f2183e6a70069ae1fb Mon Sep 17 00:00:00 2001 From: Sean McManus Date: Mon, 2 Feb 2026 17:39:46 -0800 Subject: [PATCH 08/18] Fix build. --- Extension/.scripts/common.ts | 1 - Extension/.scripts/test.ts | 11 ++++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/Extension/.scripts/common.ts b/Extension/.scripts/common.ts index 6a0c382ef..17e7b925f 100644 --- a/Extension/.scripts/common.ts +++ b/Extension/.scripts/common.ts @@ -325,7 +325,6 @@ export async function checkDTS() { let failing = false; failing = !await assertAnyFile('vscode.d.ts') && (quiet || warn(`The VSCode import file '${$root}/dist/src/vscode.d.ts is missing.`)) || failing; failing = !await assertAnyFile('vscode.proposed.terminalDataWriteEvent.d.ts') && (quiet || warn(`The VSCode import file '${$root}/dist/src/vscode.proposed.terminalDataWriteEvent.d.ts is missing.`)) || failing; - failing = !await assertAnyFile('vscode.proposed.lmTools.d.ts') && (quiet || warn(`The VSCode import file '${$root}/dist/src/vscode.proposed.lmTools.d.ts is missing.`)) || failing; if (!failing) { verbose('VSCode d.ts files appear to be in place.'); diff --git a/Extension/.scripts/test.ts b/Extension/.scripts/test.ts index 69fd443cd..c6b2a9a2c 100644 --- a/Extension/.scripts/test.ts +++ b/Extension/.scripts/test.ts @@ -75,7 +75,7 @@ filterStdio(); async function unitTests() { await assertAnyFolder('dist/test/unit', `The folder '${$root}/dist/test/unit is missing. You should run ${brightGreen("yarn compile")}\n\n`); const mocha = await assertAnyFile(["node_modules/.bin/mocha.cmd", "node_modules/.bin/mocha"], `Can't find the mocha testrunner. You might need to run ${brightGreen("yarn install")}\n\n`); - const result = spawnSync(mocha, [`${$root}/dist/test/unit/**/*.test.js`, '--timeout', '30000'], { stdio:'inherit', shell: true }); + const result = spawnSync(mocha, [`${$root}/dist/test/unit/**/*.test.js`, '--timeout', '30000'], { stdio: 'inherit', shell: true }); verbose(`\n${green("NOTE:")} If you want to run a scenario test (end-to-end) use ${cmdSwitch('scenario=')} \n\n`); return result.status; } @@ -161,23 +161,24 @@ interface Input { id: string; type: string; description: string; - options: CommentArray<{label: string; value: string}>; + options: CommentArray<{ label: string; value: string }>; } export async function getScenarioNames() { return (await readdir(`${$root}/test/scenarios`).catch(returns.none)).filter(each => each !== 'Debugger'); } -export async function getScenarioFolder(scenarioName: string) { +export async function getScenarioFolder(scenarioName: string | undefined) { return scenarioName ? resolve(`${$root}/test/scenarios/${(await getScenarioNames()).find(each => each.toLowerCase() === scenarioName.toLowerCase())}`) : undefined; } export async function list() { console.log(`\n${cyan("Scenarios: ")}\n`); const names = await getScenarioNames(); - const max = names.reduce((max, each) => Math.max(max, each), 0); + const max = names.reduce((max, each) => Math.max(max, each.length), 0); for (const each of names) { - console.log(` ${green(each.padEnd(max))}: ${gray(await getScenarioFolder(each))}`); + const folder = await getScenarioFolder(each); + console.log(` ${green(each.padEnd(max))}: ${gray(folder || '')}`); } } From e0ec1a95e15ce47ff01e10e7d54883ff5ee62a7c Mon Sep 17 00:00:00 2001 From: Sean McManus Date: Mon, 2 Feb 2026 17:52:57 -0800 Subject: [PATCH 09/18] Try a build fix. --- Extension/.scripts/common.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Extension/.scripts/common.ts b/Extension/.scripts/common.ts index 17e7b925f..d46608426 100644 --- a/Extension/.scripts/common.ts +++ b/Extension/.scripts/common.ts @@ -262,7 +262,7 @@ export function position(text: string) { return gray(`${text}`); } -export async function assertAnyFolder(oneOrMoreFolders: string | string[], errorMessage?: string): Promise { +export async function assertAnyFolder(oneOrMoreFolders: string | string[], errorMessage?: string): Promise { oneOrMoreFolders = is.array(oneOrMoreFolders) ? oneOrMoreFolders : [oneOrMoreFolders]; for (const each of oneOrMoreFolders) { const result = await filepath.isFolder(each, $root); @@ -273,8 +273,9 @@ export async function assertAnyFolder(oneOrMoreFolders: string | string[], error } if (errorMessage && !$switches.includes('--quiet')) { error(errorMessage); + process.exit(1); } - process.exit(1); + //process.exit(1); } export async function assertAnyFile(oneOrMoreFiles: string | string[], errorMessage?: string): Promise { From 54406fe48be4215ddfe9dfff4db93b7f4d742c02 Mon Sep 17 00:00:00 2001 From: Sean McManus Date: Mon, 2 Feb 2026 18:00:16 -0800 Subject: [PATCH 10/18] Attempt to get the assert failure. --- Extension/.scripts/common.ts | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/Extension/.scripts/common.ts b/Extension/.scripts/common.ts index d46608426..5b4e5d881 100644 --- a/Extension/.scripts/common.ts +++ b/Extension/.scripts/common.ts @@ -262,7 +262,7 @@ export function position(text: string) { return gray(`${text}`); } -export async function assertAnyFolder(oneOrMoreFolders: string | string[], errorMessage?: string): Promise { +export async function assertAnyFolder(oneOrMoreFolders: string | string[], errorMessage?: string): Promise { oneOrMoreFolders = is.array(oneOrMoreFolders) ? oneOrMoreFolders : [oneOrMoreFolders]; for (const each of oneOrMoreFolders) { const result = await filepath.isFolder(each, $root); @@ -273,9 +273,10 @@ export async function assertAnyFolder(oneOrMoreFolders: string | string[], error } if (errorMessage && !$switches.includes('--quiet')) { error(errorMessage); - process.exit(1); + } else { + error(`assertAnyFolders(${oneOrMoreFolders}) failed.`); } - //process.exit(1); + process.exit(1); } export async function assertAnyFile(oneOrMoreFiles: string | string[], errorMessage?: string): Promise { @@ -289,6 +290,8 @@ export async function assertAnyFile(oneOrMoreFiles: string | string[], errorMess } if (errorMessage && !$switches.includes('--quiet')) { error(errorMessage); + } else { + error(`assertAnyFiles(${oneOrMoreFiles}) failed.`); } process.exit(1); } From b18526f1822865970558b52171876eacc8ee6e70 Mon Sep 17 00:00:00 2001 From: Sean McManus Date: Mon, 2 Feb 2026 18:12:27 -0800 Subject: [PATCH 11/18] Attempt a fix. --- Extension/.scripts/common.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Extension/.scripts/common.ts b/Extension/.scripts/common.ts index 5b4e5d881..92a5dd2c8 100644 --- a/Extension/.scripts/common.ts +++ b/Extension/.scripts/common.ts @@ -352,8 +352,8 @@ export async function checkBinaries() { export async function checkProposals() { let failing = false; - await rm(`${$root}/vscode.proposed.chatParticipantAdditions.d.ts`); failing = await assertAnyFile('vscode.proposed.chatParticipantAdditions.d.ts') && (quiet || warn(`The VSCode import file '${$root}/vscode.proposed.chatParticipantAdditions.d.ts' should not be present.`)) || failing; + await rm(`${$root}/vscode.proposed.chatParticipantAdditions.d.ts`); if (!failing) { verbose('VSCode proposals appear to be in place.'); From 12d3a5779b905666c6ebd875fccbb58ed533508a Mon Sep 17 00:00:00 2001 From: Sean McManus Date: Mon, 2 Feb 2026 18:18:48 -0800 Subject: [PATCH 12/18] Fix build error. --- Extension/.scripts/common.ts | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/Extension/.scripts/common.ts b/Extension/.scripts/common.ts index 92a5dd2c8..908874dcd 100644 --- a/Extension/.scripts/common.ts +++ b/Extension/.scripts/common.ts @@ -262,7 +262,7 @@ export function position(text: string) { return gray(`${text}`); } -export async function assertAnyFolder(oneOrMoreFolders: string | string[], errorMessage?: string): Promise { +export async function assertAnyFolder(oneOrMoreFolders: string | string[], errorMessage?: string): Promise { oneOrMoreFolders = is.array(oneOrMoreFolders) ? oneOrMoreFolders : [oneOrMoreFolders]; for (const each of oneOrMoreFolders) { const result = await filepath.isFolder(each, $root); @@ -273,13 +273,11 @@ export async function assertAnyFolder(oneOrMoreFolders: string | string[], error } if (errorMessage && !$switches.includes('--quiet')) { error(errorMessage); - } else { - error(`assertAnyFolders(${oneOrMoreFolders}) failed.`); + process.exit(1); } - process.exit(1); } -export async function assertAnyFile(oneOrMoreFiles: string | string[], errorMessage?: string): Promise { +export async function assertAnyFile(oneOrMoreFiles: string | string[], errorMessage?: string): Promise { oneOrMoreFiles = is.array(oneOrMoreFiles) ? oneOrMoreFiles : [oneOrMoreFiles]; for (const each of oneOrMoreFiles) { const result = await filepath.isFile(each, $root); @@ -290,10 +288,8 @@ export async function assertAnyFile(oneOrMoreFiles: string | string[], errorMess } if (errorMessage && !$switches.includes('--quiet')) { error(errorMessage); - } else { - error(`assertAnyFiles(${oneOrMoreFiles}) failed.`); + process.exit(1); } - process.exit(1); } const quiet = process.argv.includes('--quiet'); @@ -352,8 +348,8 @@ export async function checkBinaries() { export async function checkProposals() { let failing = false; - failing = await assertAnyFile('vscode.proposed.chatParticipantAdditions.d.ts') && (quiet || warn(`The VSCode import file '${$root}/vscode.proposed.chatParticipantAdditions.d.ts' should not be present.`)) || failing; await rm(`${$root}/vscode.proposed.chatParticipantAdditions.d.ts`); + failing = await assertAnyFile('vscode.proposed.chatParticipantAdditions.d.ts') && (quiet || warn(`The VSCode import file '${$root}/vscode.proposed.chatParticipantAdditions.d.ts' should not be present.`)) || failing; if (!failing) { verbose('VSCode proposals appear to be in place.'); From 636270ad5868ff4d7c0c554ef118f951692dbef5 Mon Sep 17 00:00:00 2001 From: Sean McManus Date: Mon, 2 Feb 2026 18:22:08 -0800 Subject: [PATCH 13/18] More reverting. --- Extension/.scripts/common.ts | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/Extension/.scripts/common.ts b/Extension/.scripts/common.ts index 908874dcd..29758c269 100644 --- a/Extension/.scripts/common.ts +++ b/Extension/.scripts/common.ts @@ -271,8 +271,10 @@ export async function assertAnyFolder(oneOrMoreFolders: string | string[], error return result; } } - if (errorMessage && !$switches.includes('--quiet')) { - error(errorMessage); + if (errorMessage) { + if (!$switches.includes('--quiet')) { + error(errorMessage); + } process.exit(1); } } @@ -286,8 +288,10 @@ export async function assertAnyFile(oneOrMoreFiles: string | string[], errorMess return result; } } - if (errorMessage && !$switches.includes('--quiet')) { - error(errorMessage); + if (errorMessage) { + if (!$switches.includes('--quiet')) { + error(errorMessage); + } process.exit(1); } } From 8f33c29aa8b500bb5e5ef4057b85677598c3922a Mon Sep 17 00:00:00 2001 From: Sean McManus Date: Tue, 3 Feb 2026 16:14:36 -0800 Subject: [PATCH 14/18] Fixes. --- Extension/.vscodeignore | 3 +- Extension/src/LanguageServer/client.ts | 180 ++++++++---------- .../src/LanguageServer/clientCollection.ts | 2 +- Extension/src/LanguageServer/extension.ts | 22 +-- .../src/LanguageServer/protocolFilter.ts | 2 +- 5 files changed, 92 insertions(+), 117 deletions(-) diff --git a/Extension/.vscodeignore b/Extension/.vscodeignore index 55474d9bf..ca69612fc 100644 --- a/Extension/.vscodeignore +++ b/Extension/.vscodeignore @@ -29,8 +29,7 @@ jobs/** cgmanifest.json # ignore development files -.eslintignore -.eslintrc.js +eslint.config.js .gitattributes .gitignore gulpfile.js diff --git a/Extension/src/LanguageServer/client.ts b/Extension/src/LanguageServer/client.ts index edb991bb0..5db52e938 100644 --- a/Extension/src/LanguageServer/client.ts +++ b/Extension/src/LanguageServer/client.ts @@ -816,25 +816,25 @@ export interface Client { didChangeActiveEditor(editor?: vscode.TextEditor, selection?: Range): Promise; restartIntelliSenseForFile(document: vscode.TextDocument): Promise; activate(): void; - selectionChanged(selection: Range): void; - resetDatabase(): void; + selectionChanged(selection: Range): Promise; + resetDatabase(): Promise; deactivate(): void; promptSelectIntelliSenseConfiguration(sender?: any): Promise; rescanCompilers(sender?: any): Promise; - pauseParsing(): void; - resumeParsing(): void; - PauseCodeAnalysis(): void; - ResumeCodeAnalysis(): void; - CancelCodeAnalysis(): void; + pauseParsing(): Promise; + resumeParsing(): Promise; + PauseCodeAnalysis(): Promise; + ResumeCodeAnalysis(): Promise; + CancelCodeAnalysis(): Promise; handleConfigurationSelectCommand(config?: string): Promise; handleConfigurationProviderSelectCommand(): Promise; handleShowActiveCodeAnalysisCommands(): Promise; handleShowIdleCodeAnalysisCommands(): Promise; - handleReferencesIcon(): void; - handleConfigurationEditCommand(viewColumn?: vscode.ViewColumn): void; - handleConfigurationEditJSONCommand(viewColumn?: vscode.ViewColumn): void; - handleConfigurationEditUICommand(viewColumn?: vscode.ViewColumn): void; - handleAddToIncludePathCommand(path: string): void; + handleReferencesIcon(): Promise; + handleConfigurationEditCommand(viewColumn?: vscode.ViewColumn): Promise; + handleConfigurationEditJSONCommand(viewColumn?: vscode.ViewColumn): Promise; + handleConfigurationEditUICommand(viewColumn?: vscode.ViewColumn): Promise; + handleAddToIncludePathCommand(path: string): Promise; handleGoToDirectiveInGroup(next: boolean): Promise; handleGenerateDoxygenComment(args: DoxygenCodeActionCommandArguments | vscode.Uri | undefined): Promise; handleRunCodeAnalysisOnActiveFile(): Promise; @@ -849,7 +849,7 @@ export interface Client { onInterval(): void; dispose(): void; addFileAssociations(fileAssociations: string, languageId: string): void; - sendDidChangeSettings(): void; + sendDidChangeSettings(): Promise; isInitialized(): boolean; getShowConfigureIntelliSenseButton(): boolean; setShowConfigureIntelliSenseButton(show: boolean): void; @@ -1779,12 +1779,10 @@ export class DefaultClient implements Client { return { wasShutdown: initializeResult.shouldShutdown }; } - public sendDidChangeSettings(): void { - // Send settings json to native side - void (async () => { - await this.ready; - await this.languageClient.sendNotification(DidChangeSettingsNotification, this.getAllSettings()); - })(); + public async sendDidChangeSettings(): Promise { + // Send settings json to native side. + await this.ready; + await this.languageClient.sendNotification(DidChangeSettingsNotification, this.getAllSettings()); } public async onDidChangeSettings(_event: vscode.ConfigurationChangeEvent): Promise> { @@ -2076,7 +2074,7 @@ export class DefaultClient implements Client { if (!hasCompleted) { hasCompleted = true; if (currentProvider.version >= Version.v2) { - this.resumeParsing(); + await this.resumeParsing(); } } } @@ -2099,7 +2097,7 @@ export class DefaultClient implements Client { if (!hasCompleted) { hasCompleted = true; if (currentProvider.version >= Version.v2) { - this.resumeParsing(); + await this.resumeParsing(); } } } @@ -2111,7 +2109,7 @@ export class DefaultClient implements Client { this.sendCustomBrowseConfiguration(null, undefined, Version.v0, true); if (currentProvider.version >= Version.v2) { console.warn(`Configuration Provider timed out in ${configProviderTimeout}ms.`); - this.resumeParsing(); + void this.resumeParsing().catch(logAndReturn.undefined); } } }, configProviderTimeout); @@ -3114,18 +3112,16 @@ export class DefaultClient implements Client { */ public activate(): void { this.model.activate(); - this.resumeParsing(); + void this.resumeParsing().catch(logAndReturn.undefined); } - public selectionChanged(selection: Range): void { - void this.languageClient.sendNotification(DidChangeTextEditorSelectionNotification, selection); + public async selectionChanged(selection: Range): Promise { + return this.languageClient.sendNotification(DidChangeTextEditorSelectionNotification, selection); } - public resetDatabase(): void { - void (async () => { - await this.ready; - await this.languageClient.sendNotification(ResetDatabaseNotification); - })(); + public async resetDatabase(): Promise { + await this.ready; + await this.languageClient.sendNotification(ResetDatabaseNotification); } /** @@ -3135,41 +3131,31 @@ export class DefaultClient implements Client { this.model.deactivate(); } - public pauseParsing(): void { - void (async () => { - await this.ready; - await this.languageClient.sendNotification(PauseParsingNotification); - })(); + public async pauseParsing(): Promise { + await this.ready; + await this.languageClient.sendNotification(PauseParsingNotification); } - public resumeParsing(): void { - void (async () => { - await this.ready; - await this.languageClient.sendNotification(ResumeParsingNotification); - })(); + public async resumeParsing(): Promise { + await this.ready; + await this.languageClient.sendNotification(ResumeParsingNotification); } - public PauseCodeAnalysis(): void { - void (async () => { - await this.ready; - this.model.isCodeAnalysisPaused.Value = true; - await this.languageClient.sendNotification(PauseCodeAnalysisNotification); - })(); + public async PauseCodeAnalysis(): Promise { + await this.ready; + this.model.isCodeAnalysisPaused.Value = true; + await this.languageClient.sendNotification(PauseCodeAnalysisNotification); } - public ResumeCodeAnalysis(): void { - void (async () => { - await this.ready; - this.model.isCodeAnalysisPaused.Value = false; - await this.languageClient.sendNotification(ResumeCodeAnalysisNotification); - })(); + public async ResumeCodeAnalysis(): Promise { + await this.ready; + this.model.isCodeAnalysisPaused.Value = false; + await this.languageClient.sendNotification(ResumeCodeAnalysisNotification); } - public CancelCodeAnalysis(): void { - void (async () => { - await this.ready; - await this.languageClient.sendNotification(CancelCodeAnalysisNotification); - })(); + public async CancelCodeAnalysis(): Promise { + await this.ready; + await this.languageClient.sendNotification(CancelCodeAnalysisNotification); } private updateCodeAnalysisProcessed(processed: number): void { @@ -3576,32 +3562,24 @@ export class DefaultClient implements Client { } } - public handleConfigurationEditCommand(viewColumn: vscode.ViewColumn = vscode.ViewColumn.Active): void { - void (async () => { - await this.ready; - await this.configuration.handleConfigurationEditCommand(undefined, vscode.window.showTextDocument, viewColumn); - })(); + public async handleConfigurationEditCommand(viewColumn: vscode.ViewColumn = vscode.ViewColumn.Active): Promise { + await this.ready; + await this.configuration.handleConfigurationEditCommand(undefined, vscode.window.showTextDocument, viewColumn); } - public handleConfigurationEditJSONCommand(viewColumn: vscode.ViewColumn = vscode.ViewColumn.Active): void { - void (async () => { - await this.ready; - await this.configuration.handleConfigurationEditJSONCommand(undefined, vscode.window.showTextDocument, viewColumn); - })(); + public async handleConfigurationEditJSONCommand(viewColumn: vscode.ViewColumn = vscode.ViewColumn.Active): Promise { + await this.ready; + await this.configuration.handleConfigurationEditJSONCommand(undefined, vscode.window.showTextDocument, viewColumn); } - public handleConfigurationEditUICommand(viewColumn: vscode.ViewColumn = vscode.ViewColumn.Active): void { - void (async () => { - await this.ready; - await this.configuration.handleConfigurationEditUICommand(undefined, vscode.window.showTextDocument, viewColumn); - })(); + public async handleConfigurationEditUICommand(viewColumn: vscode.ViewColumn = vscode.ViewColumn.Active): Promise { + await this.ready; + await this.configuration.handleConfigurationEditUICommand(undefined, vscode.window.showTextDocument, viewColumn); } - public handleAddToIncludePathCommand(path: string): void { - void (async () => { - await this.ready; - this.configuration.addToIncludePathCommand(path); - })(); + public async handleAddToIncludePathCommand(path: string): Promise { + await this.ready; + this.configuration.addToIncludePathCommand(path); } public async handleGoToDirectiveInGroup(next: boolean): Promise { @@ -4258,20 +4236,18 @@ export class DefaultClient implements Client { return languageClient ? languageClient.stop() : Promise.resolve(); } - public handleReferencesIcon(): void { - void (async () => { - await this.ready; + public async handleReferencesIcon(): Promise { + await this.ready; - workspaceReferences.UpdateProgressUICounter(this.model.referencesCommandMode.Value); + workspaceReferences.UpdateProgressUICounter(this.model.referencesCommandMode.Value); - // If the search is find all references, preview partial results. - // This will cause the language server to send partial results to display - // in the "Other References" view or channel. Doing a preview should not complete - // an in-progress request until it is finished or canceled. - if (this.ReferencesCommandMode === refs.ReferencesCommandMode.Find) { - void this.languageClient.sendNotification(PreviewReferencesNotification); - } - })(); + // If the search is find all references, preview partial results. + // This will cause the language server to send partial results to display + // in the "Other References" view or channel. Doing a preview should not complete + // an in-progress request until it is finished or canceled. + if (this.ReferencesCommandMode === refs.ReferencesCommandMode.Find) { + void this.languageClient.sendNotification(PreviewReferencesNotification); + } } private serverCanceledReferences(): void { @@ -4394,25 +4370,25 @@ class NullClient implements Client { didChangeActiveEditor(editor?: vscode.TextEditor): Promise { return Promise.resolve(); } restartIntelliSenseForFile(document: vscode.TextDocument): Promise { return Promise.resolve(); } activate(): void { } - selectionChanged(selection: Range): void { } - resetDatabase(): void { } + selectionChanged(selection: Range): Promise { return Promise.resolve(); } + resetDatabase(): Promise { return Promise.resolve(); } promptSelectIntelliSenseConfiguration(sender?: any): Promise { return Promise.resolve(); } rescanCompilers(sender?: any): Promise { return Promise.resolve(); } deactivate(): void { } - pauseParsing(): void { } - resumeParsing(): void { } - PauseCodeAnalysis(): void { } - ResumeCodeAnalysis(): void { } - CancelCodeAnalysis(): void { } + pauseParsing(): Promise { return Promise.resolve(); } + resumeParsing(): Promise { return Promise.resolve(); } + PauseCodeAnalysis(): Promise { return Promise.resolve(); } + ResumeCodeAnalysis(): Promise { return Promise.resolve(); } + CancelCodeAnalysis(): Promise { return Promise.resolve(); } handleConfigurationSelectCommand(): Promise { return Promise.resolve(); } handleConfigurationProviderSelectCommand(): Promise { return Promise.resolve(); } handleShowActiveCodeAnalysisCommands(): Promise { return Promise.resolve(); } handleShowIdleCodeAnalysisCommands(): Promise { return Promise.resolve(); } - handleReferencesIcon(): void { } - handleConfigurationEditCommand(viewColumn?: vscode.ViewColumn): void { } - handleConfigurationEditJSONCommand(viewColumn?: vscode.ViewColumn): void { } - handleConfigurationEditUICommand(viewColumn?: vscode.ViewColumn): void { } - handleAddToIncludePathCommand(path: string): void { } + handleReferencesIcon(): Promise { return Promise.resolve(); } + handleConfigurationEditCommand(viewColumn?: vscode.ViewColumn): Promise { return Promise.resolve(); } + handleConfigurationEditJSONCommand(viewColumn?: vscode.ViewColumn): Promise { return Promise.resolve(); } + handleConfigurationEditUICommand(viewColumn?: vscode.ViewColumn): Promise { return Promise.resolve(); } + handleAddToIncludePathCommand(path: string): Promise { return Promise.resolve(); } handleGoToDirectiveInGroup(next: boolean): Promise { return Promise.resolve(); } handleGenerateDoxygenComment(args: DoxygenCodeActionCommandArguments | vscode.Uri | undefined): Promise { return Promise.resolve(); } handleRunCodeAnalysisOnActiveFile(): Promise { return Promise.resolve(); } @@ -4430,7 +4406,7 @@ class NullClient implements Client { this.stringEvent.dispose(); } addFileAssociations(fileAssociations: string, languageId: string): void { } - sendDidChangeSettings(): void { } + sendDidChangeSettings(): Promise { return Promise.resolve(); } isInitialized(): boolean { return true; } getShowConfigureIntelliSenseButton(): boolean { return false; } setShowConfigureIntelliSenseButton(show: boolean): void { } diff --git a/Extension/src/LanguageServer/clientCollection.ts b/Extension/src/LanguageServer/clientCollection.ts index a6b21f431..a139b7fb8 100644 --- a/Extension/src/LanguageServer/clientCollection.ts +++ b/Extension/src/LanguageServer/clientCollection.ts @@ -177,7 +177,7 @@ export class ClientCollection { // read for new workspace folders. Send them up before creating new // clients, so the native process is already aware of all workspace // folders before receiving new CppProperties for new folders. - this.defaultClient.sendDidChangeSettings(); + await this.defaultClient.sendDidChangeSettings(); e.added.forEach(folder => { const path: string = util.asFolder(folder.uri); const client: cpptools.Client | undefined = this.languageClients.get(path); diff --git a/Extension/src/LanguageServer/extension.ts b/Extension/src/LanguageServer/extension.ts index fdb3b0e0d..1c4e5dd3a 100644 --- a/Extension/src/LanguageServer/extension.ts +++ b/Extension/src/LanguageServer/extension.ts @@ -197,8 +197,8 @@ export async function activate(): Promise { vscode.tasks.onDidStartTask(() => getActiveClient().PauseCodeAnalysis()); - vscode.tasks.onDidEndTask(event => { - getActiveClient().ResumeCodeAnalysis(); + vscode.tasks.onDidEndTask(async event => { + await getActiveClient().ResumeCodeAnalysis(); if (event.execution.task.definition.type === CppBuildTaskProvider.CppBuildScriptType || event.execution.task.name.startsWith(configPrefix)) { if (event.execution.task.scope !== vscode.TaskScope.Global && event.execution.task.scope !== vscode.TaskScope.Workspace) { @@ -353,7 +353,7 @@ function onDidChangeTextEditorSelection(event: vscode.TextEditorSelectionChangeE if (!util.isCpp(event.textEditor.document)) { return; } - clients.ActiveClient.selectionChanged(makeLspRange(event.selections[0])); + void clients.ActiveClient.selectionChanged(makeLspRange(event.selections[0])).catch(logAndReturn.undefined); } async function onDidChangeVisibleTextEditors(editors: readonly vscode.TextEditor[]): Promise { @@ -507,7 +507,7 @@ async function selectClient(): Promise { async function onResetDatabase(): Promise { await clients.ActiveClient.ready; - clients.ActiveClient.resetDatabase(); + return clients.ActiveClient.resetDatabase(); } async function onRescanCompilers(sender?: any): Promise { @@ -750,7 +750,7 @@ function onExpandSelection(r: Range) { } } -function onAddToIncludePath(path: string): void { +async function onAddToIncludePath(path: string): Promise { if (isFolderOpen()) { // This only applies to the active client. It would not make sense to add the include path // suggestion to a different workspace. @@ -777,23 +777,23 @@ function onToggleDimInactiveRegions(): void { } function onPauseParsing(): void { - clients.ActiveClient.pauseParsing(); + void clients.ActiveClient.pauseParsing().catch(logAndReturn.undefined); } function onResumeParsing(): void { - clients.ActiveClient.resumeParsing(); + void clients.ActiveClient.resumeParsing().catch(logAndReturn.undefined); } function onPauseCodeAnalysis(): void { - clients.ActiveClient.PauseCodeAnalysis(); + void clients.ActiveClient.PauseCodeAnalysis().catch(logAndReturn.undefined); } function onResumeCodeAnalysis(): void { - clients.ActiveClient.ResumeCodeAnalysis(); + void clients.ActiveClient.ResumeCodeAnalysis().catch(logAndReturn.undefined); } function onCancelCodeAnalysis(): void { - clients.ActiveClient.CancelCodeAnalysis(); + void clients.ActiveClient.CancelCodeAnalysis().catch(logAndReturn.undefined); } function onShowActiveCodeAnalysisCommands(): Promise { @@ -805,7 +805,7 @@ function onShowIdleCodeAnalysisCommands(): Promise { } function onShowReferencesProgress(): void { - clients.ActiveClient.handleReferencesIcon(); + void clients.ActiveClient.handleReferencesIcon().catch(logAndReturn.undefined); } function onToggleRefGroupView(): void { diff --git a/Extension/src/LanguageServer/protocolFilter.ts b/Extension/src/LanguageServer/protocolFilter.ts index d6462072e..9b4e4f688 100644 --- a/Extension/src/LanguageServer/protocolFilter.ts +++ b/Extension/src/LanguageServer/protocolFilter.ts @@ -36,7 +36,7 @@ export function createProtocolFilter(): Middleware { const baseFileName: string = path.basename(document.fileName); const mappingString: string = baseFileName + "@" + document.fileName; client.addFileAssociations(mappingString, "cpp"); - client.sendDidChangeSettings(); + await client.sendDidChangeSettings(); // The following will cause the file to be closed and reopened. void vscode.languages.setTextDocumentLanguage(document, "cpp"); return; From 3b3a93499f598c3bd348ecfd1bc12addb5678a10 Mon Sep 17 00:00:00 2001 From: Sean McManus Date: Tue, 3 Feb 2026 16:19:14 -0800 Subject: [PATCH 15/18] More fixes. --- Extension/src/LanguageServer/client.ts | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/Extension/src/LanguageServer/client.ts b/Extension/src/LanguageServer/client.ts index 5db52e938..2e732d426 100644 --- a/Extension/src/LanguageServer/client.ts +++ b/Extension/src/LanguageServer/client.ts @@ -3121,7 +3121,7 @@ export class DefaultClient implements Client { public async resetDatabase(): Promise { await this.ready; - await this.languageClient.sendNotification(ResetDatabaseNotification); + return this.languageClient.sendNotification(ResetDatabaseNotification); } /** @@ -3133,29 +3133,29 @@ export class DefaultClient implements Client { public async pauseParsing(): Promise { await this.ready; - await this.languageClient.sendNotification(PauseParsingNotification); + return this.languageClient.sendNotification(PauseParsingNotification); } public async resumeParsing(): Promise { await this.ready; - await this.languageClient.sendNotification(ResumeParsingNotification); + return this.languageClient.sendNotification(ResumeParsingNotification); } public async PauseCodeAnalysis(): Promise { await this.ready; this.model.isCodeAnalysisPaused.Value = true; - await this.languageClient.sendNotification(PauseCodeAnalysisNotification); + return this.languageClient.sendNotification(PauseCodeAnalysisNotification); } public async ResumeCodeAnalysis(): Promise { await this.ready; this.model.isCodeAnalysisPaused.Value = false; - await this.languageClient.sendNotification(ResumeCodeAnalysisNotification); + return this.languageClient.sendNotification(ResumeCodeAnalysisNotification); } public async CancelCodeAnalysis(): Promise { await this.ready; - await this.languageClient.sendNotification(CancelCodeAnalysisNotification); + return this.languageClient.sendNotification(CancelCodeAnalysisNotification); } private updateCodeAnalysisProcessed(processed: number): void { @@ -3564,22 +3564,22 @@ export class DefaultClient implements Client { public async handleConfigurationEditCommand(viewColumn: vscode.ViewColumn = vscode.ViewColumn.Active): Promise { await this.ready; - await this.configuration.handleConfigurationEditCommand(undefined, vscode.window.showTextDocument, viewColumn); + return this.configuration.handleConfigurationEditCommand(undefined, vscode.window.showTextDocument, viewColumn); } public async handleConfigurationEditJSONCommand(viewColumn: vscode.ViewColumn = vscode.ViewColumn.Active): Promise { await this.ready; - await this.configuration.handleConfigurationEditJSONCommand(undefined, vscode.window.showTextDocument, viewColumn); + return this.configuration.handleConfigurationEditJSONCommand(undefined, vscode.window.showTextDocument, viewColumn); } public async handleConfigurationEditUICommand(viewColumn: vscode.ViewColumn = vscode.ViewColumn.Active): Promise { await this.ready; - await this.configuration.handleConfigurationEditUICommand(undefined, vscode.window.showTextDocument, viewColumn); + return this.configuration.handleConfigurationEditUICommand(undefined, vscode.window.showTextDocument, viewColumn); } public async handleAddToIncludePathCommand(path: string): Promise { await this.ready; - this.configuration.addToIncludePathCommand(path); + return this.configuration.addToIncludePathCommand(path); } public async handleGoToDirectiveInGroup(next: boolean): Promise { From 939d3c4ef9b314c2aafa6983f15867485ce5ffb9 Mon Sep 17 00:00:00 2001 From: Sean McManus Date: Tue, 3 Feb 2026 16:36:49 -0800 Subject: [PATCH 16/18] Update. --- Extension/src/LanguageServer/cppBuildTaskProvider.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Extension/src/LanguageServer/cppBuildTaskProvider.ts b/Extension/src/LanguageServer/cppBuildTaskProvider.ts index 1ff5be87b..477990e5f 100644 --- a/Extension/src/LanguageServer/cppBuildTaskProvider.ts +++ b/Extension/src/LanguageServer/cppBuildTaskProvider.ts @@ -10,6 +10,7 @@ import { CustomExecution, Disposable, Event, EventEmitter, ProcessExecution, Pse import * as nls from 'vscode-nls'; import * as util from '../common'; import * as telemetry from '../telemetry'; +import { logAndReturn } from "../Utility/Async/returns"; import { Client } from './client'; import * as configs from './configurations'; import { getEffectiveEnvironment, isEnvironmentOverrideApplied } from "./devcmd"; @@ -386,7 +387,7 @@ class CustomBuildTaskTerminal implements Pseudoterminal { // At this point we can start using the terminal. this.writeEmitter.fire(localize("starting.build", "Starting build...") + this.endOfLine); await this.doBuild(); - })(); + })().catch(logAndReturn.undefined); } close(): void { From 0491f7ec638d1629a16250287f5e39385251f54a Mon Sep 17 00:00:00 2001 From: Sean McManus Date: Wed, 4 Feb 2026 15:05:04 -0800 Subject: [PATCH 17/18] Code review updates. --- Extension/src/LanguageServer/client.ts | 2 +- .../LanguageServer/cppBuildTaskProvider.ts | 34 ++++++++++--------- Extension/src/LanguageServer/extension.ts | 2 +- 3 files changed, 20 insertions(+), 18 deletions(-) diff --git a/Extension/src/LanguageServer/client.ts b/Extension/src/LanguageServer/client.ts index 2e732d426..1cc7e087c 100644 --- a/Extension/src/LanguageServer/client.ts +++ b/Extension/src/LanguageServer/client.ts @@ -1789,7 +1789,7 @@ export class DefaultClient implements Client { const defaultClient: Client = clients.getDefaultClient(); if (this === defaultClient) { // Only send the updated settings information once, as it includes values for all folders. - void this.sendDidChangeSettings(); + void this.sendDidChangeSettings().catch(logAndReturn.undefined); } const changedSettings: Record = this.settingsTracker.getChangedSettings(); diff --git a/Extension/src/LanguageServer/cppBuildTaskProvider.ts b/Extension/src/LanguageServer/cppBuildTaskProvider.ts index 477990e5f..e42b429c6 100644 --- a/Extension/src/LanguageServer/cppBuildTaskProvider.ts +++ b/Extension/src/LanguageServer/cppBuildTaskProvider.ts @@ -371,23 +371,25 @@ class CustomBuildTaskTerminal implements Pseudoterminal { constructor(private command: string | util.IQuotedString, private args: (string | util.IQuotedString)[], private options: cp.ExecOptions | undefined, private buildOptions: BuildOptions) { } - open(_initialDimensions: TerminalDimensions | undefined): void { - void (async () => { - if (this.buildOptions.taskUsesActiveFile && !util.isCppOrCFile(window.activeTextEditor?.document.uri)) { - this.writeEmitter.fire(localize("cannot.build.non.cpp", 'Cannot build and debug because the active file is not a C or C++ source file.') + this.endOfLine); - this.closeEmitter.fire(-1); - return; - } + async openAsync(_initialDimensions: TerminalDimensions | undefined): Promise { + if (this.buildOptions.taskUsesActiveFile && !util.isCppOrCFile(window.activeTextEditor?.document.uri)) { + this.writeEmitter.fire(localize("cannot.build.non.cpp", 'Cannot build and debug because the active file is not a C or C++ source file.') + this.endOfLine); + this.closeEmitter.fire(-1); + return; + } - // TODO: Remove when compiler query work goes in and we can determine the standard version from TypeScript - if (this.buildOptions.taskUsesActiveFile && window.activeTextEditor?.document.languageId === 'cpp' && this.buildOptions.insertStd) { - this.args.unshift('-std=gnu++14'); - } - telemetry.logLanguageServerEvent("cppBuildTaskStarted"); - // At this point we can start using the terminal. - this.writeEmitter.fire(localize("starting.build", "Starting build...") + this.endOfLine); - await this.doBuild(); - })().catch(logAndReturn.undefined); + // TODO: Remove when compiler query work goes in and we can determine the standard version from TypeScript + if (this.buildOptions.taskUsesActiveFile && window.activeTextEditor?.document.languageId === 'cpp' && this.buildOptions.insertStd) { + this.args.unshift('-std=gnu++14'); + } + telemetry.logLanguageServerEvent("cppBuildTaskStarted"); + // At this point we can start using the terminal. + this.writeEmitter.fire(localize("starting.build", "Starting build...") + this.endOfLine); + await this.doBuild(); + } + + open(_initialDimensions: TerminalDimensions | undefined): void { + void this.openAsync(_initialDimensions).catch(logAndReturn.undefined); } close(): void { diff --git a/Extension/src/LanguageServer/extension.ts b/Extension/src/LanguageServer/extension.ts index 1c4e5dd3a..2c072eff3 100644 --- a/Extension/src/LanguageServer/extension.ts +++ b/Extension/src/LanguageServer/extension.ts @@ -195,7 +195,7 @@ export async function activate(): Promise { await registerCommands(true); - vscode.tasks.onDidStartTask(() => getActiveClient().PauseCodeAnalysis()); + vscode.tasks.onDidStartTask(() => void getActiveClient().PauseCodeAnalysis().catch(logAndReturn.undefined)); vscode.tasks.onDidEndTask(async event => { await getActiveClient().ResumeCodeAnalysis(); From 2bd255e4c5af312221fc9c1e990571682dcea34b Mon Sep 17 00:00:00 2001 From: Sean McManus Date: Wed, 4 Feb 2026 17:48:01 -0800 Subject: [PATCH 18/18] Code review changes. --- Extension/src/LanguageServer/clientCollection.ts | 2 +- Extension/src/LanguageServer/protocolFilter.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Extension/src/LanguageServer/clientCollection.ts b/Extension/src/LanguageServer/clientCollection.ts index a139b7fb8..54528a827 100644 --- a/Extension/src/LanguageServer/clientCollection.ts +++ b/Extension/src/LanguageServer/clientCollection.ts @@ -177,7 +177,7 @@ export class ClientCollection { // read for new workspace folders. Send them up before creating new // clients, so the native process is already aware of all workspace // folders before receiving new CppProperties for new folders. - await this.defaultClient.sendDidChangeSettings(); + void this.defaultClient.sendDidChangeSettings(); e.added.forEach(folder => { const path: string = util.asFolder(folder.uri); const client: cpptools.Client | undefined = this.languageClients.get(path); diff --git a/Extension/src/LanguageServer/protocolFilter.ts b/Extension/src/LanguageServer/protocolFilter.ts index 9b4e4f688..5a95fc5a5 100644 --- a/Extension/src/LanguageServer/protocolFilter.ts +++ b/Extension/src/LanguageServer/protocolFilter.ts @@ -36,7 +36,7 @@ export function createProtocolFilter(): Middleware { const baseFileName: string = path.basename(document.fileName); const mappingString: string = baseFileName + "@" + document.fileName; client.addFileAssociations(mappingString, "cpp"); - await client.sendDidChangeSettings(); + void client.sendDidChangeSettings(); // The following will cause the file to be closed and reopened. void vscode.languages.setTextDocumentLanguage(document, "cpp"); return;