@zzzen/pyright-internal 1.2.0-dev.20260607 → 1.2.0-dev.20260621
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/analysis.js +17 -7
- package/dist/analyzer/analysis.js.map +1 -1
- package/dist/analyzer/analyzerNodeInfo.d.ts +11 -0
- package/dist/analyzer/binder.js +31 -8
- package/dist/analyzer/binder.js.map +1 -1
- package/dist/analyzer/checker.js +23 -8
- package/dist/analyzer/checker.js.map +1 -1
- package/dist/analyzer/dataClasses.js +19 -8
- package/dist/analyzer/dataClasses.js.map +1 -1
- package/dist/analyzer/declaration.d.ts +1 -0
- package/dist/analyzer/declaration.js.map +1 -1
- package/dist/analyzer/importResolver.d.ts +1 -0
- package/dist/analyzer/importResolver.js +38 -8
- package/dist/analyzer/importResolver.js.map +1 -1
- package/dist/analyzer/importStatementUtils.js +17 -7
- package/dist/analyzer/importStatementUtils.js.map +1 -1
- package/dist/analyzer/namedTuples.js +17 -7
- package/dist/analyzer/namedTuples.js.map +1 -1
- package/dist/analyzer/parseTreeCleaner.js +17 -7
- package/dist/analyzer/parseTreeCleaner.js.map +1 -1
- package/dist/analyzer/parseTreeUtils.js +19 -9
- package/dist/analyzer/parseTreeUtils.js.map +1 -1
- package/dist/analyzer/parseTreeWalker.js +17 -7
- package/dist/analyzer/parseTreeWalker.js.map +1 -1
- package/dist/analyzer/program.d.ts +1 -0
- package/dist/analyzer/program.js +38 -7
- package/dist/analyzer/program.js.map +1 -1
- package/dist/analyzer/pythonPathUtils.js +33 -7
- package/dist/analyzer/pythonPathUtils.js.map +1 -1
- package/dist/analyzer/service.js +43 -11
- package/dist/analyzer/service.js.map +1 -1
- package/dist/analyzer/sourceEnumerator.js +6 -0
- package/dist/analyzer/sourceEnumerator.js.map +1 -1
- package/dist/analyzer/sourceFile.d.ts +1 -0
- package/dist/analyzer/sourceFile.js +25 -7
- package/dist/analyzer/sourceFile.js.map +1 -1
- package/dist/analyzer/sourceMapper.d.ts +11 -1
- package/dist/analyzer/sourceMapper.js +220 -19
- package/dist/analyzer/sourceMapper.js.map +1 -1
- package/dist/analyzer/staticExpressions.js +2 -2
- package/dist/analyzer/tracePrinter.js +17 -7
- package/dist/analyzer/tracePrinter.js.map +1 -1
- package/dist/analyzer/typeCacheUtils.js +17 -7
- package/dist/analyzer/typeCacheUtils.js.map +1 -1
- package/dist/analyzer/typeDocStringUtils.d.ts +8 -0
- package/dist/analyzer/typeDocStringUtils.js +101 -27
- package/dist/analyzer/typeDocStringUtils.js.map +1 -1
- package/dist/analyzer/typeEvaluator.js +69 -28
- package/dist/analyzer/typeEvaluator.js.map +1 -1
- package/dist/analyzer/typeGuards.js +19 -9
- package/dist/analyzer/typeGuards.js.map +1 -1
- package/dist/analyzer/typePrinter.js +50 -8
- package/dist/analyzer/typePrinter.js.map +1 -1
- package/dist/analyzer/typeStubWriter.js +17 -7
- package/dist/analyzer/typeStubWriter.js.map +1 -1
- package/dist/analyzer/typeUtils.d.ts +1 -0
- package/dist/analyzer/typeUtils.js +9 -0
- package/dist/analyzer/typeUtils.js.map +1 -1
- package/dist/analyzer/typeWalker.js +1 -1
- package/dist/analyzer/typeWalker.js.map +1 -1
- package/dist/analyzer/typedDicts.js +19 -9
- package/dist/analyzer/typedDicts.js.map +1 -1
- package/dist/analyzer/typeshedInfoProvider.js +17 -7
- package/dist/analyzer/typeshedInfoProvider.js.map +1 -1
- package/dist/backgroundAnalysisBase.js +17 -7
- package/dist/backgroundAnalysisBase.js.map +1 -1
- package/dist/backgroundThreadBase.js +17 -7
- package/dist/backgroundThreadBase.js.map +1 -1
- package/dist/common/chokidarFileWatcherProvider.js +17 -7
- package/dist/common/chokidarFileWatcherProvider.js.map +1 -1
- package/dist/common/configOptions.js +17 -7
- package/dist/common/configOptions.js.map +1 -1
- package/dist/common/console.js +17 -7
- package/dist/common/console.js.map +1 -1
- package/dist/common/envVarUtils.js +17 -7
- package/dist/common/envVarUtils.js.map +1 -1
- package/dist/common/extensibility.d.ts +2 -0
- package/dist/common/extensibility.js.map +1 -1
- package/dist/common/fileBasedCancellationUtils.js +17 -7
- package/dist/common/fileBasedCancellationUtils.js.map +1 -1
- package/dist/common/fullAccessHost.d.ts +2 -1
- package/dist/common/fullAccessHost.js +26 -7
- package/dist/common/fullAccessHost.js.map +1 -1
- package/dist/common/host.d.ts +31 -0
- package/dist/common/host.js +3 -0
- package/dist/common/host.js.map +1 -1
- package/dist/common/languageInfoUtils.js +12 -12
- package/dist/common/memUtils.js +18 -7
- package/dist/common/memUtils.js.map +1 -1
- package/dist/common/pathUtils.js +17 -7
- package/dist/common/pathUtils.js.map +1 -1
- package/dist/common/positionUtils.js +19 -0
- package/dist/common/positionUtils.js.map +1 -1
- package/dist/common/processUtils.js +17 -7
- package/dist/common/processUtils.js.map +1 -1
- package/dist/common/realFileSystem.js +19 -19
- package/dist/common/realFileSystem.js.map +1 -1
- package/dist/common/serviceProvider.js +17 -7
- package/dist/common/serviceProvider.js.map +1 -1
- package/dist/common/streamUtils.d.ts +1 -1
- package/dist/common/textEditTracker.d.ts +1 -0
- package/dist/common/textEditTracker.js +31 -12
- package/dist/common/textEditTracker.js.map +1 -1
- package/dist/common/uri/uriMap.d.ts +4 -4
- package/dist/common/uri/uriMap.js +1 -0
- package/dist/common/uri/uriMap.js.map +1 -1
- package/dist/common/workspaceEditUtils.d.ts +1 -0
- package/dist/common/workspaceEditUtils.js +10 -0
- package/dist/common/workspaceEditUtils.js.map +1 -1
- package/dist/languageServerBase.js +13 -3
- package/dist/languageServerBase.js.map +1 -1
- package/dist/languageService/autoImporter.js +17 -7
- package/dist/languageService/autoImporter.js.map +1 -1
- package/dist/languageService/callHierarchyProvider.js +17 -7
- package/dist/languageService/callHierarchyProvider.js.map +1 -1
- package/dist/languageService/completionProvider.d.ts +5 -2
- package/dist/languageService/completionProvider.js +125 -19
- package/dist/languageService/completionProvider.js.map +1 -1
- package/dist/languageService/completionProviderUtils.d.ts +16 -0
- package/dist/languageService/completionProviderUtils.js +42 -0
- package/dist/languageService/completionProviderUtils.js.map +1 -1
- package/dist/languageService/definitionProvider.d.ts +1 -1
- package/dist/languageService/definitionProvider.js +69 -10
- package/dist/languageService/definitionProvider.js.map +1 -1
- package/dist/languageService/documentHighlightProvider.js +17 -7
- package/dist/languageService/documentHighlightProvider.js.map +1 -1
- package/dist/languageService/documentSymbolCollector.d.ts +4 -0
- package/dist/languageService/documentSymbolCollector.js +73 -9
- package/dist/languageService/documentSymbolCollector.js.map +1 -1
- package/dist/languageService/hoverProvider.d.ts +1 -1
- package/dist/languageService/hoverProvider.js +76 -23
- package/dist/languageService/hoverProvider.js.map +1 -1
- package/dist/languageService/referencesProvider.js +17 -7
- package/dist/languageService/referencesProvider.js.map +1 -1
- package/dist/languageService/signatureHelpProvider.js +54 -16
- package/dist/languageService/signatureHelpProvider.js.map +1 -1
- package/dist/languageService/symbolIndexer.js +17 -7
- package/dist/languageService/symbolIndexer.js.map +1 -1
- package/dist/languageService/tooltipUtils.d.ts +11 -0
- package/dist/languageService/tooltipUtils.js +67 -33
- package/dist/languageService/tooltipUtils.js.map +1 -1
- package/dist/languageService/workspaceSymbolProvider.js +17 -7
- package/dist/languageService/workspaceSymbolProvider.js.map +1 -1
- package/dist/localization/localize.d.ts +2 -0
- package/dist/localization/localize.js +2 -0
- package/dist/localization/localize.js.map +1 -1
- package/dist/localization/package.nls.en-us.json +2 -0
- package/dist/parser/characters.js +17 -7
- package/dist/parser/characters.js.map +1 -1
- package/dist/parser/parseNodes.d.ts +4 -0
- package/dist/parser/parseNodes.js.map +1 -1
- package/dist/parser/parser.d.ts +1 -0
- package/dist/parser/parser.js +82 -38
- package/dist/parser/parser.js.map +1 -1
- package/dist/parser/stringTokenUtils.js +23 -7
- package/dist/parser/stringTokenUtils.js.map +1 -1
- package/dist/parser/tokenizer.js +16 -15
- package/dist/parser/tokenizer.js.map +1 -1
- package/dist/parser/tokenizerTypes.d.ts +15 -14
- package/dist/parser/tokenizerTypes.js +22 -15
- package/dist/parser/tokenizerTypes.js.map +1 -1
- package/dist/pyright.js +17 -7
- package/dist/pyright.js.map +1 -1
- package/dist/server.js +1 -1
- package/dist/server.js.map +1 -1
- package/dist/tests/benchmarks/parserBenchmark.test.js +17 -7
- package/dist/tests/benchmarks/parserBenchmark.test.js.map +1 -1
- package/dist/tests/benchmarks/tokenizerBenchmark.test.js +17 -7
- package/dist/tests/benchmarks/tokenizerBenchmark.test.js.map +1 -1
- package/dist/tests/chainedSourceFiles.test.js +17 -7
- package/dist/tests/chainedSourceFiles.test.js.map +1 -1
- package/dist/tests/checker.test.js +17 -7
- package/dist/tests/checker.test.js.map +1 -1
- package/dist/tests/collectionUtils.test.js +17 -7
- package/dist/tests/collectionUtils.test.js.map +1 -1
- package/dist/tests/common.test.js +17 -7
- package/dist/tests/common.test.js.map +1 -1
- package/dist/tests/completionProviderUtils.test.d.ts +1 -0
- package/dist/tests/completionProviderUtils.test.js +56 -0
- package/dist/tests/completionProviderUtils.test.js.map +1 -0
- package/dist/tests/config.test.js +69 -0
- package/dist/tests/config.test.js.map +1 -1
- package/dist/tests/debug.test.js +17 -7
- package/dist/tests/debug.test.js.map +1 -1
- package/dist/tests/deferred.test.js +18 -8
- package/dist/tests/deferred.test.js.map +1 -1
- package/dist/tests/diagnosticOverrides.test.js +17 -7
- package/dist/tests/diagnosticOverrides.test.js.map +1 -1
- package/dist/tests/diagnostics.test.js +35 -0
- package/dist/tests/diagnostics.test.js.map +1 -1
- package/dist/tests/envVarUtils.test.js +17 -7
- package/dist/tests/envVarUtils.test.js.map +1 -1
- package/dist/tests/filesystem.test.js +17 -7
- package/dist/tests/filesystem.test.js.map +1 -1
- package/dist/tests/fourSlashParser.test.js +17 -7
- package/dist/tests/fourSlashParser.test.js.map +1 -1
- package/dist/tests/fourSlashRunner.test.js +17 -7
- package/dist/tests/fourSlashRunner.test.js.map +1 -1
- package/dist/tests/fourslash/completions.inherited.function.docFromStub.fourslash.js +1 -1
- package/dist/tests/fourslash/completions.inherited.function.docFromStub.fourslash.js.map +1 -1
- package/dist/tests/fourslash/completions.keywords.pythonVersion.fourslash.js +20 -0
- package/dist/tests/fourslash/completions.keywords.pythonVersion.fourslash.js.map +1 -1
- package/dist/tests/fourslash/diagnostics.missingModuleSource.nativeSubmodule.fourslash.d.ts +1 -0
- package/dist/tests/fourslash/diagnostics.missingModuleSource.nativeSubmodule.fourslash.js +61 -0
- package/dist/tests/fourslash/diagnostics.missingModuleSource.nativeSubmodule.fourslash.js.map +1 -0
- package/dist/tests/fourslash/signature.complicated.fourslash.js +1 -5
- package/dist/tests/fourslash/signature.complicated.fourslash.js.map +1 -1
- package/dist/tests/fourslash/signature.posonly.fourslash.d.ts +1 -0
- package/dist/tests/fourslash/signature.posonly.fourslash.js +58 -0
- package/dist/tests/fourslash/signature.posonly.fourslash.js.map +1 -0
- package/dist/tests/harness/fourslash/fourSlashTypes.js +17 -7
- package/dist/tests/harness/fourslash/fourSlashTypes.js.map +1 -1
- package/dist/tests/harness/fourslash/runner.js +17 -7
- package/dist/tests/harness/fourslash/runner.js.map +1 -1
- package/dist/tests/harness/fourslash/testLanguageService.js +17 -7
- package/dist/tests/harness/fourslash/testLanguageService.js.map +1 -1
- package/dist/tests/harness/fourslash/testState.Consts.js +17 -7
- package/dist/tests/harness/fourslash/testState.Consts.js.map +1 -1
- package/dist/tests/harness/fourslash/testState.js +17 -7
- package/dist/tests/harness/fourslash/testState.js.map +1 -1
- package/dist/tests/harness/fourslash/testStateUtils.js +17 -7
- package/dist/tests/harness/fourslash/testStateUtils.js.map +1 -1
- package/dist/tests/harness/fourslash/workspaceEditTestUtils.js +17 -7
- package/dist/tests/harness/fourslash/workspaceEditTestUtils.js.map +1 -1
- package/dist/tests/harness/testHost.js +17 -7
- package/dist/tests/harness/testHost.js.map +1 -1
- package/dist/tests/harness/utils.d.ts +4 -4
- package/dist/tests/harness/utils.js.map +1 -1
- package/dist/tests/harness/vfs/factory.js +17 -7
- package/dist/tests/harness/vfs/factory.js.map +1 -1
- package/dist/tests/harness/vfs/filesystem.js +19 -11
- package/dist/tests/harness/vfs/filesystem.js.map +1 -1
- package/dist/tests/harness/vfs/pathValidation.js +17 -7
- package/dist/tests/harness/vfs/pathValidation.js.map +1 -1
- package/dist/tests/importResolver.test.js +104 -0
- package/dist/tests/importResolver.test.js.map +1 -1
- package/dist/tests/languageServer.test.js +91 -0
- package/dist/tests/languageServer.test.js.map +1 -1
- package/dist/tests/localizer.test.js +17 -7
- package/dist/tests/localizer.test.js.map +1 -1
- package/dist/tests/logger.test.js +17 -7
- package/dist/tests/logger.test.js.map +1 -1
- package/dist/tests/lsp/languageServer.js +17 -7
- package/dist/tests/lsp/languageServer.js.map +1 -1
- package/dist/tests/lsp/languageServerTestUtils.d.ts +0 -4
- package/dist/tests/lsp/languageServerTestUtils.js +76 -21
- package/dist/tests/lsp/languageServerTestUtils.js.map +1 -1
- package/dist/tests/parser.test.js +246 -7
- package/dist/tests/parser.test.js.map +1 -1
- package/dist/tests/pathUtils.test.js +17 -7
- package/dist/tests/pathUtils.test.js.map +1 -1
- package/dist/tests/positionUtils.test.js +26 -0
- package/dist/tests/positionUtils.test.js.map +1 -1
- package/dist/tests/realTempFile.test.js +17 -7
- package/dist/tests/realTempFile.test.js.map +1 -1
- package/dist/tests/sourceFile.test.js +17 -7
- package/dist/tests/sourceFile.test.js.map +1 -1
- package/dist/tests/sourceMapperUtils.test.js +192 -0
- package/dist/tests/sourceMapperUtils.test.js.map +1 -1
- package/dist/tests/stringUtils.test.js +17 -7
- package/dist/tests/stringUtils.test.js.map +1 -1
- package/dist/tests/symbolNameUtils.test.js +17 -7
- package/dist/tests/symbolNameUtils.test.js.map +1 -1
- package/dist/tests/testState.test.js +17 -7
- package/dist/tests/testState.test.js.map +1 -1
- package/dist/tests/testUtils.js +17 -7
- package/dist/tests/testUtils.js.map +1 -1
- package/dist/tests/textRange.test.js +17 -7
- package/dist/tests/textRange.test.js.map +1 -1
- package/dist/tests/tokenizer.test.js +17 -7
- package/dist/tests/tokenizer.test.js.map +1 -1
- package/dist/tests/typeEvaluator1.test.js +17 -7
- package/dist/tests/typeEvaluator1.test.js.map +1 -1
- package/dist/tests/typeEvaluator2.test.js +17 -7
- package/dist/tests/typeEvaluator2.test.js.map +1 -1
- package/dist/tests/typeEvaluator3.test.js +23 -7
- package/dist/tests/typeEvaluator3.test.js.map +1 -1
- package/dist/tests/typeEvaluator4.test.js +23 -7
- package/dist/tests/typeEvaluator4.test.js.map +1 -1
- package/dist/tests/typeEvaluator5.test.js +17 -7
- package/dist/tests/typeEvaluator5.test.js.map +1 -1
- package/dist/tests/typeEvaluator6.test.js +17 -7
- package/dist/tests/typeEvaluator6.test.js.map +1 -1
- package/dist/tests/typeEvaluator7.test.js +17 -7
- package/dist/tests/typeEvaluator7.test.js.map +1 -1
- package/dist/tests/typeEvaluator8.test.js +17 -7
- package/dist/tests/typeEvaluator8.test.js.map +1 -1
- package/dist/tests/typePrinter.test.js +82 -7
- package/dist/tests/typePrinter.test.js.map +1 -1
- package/dist/tests/uri.test.js +17 -7
- package/dist/tests/uri.test.js.map +1 -1
- package/dist/tests/workspaceEditUtils.test.js +48 -7
- package/dist/tests/workspaceEditUtils.test.js.map +1 -1
- package/dist/tests/zipfs.test.js +17 -7
- package/dist/tests/zipfs.test.js.map +1 -1
- package/package.json +9 -9
- package/dist/tests/lsp/rspack.testserver.config.d.ts +0 -63
- package/dist/tests/lsp/rspack.testserver.config.js +0 -60
- package/dist/tests/lsp/rspack.testserver.config.js.map +0 -1
|
@@ -13,7 +13,7 @@ import { Uri } from '../common/uri/uri';
|
|
|
13
13
|
import { DecoratorNode, ExpressionNode, NameNode, ParseNode } from '../parser/parseNodes';
|
|
14
14
|
import { ParseFileResults } from '../parser/parser';
|
|
15
15
|
import { AutoImporter, AutoImportResult } from './autoImporter';
|
|
16
|
-
import { CompletionDetail, SymbolDetail } from './completionProviderUtils';
|
|
16
|
+
import { CompletionDetail, SymbolDetail, TrailingOverlap } from './completionProviderUtils';
|
|
17
17
|
export interface CompletionItemData {
|
|
18
18
|
uri: string;
|
|
19
19
|
position: Position;
|
|
@@ -53,9 +53,10 @@ export declare class CompletionProvider {
|
|
|
53
53
|
protected getMethodOverrideCompletions(priorWord: string, partialName: NameNode, decorators?: DecoratorNode[]): CompletionMap | undefined;
|
|
54
54
|
protected printOverriddenMethodBody(classType: ClassType, isStaticMethod: boolean, isProperty: boolean, decl: FunctionDeclaration, insertAwait?: boolean): string;
|
|
55
55
|
protected createReplaceEdits(priorWord: string, node: ParseNode | undefined, text: string): TextEdit;
|
|
56
|
+
protected createReplaceEditWithOverlap(priorWord: string, overlap: TrailingOverlap | undefined, text: string): TextEdit;
|
|
56
57
|
protected shouldProcessDeclaration(declaration: Declaration | undefined): boolean;
|
|
57
58
|
protected addSymbol(name: string, symbol: Symbol, priorWord: string, completionMap: CompletionMap, detail: SymbolDetail): void;
|
|
58
|
-
protected getMemberAccessCompletions(leftExprNode: ExpressionNode, priorWord: string): CompletionMap | undefined;
|
|
59
|
+
protected getMemberAccessCompletions(leftExprNode: ExpressionNode, priorWord: string, preserveEnumMembers?: boolean): CompletionMap | undefined;
|
|
59
60
|
protected createAutoImporter(completionMap: CompletionMap, lazyEdit: boolean): AutoImporter;
|
|
60
61
|
protected addAutoImportCompletions(priorWord: string, similarityLimit: number, lazyEdit: boolean, completionMap: CompletionMap, parensDisabled?: boolean): void;
|
|
61
62
|
protected addImportResults(results: AutoImportResult[], priorWord: string, completionMap: CompletionMap, parensDisabled?: boolean): void;
|
|
@@ -69,6 +70,7 @@ export declare class CompletionProvider {
|
|
|
69
70
|
private _getTypeOfSymbol;
|
|
70
71
|
private _getCompletions;
|
|
71
72
|
private _tryGetNameCompletions;
|
|
73
|
+
private _isRecoveredPatternMemberAccessName;
|
|
72
74
|
private _isWithinComment;
|
|
73
75
|
private _getExpressionErrorCompletions;
|
|
74
76
|
private _getMissingMemberAccessNameCompletions;
|
|
@@ -88,6 +90,7 @@ export declare class CompletionProvider {
|
|
|
88
90
|
private _getSubTypesWithLiteralValues;
|
|
89
91
|
private _getIndexKeyType;
|
|
90
92
|
private _getIndexKeys;
|
|
93
|
+
private _isSubscriptInTypeContext;
|
|
91
94
|
private _getLiteralCompletions;
|
|
92
95
|
private _tryAddLiterals;
|
|
93
96
|
private _tryAddMatchCaseLiteralCompletions;
|
|
@@ -24,13 +24,23 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (
|
|
|
24
24
|
}) : function(o, v) {
|
|
25
25
|
o["default"] = v;
|
|
26
26
|
});
|
|
27
|
-
var __importStar = (this && this.__importStar) || function (
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
};
|
|
27
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
28
|
+
var ownKeys = function(o) {
|
|
29
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
30
|
+
var ar = [];
|
|
31
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
32
|
+
return ar;
|
|
33
|
+
};
|
|
34
|
+
return ownKeys(o);
|
|
35
|
+
};
|
|
36
|
+
return function (mod) {
|
|
37
|
+
if (mod && mod.__esModule) return mod;
|
|
38
|
+
var result = {};
|
|
39
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
40
|
+
__setModuleDefault(result, mod);
|
|
41
|
+
return result;
|
|
42
|
+
};
|
|
43
|
+
})();
|
|
34
44
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
35
45
|
exports.CompletionMap = exports.CompletionProvider = exports.indexValueDetail = exports.autoImportDetail = void 0;
|
|
36
46
|
const vscode_languageserver_1 = require("vscode-languageserver");
|
|
@@ -111,7 +121,11 @@ var Keywords;
|
|
|
111
121
|
];
|
|
112
122
|
const python3_5 = [...base, 'async', 'await'];
|
|
113
123
|
const python3_10 = [...python3_5, 'case', 'match'];
|
|
124
|
+
const python3_15 = [...python3_10, 'lazy'];
|
|
114
125
|
function forVersion(version) {
|
|
126
|
+
if (pythonVersion_1.PythonVersion.isGreaterOrEqualTo(version, pythonVersion_1.pythonVersion3_15)) {
|
|
127
|
+
return python3_15;
|
|
128
|
+
}
|
|
115
129
|
if (pythonVersion_1.PythonVersion.isGreaterOrEqualTo(version, pythonVersion_1.pythonVersion3_10)) {
|
|
116
130
|
return python3_10;
|
|
117
131
|
}
|
|
@@ -406,6 +420,13 @@ class CompletionProvider {
|
|
|
406
420
|
};
|
|
407
421
|
return vscode_languageserver_1.TextEdit.replace(range, text);
|
|
408
422
|
}
|
|
423
|
+
createReplaceEditWithOverlap(priorWord, overlap, text) {
|
|
424
|
+
const range = {
|
|
425
|
+
start: { line: this.position.line, character: this.position.character - priorWord.length },
|
|
426
|
+
end: { line: this.position.line, character: this.position.character + (overlap?.consumedChars ?? 0) },
|
|
427
|
+
};
|
|
428
|
+
return vscode_languageserver_1.TextEdit.replace(range, text);
|
|
429
|
+
}
|
|
409
430
|
shouldProcessDeclaration(declaration) {
|
|
410
431
|
// By default, we allow all symbol/decl to be included in the completion.
|
|
411
432
|
return true;
|
|
@@ -494,7 +515,7 @@ class CompletionProvider {
|
|
|
494
515
|
}
|
|
495
516
|
}
|
|
496
517
|
}
|
|
497
|
-
getMemberAccessCompletions(leftExprNode, priorWord) {
|
|
518
|
+
getMemberAccessCompletions(leftExprNode, priorWord, preserveEnumMembers = false) {
|
|
498
519
|
const symbolTable = new Map();
|
|
499
520
|
const completionMap = new CompletionMap();
|
|
500
521
|
let leftType = this.evaluator.getType(leftExprNode);
|
|
@@ -509,14 +530,26 @@ class CompletionProvider {
|
|
|
509
530
|
}
|
|
510
531
|
(0, typeUtils_1.doForEachSubtype)(leftType, (subtype) => {
|
|
511
532
|
subtype = this.evaluator.makeTopLevelTypeVarsConcrete(subtype);
|
|
533
|
+
let resolvedClassSubtype;
|
|
512
534
|
if ((0, types_1.isClass)(subtype)) {
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
535
|
+
if (preserveEnumMembers && types_1.ClassType.isEnumClass(subtype) && types_1.TypeBase.isInstance(subtype)) {
|
|
536
|
+
// Preserve enum members by switching back to the class view before member enumeration.
|
|
537
|
+
resolvedClassSubtype = types_1.ClassType.cloneAsInstantiable(subtype);
|
|
538
|
+
}
|
|
539
|
+
else {
|
|
540
|
+
resolvedClassSubtype = subtype;
|
|
541
|
+
}
|
|
542
|
+
const instance = types_1.TypeBase.isInstance(resolvedClassSubtype);
|
|
543
|
+
(0, typeUtils_1.getMembersForClass)(resolvedClassSubtype, symbolTable, instance);
|
|
544
|
+
if (types_1.ClassType.isEnumClass(resolvedClassSubtype) && instance && !preserveEnumMembers) {
|
|
516
545
|
// Don't show enum member out of another enum member
|
|
517
|
-
// ex) Enum.Member. <= shouldn't show `Member` again.
|
|
546
|
+
// ex) Enum.Member. <= shouldn't show `Member` again. This pruning stays separate
|
|
547
|
+
// from the clone above because the clone only changes which members are enumerated.
|
|
548
|
+
// Note: when preserveEnumMembers=true, the cloneAsInstantiable above already makes
|
|
549
|
+
// instance=false, so this block is independently unreachable. The explicit
|
|
550
|
+
// !preserveEnumMembers guard is defense-in-depth for clarity.
|
|
518
551
|
for (const name of symbolTable.keys()) {
|
|
519
|
-
if (this._isEnumMember(
|
|
552
|
+
if (this._isEnumMember(resolvedClassSubtype, name)) {
|
|
520
553
|
symbolTable.delete(name);
|
|
521
554
|
}
|
|
522
555
|
}
|
|
@@ -538,7 +571,7 @@ class CompletionProvider {
|
|
|
538
571
|
}
|
|
539
572
|
}
|
|
540
573
|
this._addSymbolsForSymbolTable(symbolTable, () => true, priorWord, leftExprNode,
|
|
541
|
-
/* isInImport */ false,
|
|
574
|
+
/* isInImport */ false, resolvedClassSubtype, completionMap);
|
|
542
575
|
});
|
|
543
576
|
return completionMap;
|
|
544
577
|
}
|
|
@@ -1004,6 +1037,12 @@ class CompletionProvider {
|
|
|
1004
1037
|
if (curNode.parent.nodeType === 35 /* ParseNodeType.MemberAccess */ && curNode === curNode.parent.d.member) {
|
|
1005
1038
|
return this.getMemberAccessCompletions(curNode.parent.d.leftExpr, priorWord);
|
|
1006
1039
|
}
|
|
1040
|
+
if (this._isRecoveredPatternMemberAccessName(curNode, priorWord, priorText)) {
|
|
1041
|
+
// Pass curNode (the Name node) rather than a MemberAccess leftExpr: the type evaluator
|
|
1042
|
+
// resolves the Name to the same class type, and no MemberAccess parent exists in this
|
|
1043
|
+
// recovered-pattern context.
|
|
1044
|
+
return this.getMemberAccessCompletions(curNode, priorWord, /* preserveEnumMembers */ true);
|
|
1045
|
+
}
|
|
1007
1046
|
if (curNode.parent.nodeType === 28 /* ParseNodeType.Except */ && curNode === curNode.parent.d.name) {
|
|
1008
1047
|
return undefined;
|
|
1009
1048
|
}
|
|
@@ -1059,6 +1098,17 @@ class CompletionProvider {
|
|
|
1059
1098
|
}
|
|
1060
1099
|
return false;
|
|
1061
1100
|
}
|
|
1101
|
+
_isRecoveredPatternMemberAccessName(curNode, priorWord, priorText) {
|
|
1102
|
+
if (priorWord.length > 0 || !priorText.endsWith('.')) {
|
|
1103
|
+
return false;
|
|
1104
|
+
}
|
|
1105
|
+
// Parser recovery keeps `case Direction.` as a `PatternCapture > Name`, so detect the
|
|
1106
|
+
// trailing-dot text shape directly instead of waiting for a `MemberAccess` node.
|
|
1107
|
+
if (curNode.parent?.nodeType !== 69 /* ParseNodeType.PatternCapture */) {
|
|
1108
|
+
return false;
|
|
1109
|
+
}
|
|
1110
|
+
return !!ParseTreeUtils.getFirstAncestorOrSelfOfKind(curNode.parent, 64 /* ParseNodeType.Case */);
|
|
1111
|
+
}
|
|
1062
1112
|
_isWithinComment(offset) {
|
|
1063
1113
|
const token = getTokenAfter(offset, this.parseResults.tokenizerOutput.tokens);
|
|
1064
1114
|
if (!token) {
|
|
@@ -1161,6 +1211,17 @@ class CompletionProvider {
|
|
|
1161
1211
|
case 3 /* ErrorExpressionCategory.MissingIndexOrSlice */: {
|
|
1162
1212
|
let completionResults = this._getLiteralCompletions(node, offset, priorWord, priorText, postText);
|
|
1163
1213
|
if (!completionResults) {
|
|
1214
|
+
if (node.d.category === 3 /* ErrorExpressionCategory.MissingIndexOrSlice */ &&
|
|
1215
|
+
this.options.triggerCharacter === '[' &&
|
|
1216
|
+
!this._isSubscriptInTypeContext(node)) {
|
|
1217
|
+
// When `[` auto-triggers a subscript and there are no literal key
|
|
1218
|
+
// suggestions, return undefined so the caller produces an empty
|
|
1219
|
+
// CompletionList instead of noisy generic expression completions.
|
|
1220
|
+
// Skip this suppression inside type-like contexts (annotations,
|
|
1221
|
+
// class bases, type aliases) where generic subscripts are the
|
|
1222
|
+
// expected workflow.
|
|
1223
|
+
return undefined;
|
|
1224
|
+
}
|
|
1164
1225
|
completionResults = this._getExpressionCompletions(node, priorWord, priorText, postText);
|
|
1165
1226
|
}
|
|
1166
1227
|
return completionResults;
|
|
@@ -1490,7 +1551,7 @@ class CompletionProvider {
|
|
|
1490
1551
|
const callNameEnd = (0, positionUtils_1.convertOffsetToPosition)(signatureInfo.callNode.d.leftExpr.start + signatureInfo.callNode.d.leftExpr.length, this.parseResults.tokenizerOutput.lines);
|
|
1491
1552
|
if ((0, textRange_1.comparePositions)(this.position, callNameEnd) > 0) {
|
|
1492
1553
|
if (!atArgument) {
|
|
1493
|
-
this._addNamedParameters(signatureInfo, priorWord, completionMap);
|
|
1554
|
+
this._addNamedParameters(signatureInfo, priorWord, postText, completionMap);
|
|
1494
1555
|
}
|
|
1495
1556
|
this._addLiteralValuesForArgument(signatureInfo, priorWord, priorText, postText, completionMap);
|
|
1496
1557
|
}
|
|
@@ -1671,6 +1732,42 @@ class CompletionProvider {
|
|
|
1671
1732
|
}
|
|
1672
1733
|
return Array.from(keys);
|
|
1673
1734
|
}
|
|
1735
|
+
_isSubscriptInTypeContext(node) {
|
|
1736
|
+
// Standard type annotation contexts: TypeAnnotation, Parameter annotation, return annotation.
|
|
1737
|
+
if (ParseTreeUtils.isWithinTypeAnnotation(node, /* requireQuotedAnnotation */ false)) {
|
|
1738
|
+
return true;
|
|
1739
|
+
}
|
|
1740
|
+
// PEP 695 type alias: `type MyAlias = list[...]`
|
|
1741
|
+
if (ParseTreeUtils.getParentNodeOfType(node, 77 /* ParseNodeType.TypeAlias */)) {
|
|
1742
|
+
return true;
|
|
1743
|
+
}
|
|
1744
|
+
// Class bases: `class Foo(list[...])` or `class Foo(Generic[...])`
|
|
1745
|
+
let curNode = node.parent;
|
|
1746
|
+
while (curNode) {
|
|
1747
|
+
if (curNode.nodeType === 1 /* ParseNodeType.Argument */ && curNode.parent?.nodeType === 10 /* ParseNodeType.Class */) {
|
|
1748
|
+
return true;
|
|
1749
|
+
}
|
|
1750
|
+
if (curNode.nodeType === 50 /* ParseNodeType.Suite */ ||
|
|
1751
|
+
curNode.nodeType === 31 /* ParseNodeType.Function */ ||
|
|
1752
|
+
curNode.nodeType === 33 /* ParseNodeType.Lambda */) {
|
|
1753
|
+
break;
|
|
1754
|
+
}
|
|
1755
|
+
curNode = curNode.parent;
|
|
1756
|
+
}
|
|
1757
|
+
// Old-style TypeAlias assignment: `MyAlias: TypeAlias = list[...]`
|
|
1758
|
+
const assignmentNode = ParseTreeUtils.getParentNodeOfType(node, 3 /* ParseNodeType.Assignment */);
|
|
1759
|
+
if (assignmentNode && assignmentNode.nodeType === 3 /* ParseNodeType.Assignment */) {
|
|
1760
|
+
const leftExpr = assignmentNode.d.leftExpr;
|
|
1761
|
+
if (leftExpr.nodeType === 54 /* ParseNodeType.TypeAnnotation */) {
|
|
1762
|
+
const annotation = leftExpr.d.annotation;
|
|
1763
|
+
if ((annotation.nodeType === 38 /* ParseNodeType.Name */ && annotation.d.value === 'TypeAlias') ||
|
|
1764
|
+
(annotation.nodeType === 35 /* ParseNodeType.MemberAccess */ && annotation.d.member.d.value === 'TypeAlias')) {
|
|
1765
|
+
return true;
|
|
1766
|
+
}
|
|
1767
|
+
}
|
|
1768
|
+
}
|
|
1769
|
+
return false;
|
|
1770
|
+
}
|
|
1674
1771
|
_getLiteralCompletions(parseNode, offset, priorWord, priorText, postText) {
|
|
1675
1772
|
if (this.options.triggerCharacter === '"' || this.options.triggerCharacter === "'") {
|
|
1676
1773
|
if (parseNode.start !== offset - 1) {
|
|
@@ -2094,11 +2191,13 @@ class CompletionProvider {
|
|
|
2094
2191
|
rangeStartCol -= quoteInfo.priorWord.length;
|
|
2095
2192
|
}
|
|
2096
2193
|
// If the text after the insertion point is the closing quote,
|
|
2097
|
-
//
|
|
2194
|
+
// extend the replacement range so we don't end up with a duplicated
|
|
2195
|
+
// quote after the completion is applied.
|
|
2098
2196
|
let rangeEndCol = this.position.character;
|
|
2099
2197
|
if (postText !== undefined) {
|
|
2100
|
-
|
|
2101
|
-
|
|
2198
|
+
const overlap = (0, completionProviderUtils_1.detectTrailingOverlap)(quoteInfo.quoteCharacter, postText, 'adjacent');
|
|
2199
|
+
if (overlap) {
|
|
2200
|
+
rangeEndCol += overlap.consumedChars;
|
|
2102
2201
|
}
|
|
2103
2202
|
}
|
|
2104
2203
|
const range = {
|
|
@@ -2168,7 +2267,7 @@ class CompletionProvider {
|
|
|
2168
2267
|
}
|
|
2169
2268
|
});
|
|
2170
2269
|
}
|
|
2171
|
-
_addNamedParameters(signatureInfo, priorWord, completionMap) {
|
|
2270
|
+
_addNamedParameters(signatureInfo, priorWord, postText, completionMap) {
|
|
2172
2271
|
const argNameSet = new Set();
|
|
2173
2272
|
signatureInfo.signatures.forEach((signature) => {
|
|
2174
2273
|
this._addNamedParametersToMap(signature.type, argNameSet);
|
|
@@ -2202,6 +2301,13 @@ class CompletionProvider {
|
|
|
2202
2301
|
completionItem.data = (0, lspUtils_1.toLSPAny)(completionItemData);
|
|
2203
2302
|
completionItem.sortText = this._makeSortText(SortCategory.NamedParameter, argName);
|
|
2204
2303
|
completionItem.filterText = argName;
|
|
2304
|
+
// If the text immediately after the cursor already starts with
|
|
2305
|
+
// `=`, extend the replacement range so we don't end up with
|
|
2306
|
+
// `argName==` after the completion is applied (pylance-release#4808).
|
|
2307
|
+
const overlap = (0, completionProviderUtils_1.detectTrailingOverlap)('=', postText, 'adjacent');
|
|
2308
|
+
if (overlap) {
|
|
2309
|
+
completionItem.textEdit = this.createReplaceEditWithOverlap(priorWord, overlap, label);
|
|
2310
|
+
}
|
|
2205
2311
|
completionMap.set(completionItem);
|
|
2206
2312
|
}
|
|
2207
2313
|
});
|