From fc1b547130bfcc7e592268f946f77083c01578f6 Mon Sep 17 00:00:00 2001 From: Erik De Bonte Date: Wed, 17 Apr 2024 11:46:31 -0700 Subject: [PATCH] Push pylance changes to pyright (#7719) Co-authored-by: Bill Schnurr Co-authored-by: HeeJae Chang Co-authored-by: Erik De Bonte Co-authored-by: Rich Chiodo Co-authored-by: Stella Huang Co-authored-by: Kacie Kang --- package-lock.json | 84 ++++++--- package.json | 2 - .../pyright-internal/src/analyzer/service.ts | 5 - .../src/backgroundThreadBase.ts | 8 +- .../src/commands/dumpFileDebugInfoCommand.ts | 175 ++++++++++-------- packages/pyright-internal/src/common/core.ts | 6 + .../pyright-internal/src/common/fileSystem.ts | 3 +- .../src/common/realFileSystem.ts | 4 +- .../src/tests/importStatementUtils.test.ts | 2 +- .../vscode-pyright/build/renamePackage.js | 5 +- packages/vscode-pyright/package-lock.json | 16 -- packages/vscode-pyright/package.json | 1 - 12 files changed, 169 insertions(+), 142 deletions(-) diff --git a/package-lock.json b/package-lock.json index 28d956083..a9cf78984 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,7 +13,6 @@ "@typescript-eslint/eslint-plugin": "^6.21.0", "@typescript-eslint/parser": "^6.21.0", "cross-env": "^7.0.3", - "detect-indent": "^6.1.0", "eslint": "^8.56.0", "eslint-config-prettier": "^8.10.0", "eslint-plugin-simple-import-sort": "^10.0.0", @@ -21,7 +20,6 @@ "jsonc-parser": "^3.2.1", "lerna": "^7.4.2", "npm-check-updates": "^16.14.14", - "nx": "^17.3.2", "p-queue": "^6.6.2", "prettier": "2.8.8", "syncpack": "~10.9.3", @@ -1128,6 +1126,7 @@ "resolved": "https://registry.npmjs.org/@nrwl/tao/-/tao-17.3.2.tgz", "integrity": "sha512-5uvpSmij0J9tteFV/0M/024K+H/o3XAlqtSdU8j03Auj1IleclSLF2yCTuIo7pYXhG3cgx1+nR+3nMs1QVAdUA==", "dev": true, + "peer": true, "dependencies": { "nx": "17.3.2", "tslib": "^2.3.0" @@ -1175,6 +1174,7 @@ "os": [ "darwin" ], + "peer": true, "engines": { "node": ">= 10" } @@ -1191,6 +1191,7 @@ "os": [ "darwin" ], + "peer": true, "engines": { "node": ">= 10" } @@ -1207,6 +1208,7 @@ "os": [ "freebsd" ], + "peer": true, "engines": { "node": ">= 10" } @@ -1223,6 +1225,7 @@ "os": [ "linux" ], + "peer": true, "engines": { "node": ">= 10" } @@ -1239,6 +1242,7 @@ "os": [ "linux" ], + "peer": true, "engines": { "node": ">= 10" } @@ -1255,6 +1259,7 @@ "os": [ "linux" ], + "peer": true, "engines": { "node": ">= 10" } @@ -1271,6 +1276,7 @@ "os": [ "linux" ], + "peer": true, "engines": { "node": ">= 10" } @@ -1287,6 +1293,7 @@ "os": [ "linux" ], + "peer": true, "engines": { "node": ">= 10" } @@ -1303,6 +1310,7 @@ "os": [ "win32" ], + "peer": true, "engines": { "node": ">= 10" } @@ -1319,6 +1327,7 @@ "os": [ "win32" ], + "peer": true, "engines": { "node": ">= 10" } @@ -3240,14 +3249,6 @@ "dev": true, "license": "ISC" }, - "node_modules/detect-indent": { - "version": "6.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/diff-sequences": { "version": "29.4.3", "dev": true, @@ -7192,6 +7193,7 @@ "integrity": "sha512-QjF1gnwKebQISvATrSbW7dsmIcLbA0fcyDyxLo5wVHx/MIlcaIb/lLYaPTld73ZZ6svHEZ6n2gOkhMitmkIPQA==", "dev": true, "hasInstallScript": true, + "peer": true, "dependencies": { "@nrwl/tao": "17.3.2", "@yarnpkg/lockfile": "^1.1.0", @@ -7262,6 +7264,7 @@ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, + "peer": true, "dependencies": { "balanced-match": "^1.0.0" } @@ -7271,6 +7274,7 @@ "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", "dev": true, + "peer": true, "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", @@ -7284,12 +7288,14 @@ "version": "3.2.0", "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", - "dev": true + "dev": true, + "peer": true }, "node_modules/nx/node_modules/lines-and-columns": { "version": "2.0.3", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" } @@ -7299,6 +7305,7 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", "dev": true, + "peer": true, "dependencies": { "brace-expansion": "^2.0.1" }, @@ -7314,6 +7321,7 @@ "resolved": "https://registry.npmjs.org/ora/-/ora-5.3.0.tgz", "integrity": "sha512-zAKMgGXUim0Jyd6CXK9lraBnD3H5yPGBPPOkC23a2BG6hsm4Zu6OQSjQuEtV0BHDf4aKHcUFvJiGRrFuW3MG8g==", "dev": true, + "peer": true, "dependencies": { "bl": "^4.0.3", "chalk": "^4.1.0", @@ -7335,6 +7343,7 @@ "version": "0.2.1", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "rimraf": "^3.0.0" }, @@ -7346,6 +7355,7 @@ "version": "17.7.2", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", @@ -7363,6 +7373,7 @@ "version": "21.1.1", "dev": true, "license": "ISC", + "peer": true, "engines": { "node": ">=12" } @@ -11133,6 +11144,7 @@ "resolved": "https://registry.npmjs.org/@nrwl/tao/-/tao-17.3.2.tgz", "integrity": "sha512-5uvpSmij0J9tteFV/0M/024K+H/o3XAlqtSdU8j03Auj1IleclSLF2yCTuIo7pYXhG3cgx1+nR+3nMs1QVAdUA==", "dev": true, + "peer": true, "requires": { "nx": "17.3.2", "tslib": "^2.3.0" @@ -11164,70 +11176,80 @@ "resolved": "https://registry.npmjs.org/@nx/nx-darwin-arm64/-/nx-darwin-arm64-17.3.2.tgz", "integrity": "sha512-hn12o/tt26Pf4wG+8rIBgNIEZq5BFlHLv3scNrgKbd5SancHlTbY4RveRGct737UQ/78GCMCgMDRgNdagbCr6w==", "dev": true, - "optional": true + "optional": true, + "peer": true }, "@nx/nx-darwin-x64": { "version": "17.3.2", "resolved": "https://registry.npmjs.org/@nx/nx-darwin-x64/-/nx-darwin-x64-17.3.2.tgz", "integrity": "sha512-5F28wrfE7yU60MzEXGjndy1sPJmNMIaV2W/g82kTXzxAbGHgSjwrGFmrJsrexzLp9oDlWkbc6YmInKV8gmmIaQ==", "dev": true, - "optional": true + "optional": true, + "peer": true }, "@nx/nx-freebsd-x64": { "version": "17.3.2", "resolved": "https://registry.npmjs.org/@nx/nx-freebsd-x64/-/nx-freebsd-x64-17.3.2.tgz", "integrity": "sha512-07MMTfsJooONqL1Vrm5L6qk/gzmSrYLazjkiTmJz+9mrAM61RdfSYfO3mSyAoyfgWuQ5yEvfI56P036mK8aoPg==", "dev": true, - "optional": true + "optional": true, + "peer": true }, "@nx/nx-linux-arm-gnueabihf": { "version": "17.3.2", "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-17.3.2.tgz", "integrity": "sha512-gQxMF6U/h18Rz+FZu50DZCtfOdk27hHghNh3d3YTeVsrJTd1SmUQbYublmwU/ia1HhFS8RVI8GvkaKt5ph0HoA==", "dev": true, - "optional": true + "optional": true, + "peer": true }, "@nx/nx-linux-arm64-gnu": { "version": "17.3.2", "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-17.3.2.tgz", "integrity": "sha512-X20wiXtXmKlC01bpVEREsRls1uVOM22xDTpqILvVty6+P+ytEYFR3Vs5EjDtzBKF51wjrwf03rEoToZbmgM8MA==", "dev": true, - "optional": true + "optional": true, + "peer": true }, "@nx/nx-linux-arm64-musl": { "version": "17.3.2", "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-musl/-/nx-linux-arm64-musl-17.3.2.tgz", "integrity": "sha512-yko3Xsezkn4tjeudZYLjxFl07X/YB84K+DLK7EFyh9elRWV/8VjFcQmBAKUS2r9LfaEMNXq8/vhWMOWYyWBrIA==", "dev": true, - "optional": true + "optional": true, + "peer": true }, "@nx/nx-linux-x64-gnu": { "version": "17.3.2", "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-gnu/-/nx-linux-x64-gnu-17.3.2.tgz", "integrity": "sha512-RiPvvQMmlZmDu9HdT6n6sV0+fEkyAqR5VocrD5ZAzEzFIlh4dyVLripFR3+MD+QhIhXyPt/hpri1kq9sgs4wnw==", "dev": true, - "optional": true + "optional": true, + "peer": true }, "@nx/nx-linux-x64-musl": { "version": "17.3.2", "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-musl/-/nx-linux-x64-musl-17.3.2.tgz", "integrity": "sha512-PWfVGmFsFJi+N1Nljg/jTKLHdufpGuHlxyfHqhDso/o4Qc0exZKSeZ1C63WkD7eTcT5kInifTQ/PffLiIDE3MA==", "dev": true, - "optional": true + "optional": true, + "peer": true }, "@nx/nx-win32-arm64-msvc": { "version": "17.3.2", "resolved": "https://registry.npmjs.org/@nx/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-17.3.2.tgz", "integrity": "sha512-O+4FFPbQz1mqaIj+SVE02ppe7T9ELj7Z5soQct5TbRRhwjGaw5n5xaPPBW7jUuQe2L5htid1E82LJyq3JpVc8A==", "dev": true, - "optional": true + "optional": true, + "peer": true }, "@nx/nx-win32-x64-msvc": { "version": "17.3.2", "resolved": "https://registry.npmjs.org/@nx/nx-win32-x64-msvc/-/nx-win32-x64-msvc-17.3.2.tgz", "integrity": "sha512-4hQm+7coy+hBqGY9J709hz/tUPijhf/WS7eML2r2xBmqBew3PMHfeZuaAAYWN690nIsu0WX3wyDsNjulR8HGPQ==", "dev": true, - "optional": true + "optional": true, + "peer": true }, "@octokit/auth-token": { "version": "3.0.4", @@ -12448,10 +12470,6 @@ "version": "2.3.1", "dev": true }, - "detect-indent": { - "version": "6.1.0", - "dev": true - }, "diff-sequences": { "version": "29.4.3", "dev": true @@ -15048,6 +15066,7 @@ "resolved": "https://registry.npmjs.org/nx/-/nx-17.3.2.tgz", "integrity": "sha512-QjF1gnwKebQISvATrSbW7dsmIcLbA0fcyDyxLo5wVHx/MIlcaIb/lLYaPTld73ZZ6svHEZ6n2gOkhMitmkIPQA==", "dev": true, + "peer": true, "requires": { "@nrwl/tao": "17.3.2", "@nx/nx-darwin-arm64": "17.3.2", @@ -15100,6 +15119,7 @@ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, + "peer": true, "requires": { "balanced-match": "^1.0.0" } @@ -15109,6 +15129,7 @@ "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", "dev": true, + "peer": true, "requires": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", @@ -15119,17 +15140,20 @@ "version": "3.2.0", "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", - "dev": true + "dev": true, + "peer": true }, "lines-and-columns": { "version": "2.0.3", - "dev": true + "dev": true, + "peer": true }, "minimatch": { "version": "9.0.3", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", "dev": true, + "peer": true, "requires": { "brace-expansion": "^2.0.1" } @@ -15139,6 +15163,7 @@ "resolved": "https://registry.npmjs.org/ora/-/ora-5.3.0.tgz", "integrity": "sha512-zAKMgGXUim0Jyd6CXK9lraBnD3H5yPGBPPOkC23a2BG6hsm4Zu6OQSjQuEtV0BHDf4aKHcUFvJiGRrFuW3MG8g==", "dev": true, + "peer": true, "requires": { "bl": "^4.0.3", "chalk": "^4.1.0", @@ -15153,6 +15178,7 @@ "tmp": { "version": "0.2.1", "dev": true, + "peer": true, "requires": { "rimraf": "^3.0.0" } @@ -15160,6 +15186,7 @@ "yargs": { "version": "17.7.2", "dev": true, + "peer": true, "requires": { "cliui": "^8.0.1", "escalade": "^3.1.1", @@ -15172,7 +15199,8 @@ }, "yargs-parser": { "version": "21.1.1", - "dev": true + "dev": true, + "peer": true } } }, diff --git a/package.json b/package.json index b90e7791b..54975da1d 100644 --- a/package.json +++ b/package.json @@ -27,7 +27,6 @@ "@typescript-eslint/eslint-plugin": "^6.21.0", "@typescript-eslint/parser": "^6.21.0", "cross-env": "^7.0.3", - "detect-indent": "^6.1.0", "eslint": "^8.56.0", "eslint-config-prettier": "^8.10.0", "eslint-plugin-simple-import-sort": "^10.0.0", @@ -35,7 +34,6 @@ "jsonc-parser": "^3.2.1", "lerna": "^7.4.2", "npm-check-updates": "^16.14.14", - "nx": "^17.3.2", "p-queue": "^6.6.2", "prettier": "2.8.8", "syncpack": "~10.9.3", diff --git a/packages/pyright-internal/src/analyzer/service.ts b/packages/pyright-internal/src/analyzer/service.ts index 930c620a4..5be451de1 100644 --- a/packages/pyright-internal/src/analyzer/service.ts +++ b/packages/pyright-internal/src/analyzer/service.ts @@ -53,7 +53,6 @@ import { ImportResolver, ImportResolverFactory, createImportedModuleDescriptor } import { MaxAnalysisTime, Program } from './program'; import { findPythonSearchPaths } from './pythonPathUtils'; import { IPythonMode } from './sourceFile'; -import { TypeEvaluator } from './typeEvaluatorTypes'; export const configFileNames = ['pyrightconfig.json']; export const pyprojectTomlName = 'pyproject.toml'; @@ -368,10 +367,6 @@ export class AnalyzerService { return this._program.getTextOnRange(fileUri, range, token); } - getEvaluator(): TypeEvaluator | undefined { - return this._program.evaluator; - } - run(callback: (p: ProgramView) => T, token: CancellationToken): T { return this._program.run(callback, token); } diff --git a/packages/pyright-internal/src/backgroundThreadBase.ts b/packages/pyright-internal/src/backgroundThreadBase.ts index 5e3978266..b4ae22d25 100644 --- a/packages/pyright-internal/src/backgroundThreadBase.ts +++ b/packages/pyright-internal/src/backgroundThreadBase.ts @@ -12,7 +12,7 @@ import { CacheManager } from './analyzer/cacheManager'; import { OperationCanceledException, setCancellationFolderName } from './common/cancellationUtils'; import { ConfigOptions } from './common/configOptions'; import { ConsoleInterface, LogLevel } from './common/console'; -import { isThenable } from './common/core'; +import { Disposable, isThenable } from './common/core'; import * as debug from './common/debug'; import { PythonVersion } from './common/pythonVersion'; import { createFromRealFileSystem, RealTempFile } from './common/realFileSystem'; @@ -101,7 +101,11 @@ export class BackgroundThreadBase { } protected handleShutdown() { - this._serviceProvider.tryGet(ServiceKeys.tempFile)?.dispose(); + const tempFile = this._serviceProvider.tryGet(ServiceKeys.tempFile); + if (Disposable.is(tempFile)) { + tempFile.dispose(); + } + parentPort?.close(); } } diff --git a/packages/pyright-internal/src/commands/dumpFileDebugInfoCommand.ts b/packages/pyright-internal/src/commands/dumpFileDebugInfoCommand.ts index c223c544f..6c3b0f3a6 100644 --- a/packages/pyright-internal/src/commands/dumpFileDebugInfoCommand.ts +++ b/packages/pyright-internal/src/commands/dumpFileDebugInfoCommand.ts @@ -122,6 +122,7 @@ import { import { ParseFileResults } from '../parser/parser'; import { KeywordType, NewLineType, OperatorType, StringTokenFlags, Token, TokenType } from '../parser/tokenizerTypes'; import { ServerCommand } from './commandController'; +import { Workspace } from '../workspaceFactory'; export class DumpFileDebugInfoCommand implements ServerCommand { constructor(private _ls: LanguageServerInterface) {} @@ -134,99 +135,111 @@ export class DumpFileDebugInfoCommand implements ServerCommand { } const fileUri = Uri.parse(params.arguments[0] as string, this._ls.serviceProvider); - const kind = params.arguments[1]; - const workspace = await this._ls.getWorkspaceForFile(fileUri); - const parseResults = workspace.service.getParseResults(workspace.service.fs.realCasePath(fileUri)); - if (!parseResults) { - return []; - } - const output: string[] = []; - const collectingConsole = { - info: (m: string) => { - output.push(m); - }, - log: (m: string) => { - output.push(m); - }, - error: (m: string) => { - output.push(m); - }, - warn: (m: string) => { - output.push(m); - }, - }; + return new DumpFileDebugInfo().dump(workspace, fileUri, params.arguments, token); + } +} - collectingConsole.info(`* Dump debug info for '${fileUri.toUserVisibleString()}'`); +export class DumpFileDebugInfo { + dump(workspace: Workspace, fileUri: Uri, args: any[], token: CancellationToken) { + return workspace.service.run((p) => { + const kind = args[1]; - switch (kind) { - case 'tokens': { - collectingConsole.info(`* Token info (${parseResults.tokenizerOutput.tokens.count} tokens)`); + const parseResults = workspace.service.getParseResults(workspace.service.fs.realCasePath(fileUri)); + if (!parseResults) { + return []; + } - for (let i = 0; i < parseResults.tokenizerOutput.tokens.count; i++) { - const token = parseResults.tokenizerOutput.tokens.getItemAt(i); + const output: string[] = []; + const collectingConsole = { + info: (m: string) => { + output.push(m); + }, + log: (m: string) => { + output.push(m); + }, + error: (m: string) => { + output.push(m); + }, + warn: (m: string) => { + output.push(m); + }, + }; + + collectingConsole.info(`* Dump debug info for '${fileUri.toUserVisibleString()}'`); + + switch (kind) { + case 'tokens': { + collectingConsole.info(`* Token info (${parseResults.tokenizerOutput.tokens.count} tokens)`); + + for (let i = 0; i < parseResults.tokenizerOutput.tokens.count; i++) { + const token = parseResults.tokenizerOutput.tokens.getItemAt(i); + collectingConsole.info( + `[${i}] ${getTokenString(fileUri, token, parseResults.tokenizerOutput.lines)}` + ); + } + break; + } + case 'nodes': { + collectingConsole.info(`* Node info`); + + const dumper = new TreeDumper(fileUri, parseResults.tokenizerOutput.lines); + dumper.walk(parseResults.parserOutput.parseTree); + + collectingConsole.info(dumper.output); + break; + } + case 'types': { + const evaluator = p.evaluator; + const start = args[2] as number; + const end = args[3] as number; + if (!evaluator || !start || !end) { + return []; + } + + collectingConsole.info(`* Type info`); + collectingConsole.info(`${getTypeEvaluatorString(fileUri, evaluator, parseResults, start, end)}`); + break; + } + case 'cachedtypes': { + const evaluator = p.evaluator; + const start = args[2] as number; + const end = args[3] as number; + if (!evaluator || !start || !end) { + return []; + } + + collectingConsole.info(`* Cached Type info`); collectingConsole.info( - `[${i}] ${getTokenString(fileUri, token, parseResults.tokenizerOutput.lines)}` + `${getTypeEvaluatorString(fileUri, evaluator, parseResults, start, end, true)}` ); - } - break; - } - case 'nodes': { - collectingConsole.info(`* Node info`); - - const dumper = new TreeDumper(fileUri, parseResults.tokenizerOutput.lines); - dumper.walk(parseResults.parserOutput.parseTree); - - collectingConsole.info(dumper.output); - break; - } - case 'types': { - const evaluator = workspace.service.getEvaluator(); - const start = params.arguments[2] as number; - const end = params.arguments[3] as number; - if (!evaluator || !start || !end) { - return []; + break; } - collectingConsole.info(`* Type info`); - collectingConsole.info(`${getTypeEvaluatorString(fileUri, evaluator, parseResults, start, end)}`); - break; - } - case 'cachedtypes': { - const evaluator = workspace.service.getEvaluator(); - const start = params.arguments[2] as number; - const end = params.arguments[3] as number; - if (!evaluator || !start || !end) { - return []; + case 'codeflowgraph': { + const evaluator = p.evaluator; + const offset = args[2] as number; + if (!evaluator || offset === undefined) { + return []; + } + const node = findNodeByOffset(parseResults.parserOutput.parseTree, offset); + if (!node) { + return []; + } + const flowNode = getFlowNode(node); + if (!flowNode) { + return []; + } + collectingConsole.info(`* CodeFlow Graph`); + evaluator.printControlFlowGraph(flowNode, undefined, 'Dump CodeFlowGraph', collectingConsole); } - - collectingConsole.info(`* Cached Type info`); - collectingConsole.info(`${getTypeEvaluatorString(fileUri, evaluator, parseResults, start, end, true)}`); - break; } - case 'codeflowgraph': { - const evaluator = workspace.service.getEvaluator(); - const offset = params.arguments[2] as number; - if (!evaluator || offset === undefined) { - return []; - } - const node = findNodeByOffset(parseResults.parserOutput.parseTree, offset); - if (!node) { - return []; - } - const flowNode = getFlowNode(node); - if (!flowNode) { - return []; - } - collectingConsole.info(`* CodeFlow Graph`); - evaluator.printControlFlowGraph(flowNode, undefined, 'Dump CodeFlowGraph', collectingConsole); - } - } - - // Print all of the output in one message so the trace log is smaller. - this._ls.console.info(output.join('\n')); + // Print all of the output in one message so the trace log is smaller. + workspace.service.serviceProvider.console().info(output.join('\n')); + return []; + }, token); } } diff --git a/packages/pyright-internal/src/common/core.ts b/packages/pyright-internal/src/common/core.ts index dfb2f06ea..c82d31cc4 100644 --- a/packages/pyright-internal/src/common/core.ts +++ b/packages/pyright-internal/src/common/core.ts @@ -183,3 +183,9 @@ export function containsOnlyWhitespace(text: string, span?: TextRange) { return /^\s*$/.test(text); } + +export namespace Disposable { + export function is(value: any): value is { dispose(): void } { + return value && typeof value.dispose === 'function'; + } +} diff --git a/packages/pyright-internal/src/common/fileSystem.ts b/packages/pyright-internal/src/common/fileSystem.ts index 7169683fa..fd63212a3 100644 --- a/packages/pyright-internal/src/common/fileSystem.ts +++ b/packages/pyright-internal/src/common/fileSystem.ts @@ -85,7 +85,6 @@ export interface TempFile { // The directory returned by tmpdir must exist and be the same each time tmpdir is called. tmpdir(): Uri; tmpfile(options?: TmpfileOptions): Uri; - dispose(): void; } export namespace FileSystem { @@ -96,7 +95,7 @@ export namespace FileSystem { export namespace TempFile { export function is(value: any): value is TempFile { - return value.tmpdir && value.tmpfile && value.dispose; + return value.tmpdir && value.tmpfile; } } diff --git a/packages/pyright-internal/src/common/realFileSystem.ts b/packages/pyright-internal/src/common/realFileSystem.ts index 7ac3285d6..0f4ea4d63 100644 --- a/packages/pyright-internal/src/common/realFileSystem.ts +++ b/packages/pyright-internal/src/common/realFileSystem.ts @@ -215,7 +215,9 @@ class YarnFS extends PosixFS { const yarnFS = new YarnFS(); -class RealFileSystem implements FileSystem { +// Use `createFromRealFileSystem` instead of `new RealFileSystem` +// unless you are creating a new file system that inherits from `RealFileSystem` +export class RealFileSystem implements FileSystem { constructor( private readonly _caseSensitiveDectector: CaseSensitivityDetector, private readonly _console: ConsoleInterface, diff --git a/packages/pyright-internal/src/tests/importStatementUtils.test.ts b/packages/pyright-internal/src/tests/importStatementUtils.test.ts index 2965f178a..342151b52 100644 --- a/packages/pyright-internal/src/tests/importStatementUtils.test.ts +++ b/packages/pyright-internal/src/tests/importStatementUtils.test.ts @@ -489,7 +489,7 @@ test('resolve alias of not needed file', () => { const state = parseAndGetTestState(code).state; const marker = state.getMarkerByName('marker')!; - const evaluator = state.workspace.service.getEvaluator()!; + const evaluator = state.workspace.service.test_program.evaluator!; state.openFile(marker.fileName); const markerUri = marker.fileUri; diff --git a/packages/vscode-pyright/build/renamePackage.js b/packages/vscode-pyright/build/renamePackage.js index 57642554a..f3f791ea2 100644 --- a/packages/vscode-pyright/build/renamePackage.js +++ b/packages/vscode-pyright/build/renamePackage.js @@ -2,7 +2,6 @@ //@ts-check const { promises: fsAsync } = require('fs'); -const detectIndent = require('detect-indent'); /** * @param {string} filepath @@ -10,12 +9,12 @@ const detectIndent = require('detect-indent'); */ async function modifyJsonInPlace(filepath, modifier) { const input = await fsAsync.readFile(filepath, 'utf-8'); - const indent = detectIndent(input); const obj = JSON.parse(input); modifier(obj); - let output = JSON.stringify(obj, null, indent.indent); + // Always 4 spaces for indent. + let output = JSON.stringify(obj, null, 4); if (input.endsWith('\n')) { output += '\n'; diff --git a/packages/vscode-pyright/package-lock.json b/packages/vscode-pyright/package-lock.json index 679df412c..abf408409 100644 --- a/packages/vscode-pyright/package-lock.json +++ b/packages/vscode-pyright/package-lock.json @@ -18,7 +18,6 @@ "@types/node": "^17.0.45", "@types/vscode": "^1.82.0", "copy-webpack-plugin": "^11.0.0", - "detect-indent": "^6.1.0", "esbuild-loader": "^3.2.0", "shx": "^0.3.4", "ts-loader": "^9.5.1", @@ -1301,15 +1300,6 @@ "node": ">=4.0.0" } }, - "node_modules/detect-indent": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz", - "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/detect-libc": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.1.tgz", @@ -4589,12 +4579,6 @@ "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", "dev": true }, - "detect-indent": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz", - "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==", - "dev": true - }, "detect-libc": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.1.tgz", diff --git a/packages/vscode-pyright/package.json b/packages/vscode-pyright/package.json index 8a15f6c28..a3fcbee54 100644 --- a/packages/vscode-pyright/package.json +++ b/packages/vscode-pyright/package.json @@ -1585,7 +1585,6 @@ "@types/node": "^17.0.45", "@types/vscode": "^1.82.0", "copy-webpack-plugin": "^11.0.0", - "detect-indent": "^6.1.0", "esbuild-loader": "^3.2.0", "shx": "^0.3.4", "ts-loader": "^9.5.1",