@zzzen/pyright-internal 1.2.0-dev.20230305 → 1.2.0-dev.20230319
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/analyzer/backgroundAnalysisProgram.d.ts +1 -1
- package/dist/analyzer/backgroundAnalysisProgram.js +1 -1
- package/dist/analyzer/backgroundAnalysisProgram.js.map +1 -1
- package/dist/analyzer/binder.js +23 -3
- package/dist/analyzer/binder.js.map +1 -1
- package/dist/analyzer/cacheManager.d.ts +4 -0
- package/dist/analyzer/cacheManager.js +13 -0
- package/dist/analyzer/cacheManager.js.map +1 -1
- package/dist/analyzer/checker.d.ts +2 -1
- package/dist/analyzer/checker.js +73 -29
- package/dist/analyzer/checker.js.map +1 -1
- package/dist/analyzer/codeFlowEngine.js +17 -11
- package/dist/analyzer/codeFlowEngine.js.map +1 -1
- package/dist/analyzer/commentUtils.js +11 -1
- package/dist/analyzer/commentUtils.js.map +1 -1
- package/dist/analyzer/constructorTransform.d.ts +1 -0
- package/dist/analyzer/constructorTransform.js +19 -2
- package/dist/analyzer/constructorTransform.js.map +1 -1
- package/dist/analyzer/packageTypeVerifier.js +40 -40
- package/dist/analyzer/packageTypeVerifier.js.map +1 -1
- package/dist/analyzer/patternMatching.js +13 -11
- package/dist/analyzer/patternMatching.js.map +1 -1
- package/dist/analyzer/program.d.ts +1 -1
- package/dist/analyzer/program.js +21 -19
- package/dist/analyzer/program.js.map +1 -1
- package/dist/analyzer/properties.js +0 -1
- package/dist/analyzer/properties.js.map +1 -1
- package/dist/analyzer/service.d.ts +2 -1
- package/dist/analyzer/service.js +9 -3
- package/dist/analyzer/service.js.map +1 -1
- package/dist/analyzer/sourceFile.d.ts +2 -2
- package/dist/analyzer/sourceFile.js +14 -3
- package/dist/analyzer/sourceFile.js.map +1 -1
- package/dist/analyzer/sourceFileInfoUtils.d.ts +1 -0
- package/dist/analyzer/sourceFileInfoUtils.js +17 -1
- package/dist/analyzer/sourceFileInfoUtils.js.map +1 -1
- package/dist/analyzer/typeEvaluator.js +195 -87
- package/dist/analyzer/typeEvaluator.js.map +1 -1
- package/dist/analyzer/typeEvaluatorTypes.d.ts +1 -2
- package/dist/analyzer/typeEvaluatorTypes.js +0 -3
- package/dist/analyzer/typeEvaluatorTypes.js.map +1 -1
- package/dist/analyzer/typePrinter.js +63 -55
- package/dist/analyzer/typePrinter.js.map +1 -1
- package/dist/analyzer/typeStubWriter.js +2 -0
- package/dist/analyzer/typeStubWriter.js.map +1 -1
- package/dist/analyzer/typeUtils.d.ts +1 -0
- package/dist/analyzer/typeUtils.js +29 -3
- package/dist/analyzer/typeUtils.js.map +1 -1
- package/dist/analyzer/typedDicts.d.ts +2 -1
- package/dist/analyzer/typedDicts.js +84 -40
- package/dist/analyzer/typedDicts.js.map +1 -1
- package/dist/analyzer/types.d.ts +5 -1
- package/dist/analyzer/types.js +11 -1
- package/dist/analyzer/types.js.map +1 -1
- package/dist/commands/dumpFileDebugInfoCommand.js +82 -4
- package/dist/commands/dumpFileDebugInfoCommand.js.map +1 -1
- package/dist/commands/quickActionCommand.js +2 -2
- package/dist/commands/quickActionCommand.js.map +1 -1
- package/dist/common/configOptions.d.ts +1 -0
- package/dist/common/configOptions.js +4 -0
- package/dist/common/configOptions.js.map +1 -1
- package/dist/common/console.d.ts +1 -0
- package/dist/common/console.js +19 -1
- package/dist/common/console.js.map +1 -1
- package/dist/common/diagnosticRules.d.ts +2 -1
- package/dist/common/diagnosticRules.js +1 -0
- package/dist/common/diagnosticRules.js.map +1 -1
- package/dist/common/extensibility.d.ts +2 -2
- package/dist/common/extensibility.js +25 -1
- package/dist/common/extensibility.js.map +1 -1
- package/dist/common/extensions.js +3 -1
- package/dist/common/extensions.js.map +1 -1
- package/dist/languageServerBase.d.ts +21 -46
- package/dist/languageServerBase.js +112 -152
- package/dist/languageServerBase.js.map +1 -1
- package/dist/languageService/analyzerServiceExecutor.d.ts +4 -3
- package/dist/languageService/analyzerServiceExecutor.js +9 -7
- package/dist/languageService/analyzerServiceExecutor.js.map +1 -1
- package/dist/languageService/codeActionProvider.d.ts +2 -2
- package/dist/languageService/codeActionProvider.js +4 -4
- package/dist/languageService/codeActionProvider.js.map +1 -1
- package/dist/languageService/completionProvider.d.ts +4 -2
- package/dist/languageService/completionProvider.js +209 -156
- package/dist/languageService/completionProvider.js.map +1 -1
- package/dist/languageService/definitionProvider.js +1 -1
- package/dist/languageService/definitionProvider.js.map +1 -1
- package/dist/languageService/documentSymbolCollector.d.ts +2 -1
- package/dist/languageService/documentSymbolCollector.js +23 -2
- package/dist/languageService/documentSymbolCollector.js.map +1 -1
- package/dist/languageService/hoverProvider.d.ts +2 -1
- package/dist/languageService/hoverProvider.js +21 -5
- package/dist/languageService/hoverProvider.js.map +1 -1
- package/dist/languageService/referencesProvider.d.ts +3 -2
- package/dist/languageService/referencesProvider.js +4 -4
- package/dist/languageService/referencesProvider.js.map +1 -1
- package/dist/languageService/renameModuleProvider.d.ts +1 -1
- package/dist/languageService/renameModuleProvider.js +8 -1
- package/dist/languageService/renameModuleProvider.js.map +1 -1
- package/dist/languageService/tooltipUtils.js +2 -1
- package/dist/languageService/tooltipUtils.js.map +1 -1
- package/dist/localization/localize.d.ts +17 -6
- package/dist/localization/localize.js +6 -4
- package/dist/localization/localize.js.map +1 -1
- package/dist/localization/package.nls.en-us.json +8 -6
- package/dist/parser/parser.js +24 -7
- package/dist/parser/parser.js.map +1 -1
- package/dist/parser/tokenizer.js +1 -1
- package/dist/server.d.ts +3 -2
- package/dist/server.js +1 -4
- package/dist/server.js.map +1 -1
- package/dist/tests/cacheManager.test.d.ts +1 -0
- package/dist/tests/cacheManager.test.js +69 -0
- package/dist/tests/cacheManager.test.js.map +1 -0
- package/dist/tests/checker.test.js +2 -2
- package/dist/tests/completions.test.js +445 -0
- package/dist/tests/completions.test.js.map +1 -1
- package/dist/tests/fourslash/completions.dictionary.keys.expression.fourslash.js +13 -3
- package/dist/tests/fourslash/completions.dictionary.keys.expression.fourslash.js.map +1 -1
- package/dist/tests/fourslash/completions.dictionary.keys.stringLiterals.fourslash.js +7 -2
- package/dist/tests/fourslash/completions.dictionary.keys.stringLiterals.fourslash.js.map +1 -1
- package/dist/tests/fourslash/missingTypeStub.command.trycatchImport.fourslash.d.ts +7 -0
- package/dist/tests/fourslash/missingTypeStub.command.trycatchImport.fourslash.js +45 -0
- package/dist/tests/fourslash/missingTypeStub.command.trycatchImport.fourslash.js.map +1 -0
- package/dist/tests/harness/fourslash/testLanguageService.d.ts +7 -6
- package/dist/tests/harness/fourslash/testLanguageService.js +14 -13
- package/dist/tests/harness/fourslash/testLanguageService.js.map +1 -1
- package/dist/tests/harness/fourslash/testState.d.ts +5 -4
- package/dist/tests/harness/fourslash/testState.js +14 -13
- package/dist/tests/harness/fourslash/testState.js.map +1 -1
- package/dist/tests/hoverProvider.test.js +1 -1
- package/dist/tests/hoverProvider.test.js.map +1 -1
- package/dist/tests/moveSymbol.misc.test.js +27 -0
- package/dist/tests/moveSymbol.misc.test.js.map +1 -1
- package/dist/tests/service.test.js +4 -4
- package/dist/tests/service.test.js.map +1 -1
- package/dist/tests/signatureHelp.test.js +2 -2
- package/dist/tests/signatureHelp.test.js.map +1 -1
- package/dist/tests/sourceFile.test.js +3 -3
- package/dist/tests/sourceFile.test.js.map +1 -1
- package/dist/tests/typeEvaluator1.test.js +4 -0
- package/dist/tests/typeEvaluator1.test.js.map +1 -1
- package/dist/tests/typeEvaluator2.test.js +6 -2
- package/dist/tests/typeEvaluator2.test.js.map +1 -1
- package/dist/tests/typeEvaluator3.test.js +1 -1
- package/dist/tests/typeEvaluator4.test.js +5 -1
- package/dist/tests/typeEvaluator4.test.js.map +1 -1
- package/dist/tests/typeEvaluator5.test.js +12 -0
- package/dist/tests/typeEvaluator5.test.js.map +1 -1
- package/dist/tests/workspaceEditUtils.test.js +2 -2
- package/dist/tests/workspaceEditUtils.test.js.map +1 -1
- package/dist/workspaceFactory.d.ts +72 -0
- package/dist/workspaceFactory.js +421 -0
- package/dist/workspaceFactory.js.map +1 -0
- package/package.json +4 -4
- package/dist/workspaceMap.d.ts +0 -14
- package/dist/workspaceMap.js +0 -172
- package/dist/workspaceMap.js.map +0 -1
package/dist/parser/tokenizer.js
CHANGED
@@ -633,7 +633,7 @@ class Tokenizer {
|
|
633
633
|
if (!isNaN(intValue)) {
|
634
634
|
const bigIntValue = BigInt(simpleIntText);
|
635
635
|
if (!isFinite(intValue) ||
|
636
|
-
intValue < Number.
|
636
|
+
intValue < Number.MIN_SAFE_INTEGER ||
|
637
637
|
intValue > Number.MAX_SAFE_INTEGER) {
|
638
638
|
intValue = bigIntValue;
|
639
639
|
}
|
package/dist/server.d.ts
CHANGED
@@ -6,11 +6,12 @@ import { FileSystem } from './common/fileSystem';
|
|
6
6
|
import { FullAccessHost } from './common/fullAccessHost';
|
7
7
|
import { Host } from './common/host';
|
8
8
|
import { ProgressReporter } from './common/progressReporter';
|
9
|
-
import { LanguageServerBase, ServerSettings
|
9
|
+
import { LanguageServerBase, ServerSettings } from './languageServerBase';
|
10
|
+
import { Workspace } from './workspaceFactory';
|
10
11
|
export declare class PyrightServer extends LanguageServerBase {
|
11
12
|
private _controller;
|
12
13
|
constructor(connection: Connection);
|
13
|
-
getSettings(workspace:
|
14
|
+
getSettings(workspace: Workspace): Promise<ServerSettings>;
|
14
15
|
createBackgroundAnalysis(serviceId: string): BackgroundAnalysisBase | undefined;
|
15
16
|
protected createHost(): FullAccessHost;
|
16
17
|
protected createImportResolver(fs: FileSystem, options: ConfigOptions, host: Host): ImportResolver;
|
package/dist/server.js
CHANGED
@@ -22,7 +22,6 @@ const pathUtils_1 = require("./common/pathUtils");
|
|
22
22
|
const realFileSystem_1 = require("./common/realFileSystem");
|
23
23
|
const languageServerBase_1 = require("./languageServerBase");
|
24
24
|
const codeActionProvider_1 = require("./languageService/codeActionProvider");
|
25
|
-
const workspaceMap_1 = require("./workspaceMap");
|
26
25
|
const maxAnalysisTimeInForeground = { openFilesTimeInMs: 50, noOpenFilesTimeInMs: 200 };
|
27
26
|
class PyrightServer extends languageServerBase_1.LanguageServerBase {
|
28
27
|
constructor(connection) {
|
@@ -33,14 +32,12 @@ class PyrightServer extends languageServerBase_1.LanguageServerBase {
|
|
33
32
|
// be __dirname.
|
34
33
|
const rootDirectory = global.__rootDirectory || __dirname;
|
35
34
|
const console = new console_1.ConsoleWithLogLevel(connection.console);
|
36
|
-
const workspaceMap = new workspaceMap_1.WorkspaceMap();
|
37
35
|
const fileWatcherProvider = new realFileSystem_1.WorkspaceFileWatcherProvider();
|
38
36
|
const fileSystem = (0, realFileSystem_1.createFromRealFileSystem)(console, fileWatcherProvider);
|
39
37
|
super({
|
40
38
|
productName: 'Pyright',
|
41
39
|
rootDirectory,
|
42
40
|
version,
|
43
|
-
workspaceMap,
|
44
41
|
fileSystem,
|
45
42
|
fileWatcherHandler: fileWatcherProvider,
|
46
43
|
cancellationProvider: new fileBasedCancellationUtils_1.FileBasedCancellationProvider('bg'),
|
@@ -108,7 +105,7 @@ class PyrightServer extends languageServerBase_1.LanguageServerBase {
|
|
108
105
|
if (pythonAnalysisSection.useLibraryCodeForTypes !== undefined) {
|
109
106
|
serverSettings.useLibraryCodeForTypes = !!pythonAnalysisSection.useLibraryCodeForTypes;
|
110
107
|
}
|
111
|
-
serverSettings.logLevel =
|
108
|
+
serverSettings.logLevel = (0, console_1.convertLogLevel)(pythonAnalysisSection.logLevel);
|
112
109
|
serverSettings.autoSearchPaths = !!pythonAnalysisSection.autoSearchPaths;
|
113
110
|
const extraPaths = pythonAnalysisSection.extraPaths;
|
114
111
|
if (extraPaths && Array.isArray(extraPaths) && extraPaths.length > 0) {
|
package/dist/server.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/server.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AAEH,iEAS+B;AAG/B,8DAA2D;AAC3D,gEAA4D;AAC5D,6DAA0D;AAE1D,oEAAiE;AACjE,kEAAuE;AACvE,0DAA6E;AAC7E,
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/server.ts"],"names":[],"mappings":"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"}
|
@@ -0,0 +1 @@
|
|
1
|
+
export {};
|
@@ -0,0 +1,69 @@
|
|
1
|
+
"use strict";
|
2
|
+
/*
|
3
|
+
* cacheManager.test.ts
|
4
|
+
* Copyright (c) Microsoft Corporation.
|
5
|
+
* Licensed under the MIT license.
|
6
|
+
*
|
7
|
+
* Unit tests for cache manager
|
8
|
+
*/
|
9
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
10
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
11
|
+
};
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
13
|
+
const assert_1 = __importDefault(require("assert"));
|
14
|
+
const cacheManager_1 = require("../analyzer/cacheManager");
|
15
|
+
test('basic', () => {
|
16
|
+
const manager = new cacheManager_1.CacheManager();
|
17
|
+
const mock = new MockCacheOwner(10);
|
18
|
+
manager.registerCacheOwner(mock);
|
19
|
+
assert_1.default.strictEqual(manager.getCacheUsage(), 10);
|
20
|
+
manager.unregisterCacheOwner(mock);
|
21
|
+
assert_1.default.strictEqual(manager.getCacheUsage(), 0);
|
22
|
+
});
|
23
|
+
test('nested stopTracking', () => {
|
24
|
+
const manager = new cacheManager_1.CacheManager();
|
25
|
+
const mock = new MockCacheOwner(10);
|
26
|
+
manager.registerCacheOwner(mock);
|
27
|
+
assert_1.default.strictEqual(manager.getCacheUsage(), 10);
|
28
|
+
const handle1 = manager.pauseTracking();
|
29
|
+
assert_1.default.strictEqual(manager.getCacheUsage(), -1);
|
30
|
+
// nested
|
31
|
+
const handle2 = manager.pauseTracking();
|
32
|
+
assert_1.default.strictEqual(manager.getCacheUsage(), -1);
|
33
|
+
handle2.dispose();
|
34
|
+
assert_1.default.strictEqual(manager.getCacheUsage(), -1);
|
35
|
+
handle1.dispose();
|
36
|
+
assert_1.default.strictEqual(manager.getCacheUsage(), 10);
|
37
|
+
manager.unregisterCacheOwner(mock);
|
38
|
+
assert_1.default.strictEqual(manager.getCacheUsage(), 0);
|
39
|
+
});
|
40
|
+
test('multiple owners', () => {
|
41
|
+
const manager = new cacheManager_1.CacheManager();
|
42
|
+
const mock1 = new MockCacheOwner(10);
|
43
|
+
const mock2 = new MockCacheOwner(20);
|
44
|
+
manager.registerCacheOwner(mock1);
|
45
|
+
assert_1.default.strictEqual(manager.getCacheUsage(), 10);
|
46
|
+
manager.registerCacheOwner(mock2);
|
47
|
+
assert_1.default.strictEqual(manager.getCacheUsage(), 30);
|
48
|
+
const handle = manager.pauseTracking();
|
49
|
+
assert_1.default.strictEqual(manager.getCacheUsage(), -1);
|
50
|
+
manager.unregisterCacheOwner(mock1);
|
51
|
+
assert_1.default.strictEqual(manager.getCacheUsage(), -1);
|
52
|
+
handle.dispose();
|
53
|
+
assert_1.default.strictEqual(manager.getCacheUsage(), 20);
|
54
|
+
manager.unregisterCacheOwner(mock2);
|
55
|
+
assert_1.default.strictEqual(manager.getCacheUsage(), 0);
|
56
|
+
});
|
57
|
+
class MockCacheOwner {
|
58
|
+
constructor(_used) {
|
59
|
+
this._used = _used;
|
60
|
+
// empty
|
61
|
+
}
|
62
|
+
getCacheUsage() {
|
63
|
+
return this._used;
|
64
|
+
}
|
65
|
+
emptyCache() {
|
66
|
+
this._used = 0;
|
67
|
+
}
|
68
|
+
}
|
69
|
+
//# sourceMappingURL=cacheManager.test.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"cacheManager.test.js","sourceRoot":"","sources":["../../../src/tests/cacheManager.test.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;;;AAEH,oDAA4B;AAE5B,2DAAoE;AAEpE,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE;IACf,MAAM,OAAO,GAAG,IAAI,2BAAY,EAAE,CAAC;IACnC,MAAM,IAAI,GAAG,IAAI,cAAc,CAAC,EAAE,CAAC,CAAC;IAEpC,OAAO,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;IACjC,gBAAM,CAAC,WAAW,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,EAAE,CAAC,CAAC;IAEhD,OAAO,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC;IACnC,gBAAM,CAAC,WAAW,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC;AACnD,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,qBAAqB,EAAE,GAAG,EAAE;IAC7B,MAAM,OAAO,GAAG,IAAI,2BAAY,EAAE,CAAC;IACnC,MAAM,IAAI,GAAG,IAAI,cAAc,CAAC,EAAE,CAAC,CAAC;IAEpC,OAAO,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;IACjC,gBAAM,CAAC,WAAW,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,EAAE,CAAC,CAAC;IAEhD,MAAM,OAAO,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IACxC,gBAAM,CAAC,WAAW,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;IAEhD,SAAS;IACT,MAAM,OAAO,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IACxC,gBAAM,CAAC,WAAW,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;IAEhD,OAAO,CAAC,OAAO,EAAE,CAAC;IAClB,gBAAM,CAAC,WAAW,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;IAEhD,OAAO,CAAC,OAAO,EAAE,CAAC;IAClB,gBAAM,CAAC,WAAW,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,EAAE,CAAC,CAAC;IAEhD,OAAO,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC;IACnC,gBAAM,CAAC,WAAW,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC;AACnD,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,iBAAiB,EAAE,GAAG,EAAE;IACzB,MAAM,OAAO,GAAG,IAAI,2BAAY,EAAE,CAAC;IACnC,MAAM,KAAK,GAAG,IAAI,cAAc,CAAC,EAAE,CAAC,CAAC;IACrC,MAAM,KAAK,GAAG,IAAI,cAAc,CAAC,EAAE,CAAC,CAAC;IAErC,OAAO,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;IAClC,gBAAM,CAAC,WAAW,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,EAAE,CAAC,CAAC;IAEhD,OAAO,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;IAClC,gBAAM,CAAC,WAAW,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,EAAE,CAAC,CAAC;IAEhD,MAAM,MAAM,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IACvC,gBAAM,CAAC,WAAW,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;IAEhD,OAAO,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;IACpC,gBAAM,CAAC,WAAW,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;IAEhD,MAAM,CAAC,OAAO,EAAE,CAAC;IACjB,gBAAM,CAAC,WAAW,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,EAAE,CAAC,CAAC;IAEhD,OAAO,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;IACpC,gBAAM,CAAC,WAAW,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC;AACnD,CAAC,CAAC,CAAC;AAEH,MAAM,cAAc;IAChB,YAAoB,KAAa;QAAb,UAAK,GAAL,KAAK,CAAQ;QAC7B,QAAQ;IACZ,CAAC;IAED,aAAa;QACT,OAAO,IAAI,CAAC,KAAK,CAAC;IACtB,CAAC;IAED,UAAU;QACN,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;IACnB,CAAC;CACJ"}
|
@@ -387,10 +387,10 @@ test('RegionComments1', () => {
|
|
387
387
|
test('Deprecated2', () => {
|
388
388
|
const configOptions = new configOptions_1.ConfigOptions('.');
|
389
389
|
const analysisResults1 = TestUtils.typeAnalyzeSampleFiles(['deprecated2.py'], configOptions);
|
390
|
-
TestUtils.validateResults(analysisResults1, 0, 0, 0, undefined, undefined,
|
390
|
+
TestUtils.validateResults(analysisResults1, 0, 0, 0, undefined, undefined, 6);
|
391
391
|
configOptions.diagnosticRuleSet.reportDeprecated = 'error';
|
392
392
|
const analysisResults2 = TestUtils.typeAnalyzeSampleFiles(['deprecated2.py'], configOptions);
|
393
|
-
TestUtils.validateResults(analysisResults2,
|
393
|
+
TestUtils.validateResults(analysisResults2, 6);
|
394
394
|
});
|
395
395
|
test('Deprecated3', () => {
|
396
396
|
const configOptions = new configOptions_1.ConfigOptions('.');
|
@@ -4,7 +4,12 @@
|
|
4
4
|
*
|
5
5
|
* completions tests.
|
6
6
|
*/
|
7
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
8
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
9
|
+
};
|
7
10
|
Object.defineProperty(exports, "__esModule", { value: true });
|
11
|
+
const assert_1 = __importDefault(require("assert"));
|
12
|
+
const vscode_languageserver_1 = require("vscode-languageserver");
|
8
13
|
const vscode_languageserver_types_1 = require("vscode-languageserver-types");
|
9
14
|
const testState_1 = require("./harness/fourslash/testState");
|
10
15
|
test('completion import statement tooltip', async () => {
|
@@ -328,4 +333,444 @@ test('completion from import statement tooltip - implicit module', async () => {
|
|
328
333
|
},
|
329
334
|
});
|
330
335
|
});
|
336
|
+
test('include literals in expression completion', async () => {
|
337
|
+
const code = `
|
338
|
+
// @filename: test.py
|
339
|
+
//// from typing import TypedDict
|
340
|
+
////
|
341
|
+
//// class TestType(TypedDict):
|
342
|
+
//// A: str
|
343
|
+
//// B: int
|
344
|
+
////
|
345
|
+
//// var: TestType = {}
|
346
|
+
////
|
347
|
+
//// var[[|A/*marker*/|]]
|
348
|
+
`;
|
349
|
+
const state = (0, testState_1.parseAndGetTestState)(code).state;
|
350
|
+
const marker = state.getMarkerByName('marker');
|
351
|
+
state.openFile(marker.fileName);
|
352
|
+
await state.verifyCompletion('included', vscode_languageserver_types_1.MarkupKind.Markdown, {
|
353
|
+
marker: {
|
354
|
+
completions: [
|
355
|
+
{
|
356
|
+
kind: vscode_languageserver_types_1.CompletionItemKind.Constant,
|
357
|
+
label: "'A'",
|
358
|
+
textEdit: { range: state.getPositionRange('marker'), newText: "'A'" },
|
359
|
+
},
|
360
|
+
],
|
361
|
+
},
|
362
|
+
});
|
363
|
+
});
|
364
|
+
test('include literals in set key', async () => {
|
365
|
+
const code = `
|
366
|
+
// @filename: test.py
|
367
|
+
//// from typing import TypedDict
|
368
|
+
////
|
369
|
+
//// class TestType(TypedDict):
|
370
|
+
//// A: str
|
371
|
+
//// B: int
|
372
|
+
////
|
373
|
+
//// var: TestType = { [|A/*marker*/|] }
|
374
|
+
`;
|
375
|
+
const state = (0, testState_1.parseAndGetTestState)(code).state;
|
376
|
+
const marker = state.getMarkerByName('marker');
|
377
|
+
state.openFile(marker.fileName);
|
378
|
+
await state.verifyCompletion('included', vscode_languageserver_types_1.MarkupKind.Markdown, {
|
379
|
+
marker: {
|
380
|
+
completions: [
|
381
|
+
{
|
382
|
+
kind: vscode_languageserver_types_1.CompletionItemKind.Constant,
|
383
|
+
label: "'A'",
|
384
|
+
textEdit: { range: state.getPositionRange('marker'), newText: "'A'" },
|
385
|
+
},
|
386
|
+
],
|
387
|
+
},
|
388
|
+
});
|
389
|
+
});
|
390
|
+
test('include literals in dict key', async () => {
|
391
|
+
const code = `
|
392
|
+
// @filename: test.py
|
393
|
+
//// from typing import TypedDict
|
394
|
+
////
|
395
|
+
//// class TestType(TypedDict):
|
396
|
+
//// A: str
|
397
|
+
//// B: int
|
398
|
+
////
|
399
|
+
//// var: TestType = { [|A/*marker*/|] : "hello" }
|
400
|
+
`;
|
401
|
+
const state = (0, testState_1.parseAndGetTestState)(code).state;
|
402
|
+
const marker = state.getMarkerByName('marker');
|
403
|
+
state.openFile(marker.fileName);
|
404
|
+
await state.verifyCompletion('included', vscode_languageserver_types_1.MarkupKind.Markdown, {
|
405
|
+
marker: {
|
406
|
+
completions: [
|
407
|
+
{
|
408
|
+
kind: vscode_languageserver_types_1.CompletionItemKind.Constant,
|
409
|
+
label: '"A"',
|
410
|
+
textEdit: { range: state.getPositionRange('marker'), newText: '"A"' },
|
411
|
+
},
|
412
|
+
],
|
413
|
+
},
|
414
|
+
});
|
415
|
+
});
|
416
|
+
test('literals support for binary operators - equals', async () => {
|
417
|
+
const code = `
|
418
|
+
// @filename: test.py
|
419
|
+
//// from typing import Literal
|
420
|
+
////
|
421
|
+
//// Currency = Literal["USD", "EUR"]
|
422
|
+
////
|
423
|
+
//// def foo(c: Currency):
|
424
|
+
//// if c == [|"/*marker*/"|]
|
425
|
+
`;
|
426
|
+
const state = (0, testState_1.parseAndGetTestState)(code).state;
|
427
|
+
const marker = state.getMarkerByName('marker');
|
428
|
+
state.openFile(marker.fileName);
|
429
|
+
await state.verifyCompletion('included', vscode_languageserver_types_1.MarkupKind.Markdown, {
|
430
|
+
marker: {
|
431
|
+
completions: [
|
432
|
+
{
|
433
|
+
kind: vscode_languageserver_types_1.CompletionItemKind.Constant,
|
434
|
+
label: '"USD"',
|
435
|
+
textEdit: { range: state.getPositionRange('marker'), newText: '"USD"' },
|
436
|
+
},
|
437
|
+
{
|
438
|
+
kind: vscode_languageserver_types_1.CompletionItemKind.Constant,
|
439
|
+
label: '"EUR"',
|
440
|
+
textEdit: { range: state.getPositionRange('marker'), newText: '"EUR"' },
|
441
|
+
},
|
442
|
+
],
|
443
|
+
},
|
444
|
+
});
|
445
|
+
});
|
446
|
+
test('literals support for binary operators - not equals', async () => {
|
447
|
+
const code = `
|
448
|
+
// @filename: test.py
|
449
|
+
//// from typing import Literal
|
450
|
+
////
|
451
|
+
//// Currency = Literal["USD", "EUR"]
|
452
|
+
////
|
453
|
+
//// def foo(c: Currency):
|
454
|
+
//// if c != [|"/*marker*/"|]
|
455
|
+
`;
|
456
|
+
const state = (0, testState_1.parseAndGetTestState)(code).state;
|
457
|
+
const marker = state.getMarkerByName('marker');
|
458
|
+
state.openFile(marker.fileName);
|
459
|
+
await state.verifyCompletion('included', vscode_languageserver_types_1.MarkupKind.Markdown, {
|
460
|
+
marker: {
|
461
|
+
completions: [
|
462
|
+
{
|
463
|
+
kind: vscode_languageserver_types_1.CompletionItemKind.Constant,
|
464
|
+
label: '"USD"',
|
465
|
+
textEdit: { range: state.getPositionRange('marker'), newText: '"USD"' },
|
466
|
+
},
|
467
|
+
{
|
468
|
+
kind: vscode_languageserver_types_1.CompletionItemKind.Constant,
|
469
|
+
label: '"EUR"',
|
470
|
+
textEdit: { range: state.getPositionRange('marker'), newText: '"EUR"' },
|
471
|
+
},
|
472
|
+
],
|
473
|
+
},
|
474
|
+
});
|
475
|
+
});
|
476
|
+
test('literals support for binary operators without string node', async () => {
|
477
|
+
const code = `
|
478
|
+
// @filename: test.py
|
479
|
+
//// from typing import Literal
|
480
|
+
////
|
481
|
+
//// Currency = Literal["USD", "EUR"]
|
482
|
+
////
|
483
|
+
//// def foo(c: Currency):
|
484
|
+
//// if c != [|/*marker*/|]
|
485
|
+
`;
|
486
|
+
const state = (0, testState_1.parseAndGetTestState)(code).state;
|
487
|
+
const marker = state.getMarkerByName('marker');
|
488
|
+
state.openFile(marker.fileName);
|
489
|
+
await state.verifyCompletion('included', vscode_languageserver_types_1.MarkupKind.Markdown, {
|
490
|
+
marker: {
|
491
|
+
completions: [
|
492
|
+
{
|
493
|
+
kind: vscode_languageserver_types_1.CompletionItemKind.Constant,
|
494
|
+
label: '"USD"',
|
495
|
+
},
|
496
|
+
{
|
497
|
+
kind: vscode_languageserver_types_1.CompletionItemKind.Constant,
|
498
|
+
label: '"EUR"',
|
499
|
+
},
|
500
|
+
],
|
501
|
+
},
|
502
|
+
});
|
503
|
+
});
|
504
|
+
test('literals support for binary operators with prior word', async () => {
|
505
|
+
const code = `
|
506
|
+
// @filename: test.py
|
507
|
+
//// from typing import Literal
|
508
|
+
////
|
509
|
+
//// Currency = Literal["USD", "EUR"]
|
510
|
+
////
|
511
|
+
//// def foo(c: Currency):
|
512
|
+
//// if c != [|US/*marker*/|]
|
513
|
+
`;
|
514
|
+
const state = (0, testState_1.parseAndGetTestState)(code).state;
|
515
|
+
const marker = state.getMarkerByName('marker');
|
516
|
+
state.openFile(marker.fileName);
|
517
|
+
await state.verifyCompletion('included', vscode_languageserver_types_1.MarkupKind.Markdown, {
|
518
|
+
marker: {
|
519
|
+
completions: [
|
520
|
+
{
|
521
|
+
kind: vscode_languageserver_types_1.CompletionItemKind.Constant,
|
522
|
+
label: '"USD"',
|
523
|
+
},
|
524
|
+
],
|
525
|
+
},
|
526
|
+
});
|
527
|
+
});
|
528
|
+
test('literals support for binary operators - assignment expression', async () => {
|
529
|
+
const code = `
|
530
|
+
// @filename: test.py
|
531
|
+
//// from typing import Literal
|
532
|
+
////
|
533
|
+
//// Currency = Literal["USD", "EUR"]
|
534
|
+
////
|
535
|
+
//// def foo(c: Currency):
|
536
|
+
//// if c := [|"/*marker*/"|]
|
537
|
+
`;
|
538
|
+
const state = (0, testState_1.parseAndGetTestState)(code).state;
|
539
|
+
const marker = state.getMarkerByName('marker');
|
540
|
+
state.openFile(marker.fileName);
|
541
|
+
await state.verifyCompletion('included', vscode_languageserver_types_1.MarkupKind.Markdown, {
|
542
|
+
marker: {
|
543
|
+
completions: [
|
544
|
+
{
|
545
|
+
kind: vscode_languageserver_types_1.CompletionItemKind.Constant,
|
546
|
+
label: '"USD"',
|
547
|
+
textEdit: { range: state.getPositionRange('marker'), newText: '"USD"' },
|
548
|
+
},
|
549
|
+
{
|
550
|
+
kind: vscode_languageserver_types_1.CompletionItemKind.Constant,
|
551
|
+
label: '"EUR"',
|
552
|
+
textEdit: { range: state.getPositionRange('marker'), newText: '"EUR"' },
|
553
|
+
},
|
554
|
+
],
|
555
|
+
},
|
556
|
+
});
|
557
|
+
});
|
558
|
+
test('literals support for call', async () => {
|
559
|
+
const code = `
|
560
|
+
// @filename: test.py
|
561
|
+
//// from typing import Literal
|
562
|
+
////
|
563
|
+
//// Currency = Literal["USD", "EUR"]
|
564
|
+
////
|
565
|
+
//// def foo(c: Currency) -> Currency:
|
566
|
+
//// return c
|
567
|
+
////
|
568
|
+
//// if foo([|"/*marker1*/"|]) == [|"/*marker2*/"|]
|
569
|
+
`;
|
570
|
+
const state = (0, testState_1.parseAndGetTestState)(code).state;
|
571
|
+
const marker1 = state.getMarkerByName('marker1');
|
572
|
+
state.openFile(marker1.fileName);
|
573
|
+
await state.verifyCompletion('included', vscode_languageserver_types_1.MarkupKind.Markdown, {
|
574
|
+
marker1: {
|
575
|
+
completions: [
|
576
|
+
{
|
577
|
+
kind: vscode_languageserver_types_1.CompletionItemKind.Constant,
|
578
|
+
label: '"USD"',
|
579
|
+
textEdit: { range: state.getPositionRange('marker1'), newText: '"USD"' },
|
580
|
+
},
|
581
|
+
{
|
582
|
+
kind: vscode_languageserver_types_1.CompletionItemKind.Constant,
|
583
|
+
label: '"EUR"',
|
584
|
+
textEdit: { range: state.getPositionRange('marker1'), newText: '"EUR"' },
|
585
|
+
},
|
586
|
+
],
|
587
|
+
},
|
588
|
+
marker2: {
|
589
|
+
completions: [
|
590
|
+
{
|
591
|
+
kind: vscode_languageserver_types_1.CompletionItemKind.Constant,
|
592
|
+
label: '"USD"',
|
593
|
+
textEdit: { range: state.getPositionRange('marker2'), newText: '"USD"' },
|
594
|
+
},
|
595
|
+
{
|
596
|
+
kind: vscode_languageserver_types_1.CompletionItemKind.Constant,
|
597
|
+
label: '"EUR"',
|
598
|
+
textEdit: { range: state.getPositionRange('marker2'), newText: '"EUR"' },
|
599
|
+
},
|
600
|
+
],
|
601
|
+
},
|
602
|
+
});
|
603
|
+
});
|
604
|
+
test('list with literal types', async () => {
|
605
|
+
const code = `
|
606
|
+
// @filename: test.py
|
607
|
+
//// from typing import Literal
|
608
|
+
////
|
609
|
+
//// Currency = Literal["USD", "EUR"]
|
610
|
+
////
|
611
|
+
//// a: list[Currency] = [[|"/*marker*/"|]]
|
612
|
+
`;
|
613
|
+
const state = (0, testState_1.parseAndGetTestState)(code).state;
|
614
|
+
const marker = state.getMarkerByName('marker');
|
615
|
+
state.openFile(marker.fileName);
|
616
|
+
await state.verifyCompletion('included', vscode_languageserver_types_1.MarkupKind.Markdown, {
|
617
|
+
marker: {
|
618
|
+
completions: [
|
619
|
+
{
|
620
|
+
kind: vscode_languageserver_types_1.CompletionItemKind.Constant,
|
621
|
+
label: '"USD"',
|
622
|
+
textEdit: { range: state.getPositionRange('marker'), newText: '"USD"' },
|
623
|
+
},
|
624
|
+
{
|
625
|
+
kind: vscode_languageserver_types_1.CompletionItemKind.Constant,
|
626
|
+
label: '"EUR"',
|
627
|
+
textEdit: { range: state.getPositionRange('marker'), newText: '"EUR"' },
|
628
|
+
},
|
629
|
+
],
|
630
|
+
},
|
631
|
+
});
|
632
|
+
});
|
633
|
+
test('literals support for match - error case', async () => {
|
634
|
+
const code = `
|
635
|
+
// @filename: test.py
|
636
|
+
//// from typing import Literal
|
637
|
+
////
|
638
|
+
//// Currency = Literal["USD", "EUR"]
|
639
|
+
////
|
640
|
+
//// def foo(c: Currency):
|
641
|
+
//// match c:
|
642
|
+
//// case [|/*marker*/|]
|
643
|
+
`;
|
644
|
+
const state = (0, testState_1.parseAndGetTestState)(code).state;
|
645
|
+
const marker = state.getMarkerByName('marker');
|
646
|
+
state.openFile(marker.fileName);
|
647
|
+
await state.verifyCompletion('included', vscode_languageserver_types_1.MarkupKind.Markdown, {
|
648
|
+
marker: {
|
649
|
+
completions: [
|
650
|
+
{
|
651
|
+
kind: vscode_languageserver_types_1.CompletionItemKind.Constant,
|
652
|
+
label: '"USD"',
|
653
|
+
},
|
654
|
+
{
|
655
|
+
kind: vscode_languageserver_types_1.CompletionItemKind.Constant,
|
656
|
+
label: '"EUR"',
|
657
|
+
},
|
658
|
+
],
|
659
|
+
},
|
660
|
+
});
|
661
|
+
});
|
662
|
+
test('literals support for match - simple case', async () => {
|
663
|
+
const code = `
|
664
|
+
// @filename: test.py
|
665
|
+
//// from typing import Literal
|
666
|
+
////
|
667
|
+
//// Currency = Literal["USD", "EUR"]
|
668
|
+
////
|
669
|
+
//// def foo(c: Currency):
|
670
|
+
//// match c:
|
671
|
+
//// case [|"/*marker*/"|]
|
672
|
+
`;
|
673
|
+
const state = (0, testState_1.parseAndGetTestState)(code).state;
|
674
|
+
const marker = state.getMarkerByName('marker');
|
675
|
+
state.openFile(marker.fileName);
|
676
|
+
await state.verifyCompletion('included', vscode_languageserver_types_1.MarkupKind.Markdown, {
|
677
|
+
marker: {
|
678
|
+
completions: [
|
679
|
+
{
|
680
|
+
kind: vscode_languageserver_types_1.CompletionItemKind.Constant,
|
681
|
+
label: '"USD"',
|
682
|
+
textEdit: { range: state.getPositionRange('marker'), newText: '"USD"' },
|
683
|
+
},
|
684
|
+
{
|
685
|
+
kind: vscode_languageserver_types_1.CompletionItemKind.Constant,
|
686
|
+
label: '"EUR"',
|
687
|
+
textEdit: { range: state.getPositionRange('marker'), newText: '"EUR"' },
|
688
|
+
},
|
689
|
+
],
|
690
|
+
},
|
691
|
+
});
|
692
|
+
});
|
693
|
+
test('literals support for match - simple case without string', async () => {
|
694
|
+
const code = `
|
695
|
+
// @filename: test.py
|
696
|
+
//// from typing import Literal
|
697
|
+
////
|
698
|
+
//// Currency = Literal["USD", "EUR"]
|
699
|
+
////
|
700
|
+
//// def foo(c: Currency):
|
701
|
+
//// match c:
|
702
|
+
//// case [|US/*marker*/|]
|
703
|
+
`;
|
704
|
+
const state = (0, testState_1.parseAndGetTestState)(code).state;
|
705
|
+
const marker = state.getMarkerByName('marker');
|
706
|
+
state.openFile(marker.fileName);
|
707
|
+
await state.verifyCompletion('included', vscode_languageserver_types_1.MarkupKind.Markdown, {
|
708
|
+
marker: {
|
709
|
+
completions: [
|
710
|
+
{
|
711
|
+
kind: vscode_languageserver_types_1.CompletionItemKind.Constant,
|
712
|
+
label: '"USD"',
|
713
|
+
},
|
714
|
+
],
|
715
|
+
},
|
716
|
+
});
|
717
|
+
});
|
718
|
+
test('completion quote trigger', async () => {
|
719
|
+
const code = `
|
720
|
+
// @filename: test.py
|
721
|
+
//// from typing import Literal
|
722
|
+
////
|
723
|
+
//// Currency = Literal["USD", "EUR"]
|
724
|
+
////
|
725
|
+
//// def foo(c: Currency):
|
726
|
+
//// match c:
|
727
|
+
//// case [|"/*marker*/"|]
|
728
|
+
`;
|
729
|
+
const state = (0, testState_1.parseAndGetTestState)(code).state;
|
730
|
+
const marker = state.getMarkerByName('marker');
|
731
|
+
const filePath = marker.fileName;
|
732
|
+
const position = state.convertOffsetToPosition(filePath, marker.position);
|
733
|
+
const options = {
|
734
|
+
format: 'markdown',
|
735
|
+
snippet: false,
|
736
|
+
lazyEdit: false,
|
737
|
+
autoImport: false,
|
738
|
+
extraCommitChars: false,
|
739
|
+
importFormat: "absolute" /* Absolute */,
|
740
|
+
includeUserSymbolsInAutoImport: false,
|
741
|
+
triggerCharacter: '"',
|
742
|
+
};
|
743
|
+
const result = await state.workspace.service.getCompletionsForPosition(filePath, position, state.workspace.rootPath, options, undefined, vscode_languageserver_1.CancellationToken.None);
|
744
|
+
(0, assert_1.default)(result);
|
745
|
+
const item = result.completionList.items.find((a) => a.label === '"USD"');
|
746
|
+
(0, assert_1.default)(item);
|
747
|
+
});
|
748
|
+
test('completion quote trigger - middle', async () => {
|
749
|
+
const code = `
|
750
|
+
// @filename: test.py
|
751
|
+
//// from typing import Literal
|
752
|
+
////
|
753
|
+
//// Currency = Literal["Quote'Middle"]
|
754
|
+
////
|
755
|
+
//// def foo(c: Currency):
|
756
|
+
//// match c:
|
757
|
+
//// case [|"Quote'/*marker*/"|]
|
758
|
+
`;
|
759
|
+
const state = (0, testState_1.parseAndGetTestState)(code).state;
|
760
|
+
const marker = state.getMarkerByName('marker');
|
761
|
+
const filePath = marker.fileName;
|
762
|
+
const position = state.convertOffsetToPosition(filePath, marker.position);
|
763
|
+
const options = {
|
764
|
+
format: 'markdown',
|
765
|
+
snippet: false,
|
766
|
+
lazyEdit: false,
|
767
|
+
autoImport: false,
|
768
|
+
extraCommitChars: false,
|
769
|
+
importFormat: "absolute" /* Absolute */,
|
770
|
+
includeUserSymbolsInAutoImport: false,
|
771
|
+
triggerCharacter: "'",
|
772
|
+
};
|
773
|
+
const result = await state.workspace.service.getCompletionsForPosition(filePath, position, state.workspace.rootPath, options, undefined, vscode_languageserver_1.CancellationToken.None);
|
774
|
+
assert_1.default.strictEqual(result === null || result === void 0 ? void 0 : result.completionList.items.length, 0);
|
775
|
+
});
|
331
776
|
//# sourceMappingURL=completions.test.js.map
|