@zzzen/pyright-internal 1.2.0-dev.20241208 → 1.2.0-dev.20241222
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 +1 -1
- package/dist/analyzer/analysis.js.map +1 -1
- package/dist/analyzer/analyzerNodeInfo.js +17 -18
- package/dist/analyzer/analyzerNodeInfo.js.map +1 -1
- package/dist/analyzer/backgroundAnalysisProgram.js +18 -35
- package/dist/analyzer/backgroundAnalysisProgram.js.map +1 -1
- package/dist/analyzer/binder.js +38 -55
- package/dist/analyzer/binder.js.map +1 -1
- package/dist/analyzer/checker.js +146 -185
- package/dist/analyzer/checker.js.map +1 -1
- package/dist/analyzer/codeFlowEngine.js +24 -31
- package/dist/analyzer/codeFlowEngine.js.map +1 -1
- package/dist/analyzer/constraintSolver.js +23 -24
- package/dist/analyzer/constraintSolver.js.map +1 -1
- package/dist/analyzer/constraintTracker.js +1 -2
- package/dist/analyzer/constraintTracker.js.map +1 -1
- package/dist/analyzer/constructorTransform.js +10 -12
- package/dist/analyzer/constructorTransform.js.map +1 -1
- package/dist/analyzer/constructors.js +14 -19
- package/dist/analyzer/constructors.js.map +1 -1
- package/dist/analyzer/dataClasses.js +32 -27
- package/dist/analyzer/dataClasses.js.map +1 -1
- package/dist/analyzer/declarationUtils.js +8 -11
- package/dist/analyzer/declarationUtils.js.map +1 -1
- package/dist/analyzer/decorators.js +2 -3
- package/dist/analyzer/decorators.js.map +1 -1
- package/dist/analyzer/docStringConversion.js +6 -8
- package/dist/analyzer/docStringConversion.js.map +1 -1
- package/dist/analyzer/enums.js +12 -13
- package/dist/analyzer/enums.js.map +1 -1
- package/dist/analyzer/functionTransform.js +1 -2
- package/dist/analyzer/functionTransform.js.map +1 -1
- package/dist/analyzer/importResolver.js +18 -27
- package/dist/analyzer/importResolver.js.map +1 -1
- package/dist/analyzer/importStatementUtils.js +4 -5
- package/dist/analyzer/importStatementUtils.js.map +1 -1
- package/dist/analyzer/namedTuples.js +6 -7
- package/dist/analyzer/namedTuples.js.map +1 -1
- package/dist/analyzer/operations.js +14 -17
- package/dist/analyzer/operations.js.map +1 -1
- package/dist/analyzer/packageTypeVerifier.js +48 -50
- package/dist/analyzer/packageTypeVerifier.js.map +1 -1
- package/dist/analyzer/parameterUtils.js +5 -7
- package/dist/analyzer/parameterUtils.js.map +1 -1
- package/dist/analyzer/parentDirectoryCache.js +8 -9
- package/dist/analyzer/parentDirectoryCache.js.map +1 -1
- package/dist/analyzer/parseTreeUtils.js +30 -44
- package/dist/analyzer/parseTreeUtils.js.map +1 -1
- package/dist/analyzer/parseTreeWalker.js +2 -3
- package/dist/analyzer/parseTreeWalker.js.map +1 -1
- package/dist/analyzer/patternMatching.js +18 -20
- package/dist/analyzer/patternMatching.js.map +1 -1
- package/dist/analyzer/program.js +29 -40
- package/dist/analyzer/program.js.map +1 -1
- package/dist/analyzer/properties.js +7 -8
- package/dist/analyzer/properties.js.map +1 -1
- package/dist/analyzer/protocols.js +21 -23
- package/dist/analyzer/protocols.js.map +1 -1
- package/dist/analyzer/pythonPathUtils.js +1 -1
- package/dist/analyzer/pythonPathUtils.js.map +1 -1
- package/dist/analyzer/scope.js +10 -10
- package/dist/analyzer/scope.js.map +1 -1
- package/dist/analyzer/service.js +32 -47
- package/dist/analyzer/service.js.map +1 -1
- package/dist/analyzer/sourceFile.js +21 -26
- package/dist/analyzer/sourceFile.js.map +1 -1
- package/dist/analyzer/sourceFileInfo.js +2 -3
- package/dist/analyzer/sourceFileInfo.js.map +1 -1
- package/dist/analyzer/sourceFileInfoUtils.js +5 -5
- package/dist/analyzer/sourceFileInfoUtils.js.map +1 -1
- package/dist/analyzer/sourceMapper.js +19 -30
- package/dist/analyzer/sourceMapper.js.map +1 -1
- package/dist/analyzer/testWalker.js +1 -2
- package/dist/analyzer/testWalker.js.map +1 -1
- package/dist/analyzer/tracePrinter.js +7 -9
- package/dist/analyzer/tracePrinter.js.map +1 -1
- package/dist/analyzer/tuples.js +11 -13
- package/dist/analyzer/tuples.js.map +1 -1
- package/dist/analyzer/typeCacheUtils.js +5 -6
- package/dist/analyzer/typeCacheUtils.js.map +1 -1
- package/dist/analyzer/typeDocStringUtils.js +7 -11
- package/dist/analyzer/typeDocStringUtils.js.map +1 -1
- package/dist/analyzer/typeEvaluator.js +619 -776
- package/dist/analyzer/typeEvaluator.js.map +1 -1
- package/dist/analyzer/typeEvaluatorTypes.d.ts +1 -1
- package/dist/analyzer/typeEvaluatorWithTracker.js +2 -2
- package/dist/analyzer/typeEvaluatorWithTracker.js.map +1 -1
- package/dist/analyzer/typeGuards.js +26 -36
- package/dist/analyzer/typeGuards.js.map +1 -1
- package/dist/analyzer/typePrinter.js +15 -24
- package/dist/analyzer/typePrinter.js.map +1 -1
- package/dist/analyzer/typeStubWriter.js +1 -2
- package/dist/analyzer/typeStubWriter.js.map +1 -1
- package/dist/analyzer/typeUtils.js +65 -94
- package/dist/analyzer/typeUtils.js.map +1 -1
- package/dist/analyzer/typeWalker.js +4 -8
- package/dist/analyzer/typeWalker.js.map +1 -1
- package/dist/analyzer/typedDicts.js +39 -46
- package/dist/analyzer/typedDicts.js.map +1 -1
- package/dist/analyzer/types.d.ts +1 -0
- package/dist/analyzer/types.js +64 -103
- package/dist/analyzer/types.js.map +1 -1
- package/dist/backgroundAnalysis.js +2 -3
- package/dist/backgroundAnalysis.js.map +1 -1
- package/dist/backgroundAnalysisBase.js +9 -10
- package/dist/backgroundAnalysisBase.js.map +1 -1
- package/dist/backgroundThreadBase.js +6 -7
- package/dist/backgroundThreadBase.js.map +1 -1
- package/dist/commands/createTypeStub.js +1 -1
- package/dist/commands/createTypeStub.js.map +1 -1
- package/dist/commands/dumpFileDebugInfoCommand.js +3 -3
- package/dist/commands/dumpFileDebugInfoCommand.js.map +1 -1
- package/dist/commands/quickActionCommand.js +1 -1
- package/dist/commands/quickActionCommand.js.map +1 -1
- package/dist/common/asyncInitialization.js +1 -1
- package/dist/common/chokidarFileWatcherProvider.js +2 -4
- package/dist/common/chokidarFileWatcherProvider.js.map +1 -1
- package/dist/common/configOptions.js +6 -9
- package/dist/common/configOptions.js.map +1 -1
- package/dist/common/console.js +1 -2
- package/dist/common/console.js.map +1 -1
- package/dist/common/core.js +2 -2
- package/dist/common/core.js.map +1 -1
- package/dist/common/crypto.js +1 -1
- package/dist/common/crypto.js.map +1 -1
- package/dist/common/diagnostic.js +3 -5
- package/dist/common/diagnostic.js.map +1 -1
- package/dist/common/envVarUtils.js +1 -1
- package/dist/common/envVarUtils.js.map +1 -1
- package/dist/common/extensibility.d.ts +1 -0
- package/dist/common/extensibility.js.map +1 -1
- package/dist/common/fileSystem.d.ts +1 -0
- package/dist/common/fileSystem.js.map +1 -1
- package/dist/common/fullAccessHost.js +5 -5
- package/dist/common/fullAccessHost.js.map +1 -1
- package/dist/common/host.js +1 -1
- package/dist/common/host.js.map +1 -1
- package/dist/common/logTracker.js +1 -1
- package/dist/common/logTracker.js.map +1 -1
- package/dist/common/lspUtils.js +1 -2
- package/dist/common/lspUtils.js.map +1 -1
- package/dist/common/progressReporter.js +1 -2
- package/dist/common/progressReporter.js.map +1 -1
- package/dist/common/realFileSystem.js +2 -3
- package/dist/common/realFileSystem.js.map +1 -1
- package/dist/common/serviceProvider.js +1 -1
- package/dist/common/serviceProvider.js.map +1 -1
- package/dist/common/streamUtils.d.ts +2 -0
- package/dist/common/streamUtils.js +29 -0
- package/dist/common/streamUtils.js.map +1 -0
- package/dist/common/textEditTracker.js +4 -6
- package/dist/common/textEditTracker.js.map +1 -1
- package/dist/common/tomlUtils.js +3 -1
- package/dist/common/tomlUtils.js.map +1 -1
- package/dist/common/uri/baseUri.js +1 -1
- package/dist/common/uri/baseUri.js.map +1 -1
- package/dist/common/uri/emptyUri.js +1 -1
- package/dist/common/uri/emptyUri.js.map +1 -1
- package/dist/common/uri/fileUri.js +2 -2
- package/dist/common/uri/fileUri.js.map +1 -1
- package/dist/common/uri/memoization.js +1 -1
- package/dist/common/uri/memoization.js.map +1 -1
- package/dist/common/uri/uri.js +2 -3
- package/dist/common/uri/uri.js.map +1 -1
- package/dist/common/uri/uriUtils.js +6 -8
- package/dist/common/uri/uriUtils.js.map +1 -1
- package/dist/common/uri/webUri.js +2 -2
- package/dist/common/uri/webUri.js.map +1 -1
- package/dist/common/workspaceEditUtils.js +10 -15
- package/dist/common/workspaceEditUtils.js.map +1 -1
- package/dist/languageServerBase.js +34 -42
- package/dist/languageServerBase.js.map +1 -1
- package/dist/languageService/analyzerServiceExecutor.js +8 -10
- package/dist/languageService/analyzerServiceExecutor.js.map +1 -1
- package/dist/languageService/autoImporter.js +16 -19
- package/dist/languageService/autoImporter.js.map +1 -1
- package/dist/languageService/callHierarchyProvider.js +6 -11
- package/dist/languageService/callHierarchyProvider.js.map +1 -1
- package/dist/languageService/completionProvider.js +81 -106
- package/dist/languageService/completionProvider.js.map +1 -1
- package/dist/languageService/completionProviderUtils.js +3 -3
- package/dist/languageService/completionProviderUtils.js.map +1 -1
- package/dist/languageService/definitionProvider.js +6 -9
- package/dist/languageService/definitionProvider.js.map +1 -1
- package/dist/languageService/documentSymbolCollector.js +32 -32
- package/dist/languageService/documentSymbolCollector.js.map +1 -1
- package/dist/languageService/dynamicFeature.js +1 -2
- package/dist/languageService/dynamicFeature.js.map +1 -1
- package/dist/languageService/hoverProvider.js +17 -23
- package/dist/languageService/hoverProvider.js.map +1 -1
- package/dist/languageService/referencesProvider.js +4 -9
- package/dist/languageService/referencesProvider.js.map +1 -1
- package/dist/languageService/renameProvider.js +2 -4
- package/dist/languageService/renameProvider.js.map +1 -1
- package/dist/languageService/signatureHelpProvider.js +11 -15
- package/dist/languageService/signatureHelpProvider.js.map +1 -1
- package/dist/languageService/tooltipUtils.js +15 -17
- package/dist/languageService/tooltipUtils.js.map +1 -1
- package/dist/localization/localize.js +3 -3
- package/dist/localization/localize.js.map +1 -1
- package/dist/localization/package.nls.cs.json +6 -0
- package/dist/localization/package.nls.de.json +6 -0
- package/dist/localization/package.nls.en-us.json +8 -8
- package/dist/localization/package.nls.es.json +6 -0
- package/dist/localization/package.nls.fr.json +7 -1
- package/dist/localization/package.nls.it.json +6 -0
- package/dist/localization/package.nls.ja.json +6 -0
- package/dist/localization/package.nls.ko.json +6 -0
- package/dist/localization/package.nls.pl.json +6 -0
- package/dist/localization/package.nls.pt-br.json +6 -0
- package/dist/localization/package.nls.qps-ploc.json +6 -0
- package/dist/localization/package.nls.ru.json +6 -0
- package/dist/localization/package.nls.tr.json +6 -0
- package/dist/localization/package.nls.zh-cn.json +6 -0
- package/dist/localization/package.nls.zh-tw.json +6 -0
- package/dist/parser/parser.js +30 -38
- package/dist/parser/parser.js.map +1 -1
- package/dist/parser/tokenizer.js +8 -13
- package/dist/parser/tokenizer.js.map +1 -1
- package/dist/pprof/profiler.js +3 -3
- package/dist/pprof/profiler.js.map +1 -1
- package/dist/pyright.js +9 -11
- package/dist/pyright.js.map +1 -1
- package/dist/pyrightFileSystem.js +4 -5
- package/dist/pyrightFileSystem.js.map +1 -1
- package/dist/readonlyAugmentedFileSystem.js +3 -5
- package/dist/readonlyAugmentedFileSystem.js.map +1 -1
- package/dist/server.js +1 -1
- package/dist/server.js.map +1 -1
- package/dist/tests/chainedSourceFiles.test.js +3 -3
- package/dist/tests/chainedSourceFiles.test.js.map +1 -1
- package/dist/tests/classDeclaration.test.js +7 -10
- package/dist/tests/classDeclaration.test.js.map +1 -1
- package/dist/tests/completions.test.js +3 -3
- package/dist/tests/completions.test.js.map +1 -1
- package/dist/tests/config.test.js +10 -15
- package/dist/tests/config.test.js.map +1 -1
- package/dist/tests/diagnosticOverrides.test.js +4 -6
- package/dist/tests/diagnosticOverrides.test.js.map +1 -1
- package/dist/tests/envVarUtils.test.js +9 -12
- package/dist/tests/envVarUtils.test.js.map +1 -1
- package/dist/tests/harness/fourslash/testLanguageService.js +1 -1
- package/dist/tests/harness/fourslash/testLanguageService.js.map +1 -1
- package/dist/tests/harness/fourslash/testState.js +45 -60
- package/dist/tests/harness/fourslash/testState.js.map +1 -1
- package/dist/tests/harness/fourslash/workspaceEditTestUtils.js +6 -7
- package/dist/tests/harness/fourslash/workspaceEditTestUtils.js.map +1 -1
- package/dist/tests/harness/vfs/filesystem.js +3 -3
- package/dist/tests/harness/vfs/filesystem.js.map +1 -1
- package/dist/tests/importResolver.test.js +6 -7
- package/dist/tests/importResolver.test.js.map +1 -1
- package/dist/tests/importStatementUtils.test.js +2 -2
- package/dist/tests/importStatementUtils.test.js.map +1 -1
- package/dist/tests/ipythonMode.test.js +11 -12
- package/dist/tests/ipythonMode.test.js.map +1 -1
- package/dist/tests/languageServer.test.js +1 -2
- package/dist/tests/languageServer.test.js.map +1 -1
- package/dist/tests/lsp/languageServer.js +10 -14
- package/dist/tests/lsp/languageServer.js.map +1 -1
- package/dist/tests/lsp/languageServerTestUtils.js +10 -14
- package/dist/tests/lsp/languageServerTestUtils.js.map +1 -1
- package/dist/tests/parseTreeUtils.test.js +7 -7
- package/dist/tests/parseTreeUtils.test.js.map +1 -1
- package/dist/tests/parser.test.js +2 -2
- package/dist/tests/parser.test.js.map +1 -1
- package/dist/tests/service.test.js +2 -3
- package/dist/tests/service.test.js.map +1 -1
- package/dist/tests/sourceFile.test.js +2 -3
- package/dist/tests/sourceFile.test.js.map +1 -1
- package/dist/tests/sourceMapperUtils.test.js +3 -4
- package/dist/tests/sourceMapperUtils.test.js.map +1 -1
- package/dist/tests/testState.test.js +3 -6
- package/dist/tests/testState.test.js.map +1 -1
- package/dist/tests/testStateUtils.js +3 -4
- package/dist/tests/testStateUtils.js.map +1 -1
- package/dist/tests/textEditUtil.test.js +2 -2
- package/dist/tests/textEditUtil.test.js.map +1 -1
- package/dist/tests/typeEvaluator1.test.js +1 -1
- package/dist/tests/typePrinter.test.js +1 -2
- package/dist/tests/typePrinter.test.js.map +1 -1
- package/dist/tests/workspaceEditUtils.test.js +3 -5
- package/dist/tests/workspaceEditUtils.test.js.map +1 -1
- package/dist/workspaceFactory.js +2 -3
- package/dist/workspaceFactory.js.map +1 -1
- package/package.json +1 -1
@@ -180,7 +180,7 @@ class CompletionProvider {
|
|
180
180
|
return null;
|
181
181
|
}
|
182
182
|
const completionMap = this._getCompletions();
|
183
|
-
return vscode_languageserver_1.CompletionList.create(completionMap
|
183
|
+
return vscode_languageserver_1.CompletionList.create(completionMap?.toArray());
|
184
184
|
}
|
185
185
|
// When the user selects a completion, this callback is invoked,
|
186
186
|
// allowing us to record what was selected. This allows us to
|
@@ -265,7 +265,6 @@ class CompletionProvider {
|
|
265
265
|
return (0, lspUtils_1.fromLSPAny)(item.data);
|
266
266
|
}
|
267
267
|
getMethodOverrideCompletions(priorWord, partialName, decorators) {
|
268
|
-
var _a, _b;
|
269
268
|
const enclosingClass = ParseTreeUtils.getEnclosingClass(partialName, /* stopAtFunction */ true);
|
270
269
|
if (!enclosingClass) {
|
271
270
|
return undefined;
|
@@ -281,15 +280,14 @@ class CompletionProvider {
|
|
281
280
|
(0, typeUtils_1.getMembersForClass)(mroClass, symbolTable, /* includeInstanceVars */ false);
|
282
281
|
}
|
283
282
|
}
|
284
|
-
const staticmethod =
|
285
|
-
const classmethod =
|
283
|
+
const staticmethod = decorators?.some((d) => ParseTreeUtils.checkDecorator(d, 'staticmethod')) ?? false;
|
284
|
+
const classmethod = decorators?.some((d) => ParseTreeUtils.checkDecorator(d, 'classmethod')) ?? false;
|
286
285
|
const completionMap = new CompletionMap();
|
287
286
|
symbolTable.forEach((symbol, name) => {
|
288
|
-
var _a;
|
289
287
|
let decl = (0, symbolUtils_1.getLastTypedDeclarationForSymbol)(symbol);
|
290
288
|
if (decl && decl.type === 5 /* DeclarationType.Function */) {
|
291
289
|
if (StringUtils.isPatternInSymbol(partialName.d.value, name)) {
|
292
|
-
const declaredType =
|
290
|
+
const declaredType = this.evaluator.getTypeForDeclaration(decl)?.type;
|
293
291
|
if (!declaredType) {
|
294
292
|
return;
|
295
293
|
}
|
@@ -383,8 +381,7 @@ class CompletionProvider {
|
|
383
381
|
return results;
|
384
382
|
}
|
385
383
|
function convertToString(parameter) {
|
386
|
-
|
387
|
-
const name = (_a = parameter[0].d.name) === null || _a === void 0 ? void 0 : _a.d.value;
|
384
|
+
const name = parameter[0].d.name?.d.value;
|
388
385
|
if (parameter[0].d.category === 1 /* ParamCategory.ArgsList */) {
|
389
386
|
return `*${name}`;
|
390
387
|
}
|
@@ -395,7 +392,7 @@ class CompletionProvider {
|
|
395
392
|
}
|
396
393
|
}
|
397
394
|
createReplaceEdits(priorWord, node, text) {
|
398
|
-
const replaceOrInsertEndChar =
|
395
|
+
const replaceOrInsertEndChar = node?.nodeType === 38 /* ParseNodeType.Name */
|
399
396
|
? this.position.character - priorWord.length + node.d.value.length
|
400
397
|
: this.position.character;
|
401
398
|
const range = {
|
@@ -409,7 +406,6 @@ class CompletionProvider {
|
|
409
406
|
return true;
|
410
407
|
}
|
411
408
|
addSymbol(name, symbol, priorWord, completionMap, detail) {
|
412
|
-
var _a, _b, _c, _d;
|
413
409
|
// Make sure we don't crash due to OOM.
|
414
410
|
this.program.handleMemoryHighUsage();
|
415
411
|
let primaryDecl = (0, symbolUtils_1.getLastTypedDeclarationForSymbol)(symbol);
|
@@ -423,7 +419,7 @@ class CompletionProvider {
|
|
423
419
|
return;
|
424
420
|
}
|
425
421
|
primaryDecl = primaryDecl
|
426
|
-
?
|
422
|
+
? this.evaluator.resolveAliasDeclaration(primaryDecl, /* resolveLocalNames */ true) ?? primaryDecl
|
427
423
|
: undefined;
|
428
424
|
const autoImportText = detail.autoImportSource
|
429
425
|
? this.getAutoImportText(name, detail.autoImportSource, detail.autoImportAlias)
|
@@ -437,7 +433,7 @@ class CompletionProvider {
|
|
437
433
|
return;
|
438
434
|
}
|
439
435
|
if (this.itemToResolve.additionalTextEdits === undefined &&
|
440
|
-
|
436
|
+
detail.edits?.additionalTextEdits !== undefined) {
|
441
437
|
this.itemToResolve.additionalTextEdits = (0, workspaceEditUtils_1.convertToTextEdits)(detail.edits.additionalTextEdits);
|
442
438
|
}
|
443
439
|
if (completionItemData.autoImportText) {
|
@@ -473,7 +469,7 @@ class CompletionProvider {
|
|
473
469
|
if (this._isEnumMember(detail.boundObjectOrClass, name)) {
|
474
470
|
itemKind = vscode_languageserver_1.CompletionItemKind.EnumMember;
|
475
471
|
}
|
476
|
-
this.addNameToCompletions(
|
472
|
+
this.addNameToCompletions(detail.autoImportAlias ?? name, itemKind, priorWord, completionMap, {
|
477
473
|
autoImportText,
|
478
474
|
extraCommitChars: detail.extraCommitChars,
|
479
475
|
funcParensDisabled: detail.funcParensDisabled,
|
@@ -482,7 +478,7 @@ class CompletionProvider {
|
|
482
478
|
}
|
483
479
|
else {
|
484
480
|
// Does the symbol have no declaration but instead has a synthesized type?
|
485
|
-
const synthesizedType =
|
481
|
+
const synthesizedType = symbol.getSynthesizedType()?.type;
|
486
482
|
if (synthesizedType) {
|
487
483
|
const itemKind = this._convertTypeToItemKind(synthesizedType);
|
488
484
|
this.addNameToCompletions(name, itemKind, priorWord, completionMap, {
|
@@ -561,7 +557,6 @@ class CompletionProvider {
|
|
561
557
|
this.addImportResults(results, priorWord, completionMap, parensDisabled);
|
562
558
|
}
|
563
559
|
addImportResults(results, priorWord, completionMap, parensDisabled) {
|
564
|
-
var _a, _b;
|
565
560
|
for (const result of results) {
|
566
561
|
if (result.symbol) {
|
567
562
|
this.addSymbol(result.name, result.symbol, priorWord, completionMap, {
|
@@ -576,7 +571,7 @@ class CompletionProvider {
|
|
576
571
|
});
|
577
572
|
}
|
578
573
|
else {
|
579
|
-
this.addNameToCompletions(
|
574
|
+
this.addNameToCompletions(result.alias ?? result.name, result.kind ?? vscode_languageserver_1.CompletionItemKind.Module, priorWord, completionMap, {
|
580
575
|
extraCommitChars: true,
|
581
576
|
autoImportText: this.getAutoImportText(result.name, result.source, result.alias),
|
582
577
|
edits: {
|
@@ -592,36 +587,35 @@ class CompletionProvider {
|
|
592
587
|
// extra commit char is not supported.
|
593
588
|
}
|
594
589
|
addNameToCompletions(name, itemKind, filter, completionMap, detail) {
|
595
|
-
var _a, _b, _c, _d;
|
596
590
|
// Auto importer already filtered out unnecessary ones. No need to do it again.
|
597
|
-
const similarity =
|
591
|
+
const similarity = detail?.autoImportText ? true : StringUtils.isPatternInSymbol(filter, name);
|
598
592
|
if (!similarity) {
|
599
593
|
return;
|
600
594
|
}
|
601
|
-
if (completionMap.has(name, (i) => CompletionMap.matchKindAndImportText(i, this.getCompletionItemData.bind(this)), itemKind,
|
595
|
+
if (completionMap.has(name, (i) => CompletionMap.matchKindAndImportText(i, this.getCompletionItemData.bind(this)), itemKind, detail?.autoImportText?.importText)) {
|
602
596
|
return;
|
603
597
|
}
|
604
598
|
const completionItem = vscode_languageserver_1.CompletionItem.create(name);
|
605
599
|
completionItem.kind = itemKind;
|
606
|
-
if (detail
|
600
|
+
if (detail?.extraCommitChars) {
|
607
601
|
this.addExtraCommitChar(completionItem);
|
608
602
|
}
|
609
603
|
const completionItemData = {
|
610
604
|
uri: this.fileUri.toString(),
|
611
605
|
position: this.position,
|
612
606
|
};
|
613
|
-
if (
|
607
|
+
if (detail?.funcParensDisabled || !this.options.snippet) {
|
614
608
|
completionItemData.funcParensDisabled = true;
|
615
609
|
}
|
616
|
-
if (detail
|
610
|
+
if (detail?.moduleUri) {
|
617
611
|
completionItemData.moduleUri = detail.moduleUri.toString();
|
618
612
|
}
|
619
613
|
completionItem.data = (0, lspUtils_1.toLSPAny)(completionItemData);
|
620
|
-
if (
|
614
|
+
if (detail?.sortText || detail?.itemDetail) {
|
621
615
|
completionItem.sortText = detail.sortText;
|
622
616
|
completionItem.detail = detail.itemDetail;
|
623
617
|
}
|
624
|
-
else if (detail
|
618
|
+
else if (detail?.autoImportText) {
|
625
619
|
// Force auto-import entries to the end.
|
626
620
|
completionItem.sortText = this._makeSortText(SortCategory.AutoImport, `${name}.${this._formatInteger(detail.autoImportText.source.length, 2)}.${detail.autoImportText.source}`, detail.autoImportText.importText);
|
627
621
|
completionItemData.autoImportText = detail.autoImportText.importText;
|
@@ -650,17 +644,17 @@ class CompletionProvider {
|
|
650
644
|
completionItemData.symbolLabel = name;
|
651
645
|
if (this.options.format === vscode_languageserver_1.MarkupKind.Markdown) {
|
652
646
|
let markdownString = '';
|
653
|
-
if (detail
|
647
|
+
if (detail?.autoImportText) {
|
654
648
|
markdownString += detail.autoImportText.importText;
|
655
649
|
if (detail.typeDetail || detail.documentation) {
|
656
650
|
// Micro perf optimization to not create new string from trimEnd.
|
657
651
|
markdownString += '\n\n';
|
658
652
|
}
|
659
653
|
}
|
660
|
-
if (detail
|
654
|
+
if (detail?.typeDetail) {
|
661
655
|
markdownString += '```python\n' + detail.typeDetail + '\n```\n';
|
662
656
|
}
|
663
|
-
if (detail
|
657
|
+
if (detail?.documentation) {
|
664
658
|
markdownString += '---\n';
|
665
659
|
markdownString += this.program.serviceProvider
|
666
660
|
.docStringService()
|
@@ -676,17 +670,17 @@ class CompletionProvider {
|
|
676
670
|
}
|
677
671
|
else if (this.options.format === vscode_languageserver_1.MarkupKind.PlainText) {
|
678
672
|
let plainTextString = '';
|
679
|
-
if (detail
|
673
|
+
if (detail?.autoImportText) {
|
680
674
|
plainTextString += detail.autoImportText.importText;
|
681
675
|
if (detail.typeDetail || detail.documentation) {
|
682
676
|
// Micro perf optimization to not create new string from trimEnd.
|
683
677
|
plainTextString += '\n\n';
|
684
678
|
}
|
685
679
|
}
|
686
|
-
if (detail
|
680
|
+
if (detail?.typeDetail) {
|
687
681
|
plainTextString += detail.typeDetail + '\n';
|
688
682
|
}
|
689
|
-
if (detail
|
683
|
+
if (detail?.documentation) {
|
690
684
|
plainTextString +=
|
691
685
|
'\n' +
|
692
686
|
this.program.serviceProvider.docStringService().convertDocStringToPlainText(detail.documentation);
|
@@ -702,13 +696,13 @@ class CompletionProvider {
|
|
702
696
|
else {
|
703
697
|
(0, debug_1.fail)(`Unsupported markup type: ${this.options.format}`);
|
704
698
|
}
|
705
|
-
if (
|
699
|
+
if (detail?.edits?.format) {
|
706
700
|
completionItem.insertTextFormat = detail.edits.format;
|
707
701
|
}
|
708
|
-
if (
|
702
|
+
if (detail?.edits?.textEdit) {
|
709
703
|
completionItem.textEdit = detail.edits.textEdit;
|
710
704
|
}
|
711
|
-
if (
|
705
|
+
if (detail?.edits?.additionalTextEdits) {
|
712
706
|
completionItem.additionalTextEdits = (0, workspaceEditUtils_1.convertToTextEdits)(detail.edits.additionalTextEdits);
|
713
707
|
// This is for auto import entries from indices which skip symbols.
|
714
708
|
if (this.itemToResolve) {
|
@@ -733,16 +727,14 @@ class CompletionProvider {
|
|
733
727
|
(0, debug_1.fail)(`Unsupported markup type: ${this.options.format}`);
|
734
728
|
}
|
735
729
|
return {
|
736
|
-
source: importFrom
|
730
|
+
source: importFrom ?? '',
|
737
731
|
importText,
|
738
732
|
};
|
739
733
|
}
|
740
734
|
get _fileContents() {
|
741
|
-
|
742
|
-
return (_b = (_a = this.parseResults) === null || _a === void 0 ? void 0 : _a.text) !== null && _b !== void 0 ? _b : '';
|
735
|
+
return this.parseResults?.text ?? '';
|
743
736
|
}
|
744
737
|
_getCompletions() {
|
745
|
-
var _a, _b;
|
746
738
|
const offset = (0, positionUtils_1.convertPositionToOffset)(this.position, this.parseResults.tokenizerOutput.lines);
|
747
739
|
if (offset === undefined) {
|
748
740
|
return undefined;
|
@@ -750,7 +742,7 @@ class CompletionProvider {
|
|
750
742
|
let node = ParseTreeUtils.findNodeByOffset(this.parseResults.parserOutput.parseTree, offset);
|
751
743
|
// See if we're inside a string literal or an f-string statement.
|
752
744
|
const token = ParseTreeUtils.getTokenOverlapping(this.parseResults.tokenizerOutput.tokens, offset);
|
753
|
-
if (
|
745
|
+
if (token?.type === 5 /* TokenType.String */) {
|
754
746
|
const stringToken = token;
|
755
747
|
this._stringLiteralContainer = textRange_1.TextRange.contains(stringToken, offset)
|
756
748
|
? stringToken
|
@@ -788,7 +780,7 @@ class CompletionProvider {
|
|
788
780
|
node = curNode;
|
789
781
|
// If we're at the end of a list with a hanging comma, handle the
|
790
782
|
// special case of "from x import y, ".
|
791
|
-
if (sawComma &&
|
783
|
+
if (sawComma && node.parent?.nodeType === 26 /* ParseNodeType.ImportFromAs */) {
|
792
784
|
node = node.parent;
|
793
785
|
}
|
794
786
|
}
|
@@ -848,7 +840,7 @@ class CompletionProvider {
|
|
848
840
|
}
|
849
841
|
const dictionaryEntry = ParseTreeUtils.getFirstAncestorOrSelfOfKind(curNode, 20 /* ParseNodeType.DictionaryKeyEntry */);
|
850
842
|
if (dictionaryEntry) {
|
851
|
-
if (
|
843
|
+
if (dictionaryEntry.parent?.nodeType === 18 /* ParseNodeType.Dictionary */) {
|
852
844
|
const dictionaryNode = dictionaryEntry.parent;
|
853
845
|
if (dictionaryNode.d.trailingCommaToken && dictionaryNode.d.trailingCommaToken.start < offset) {
|
854
846
|
const completionMap = new CompletionMap();
|
@@ -919,7 +911,6 @@ class CompletionProvider {
|
|
919
911
|
// tree. It returns CompletionResults or undefined if it wants the
|
920
912
|
// caller to return.
|
921
913
|
_tryGetNameCompletions(curNode, offset, priorWord, priorText, postText) {
|
922
|
-
var _a, _b, _c, _d;
|
923
914
|
if (!curNode.parent) {
|
924
915
|
return false;
|
925
916
|
}
|
@@ -964,7 +955,7 @@ class CompletionProvider {
|
|
964
955
|
return undefined;
|
965
956
|
}
|
966
957
|
if (curNode.parent.nodeType === 31 /* ParseNodeType.Function */ && curNode === curNode.parent.d.name) {
|
967
|
-
if (
|
958
|
+
if (curNode.parent.d.decorators?.some((d) => this._isOverload(d))) {
|
968
959
|
return this._getMethodOverloadsCompletions(priorWord, curNode);
|
969
960
|
}
|
970
961
|
return undefined;
|
@@ -992,8 +983,8 @@ class CompletionProvider {
|
|
992
983
|
if (leftNode !== curNode || priorWord.length === 0) {
|
993
984
|
return false;
|
994
985
|
}
|
995
|
-
const decls =
|
996
|
-
if (
|
986
|
+
const decls = this.evaluator.getDeclInfoForNameNode(curNode)?.decls;
|
987
|
+
if (decls?.length !== 1 || !(0, declaration_1.isVariableDeclaration)(decls[0]) || decls[0].node !== curNode) {
|
997
988
|
return false;
|
998
989
|
}
|
999
990
|
const completionMap = this._getExpressionCompletions(curNode, priorWord, priorText, postText);
|
@@ -1006,8 +997,8 @@ class CompletionProvider {
|
|
1006
997
|
// ex) class A:
|
1007
998
|
// variable = 1
|
1008
999
|
if (curNode.parent.nodeType === 47 /* ParseNodeType.StatementList */ &&
|
1009
|
-
|
1010
|
-
|
1000
|
+
curNode.parent.parent?.nodeType === 50 /* ParseNodeType.Suite */ &&
|
1001
|
+
curNode.parent.parent.parent?.nodeType === 10 /* ParseNodeType.Class */) {
|
1011
1002
|
const completionList = this._getClassVariableCompletions(curNode);
|
1012
1003
|
if (completionList) {
|
1013
1004
|
return completionList;
|
@@ -1016,13 +1007,12 @@ class CompletionProvider {
|
|
1016
1007
|
return false;
|
1017
1008
|
}
|
1018
1009
|
_isWithinComment(offset) {
|
1019
|
-
var _a, _b;
|
1020
1010
|
const token = getTokenAfter(offset, this.parseResults.tokenizerOutput.tokens);
|
1021
1011
|
if (!token) {
|
1022
1012
|
// If we're in the middle of a token, we're not in a comment.
|
1023
1013
|
return false;
|
1024
1014
|
}
|
1025
|
-
return
|
1015
|
+
return token.comments?.some((c) => textRange_1.TextRange.overlaps(c, offset)) ?? false;
|
1026
1016
|
function getTokenAfter(offset, tokens) {
|
1027
1017
|
const tokenIndex = tokens.getItemAtPosition(offset);
|
1028
1018
|
if (tokenIndex < 0) {
|
@@ -1053,7 +1043,6 @@ class CompletionProvider {
|
|
1053
1043
|
}
|
1054
1044
|
}
|
1055
1045
|
_getExpressionErrorCompletions(node, offset, priorWord, priorText, postText) {
|
1056
|
-
var _a;
|
1057
1046
|
// Is the error due to a missing member access name? If so,
|
1058
1047
|
// we can evaluate the left side of the member access expression
|
1059
1048
|
// to determine its type and offer suggestions based on it.
|
@@ -1074,7 +1063,7 @@ class CompletionProvider {
|
|
1074
1063
|
const prevToken = ParseTreeUtils.getTokenAtIndex(tokenizerOutput.tokens, index - 1);
|
1075
1064
|
if (node.d.category === 2 /* ErrorExpressionCategory.MissingExpression */) {
|
1076
1065
|
// Skip dots on expressions.
|
1077
|
-
if (
|
1066
|
+
if (token?.type === 20 /* TokenType.Dot */ || token?.type === 19 /* TokenType.Ellipsis */) {
|
1078
1067
|
break;
|
1079
1068
|
}
|
1080
1069
|
// ex) class MyType:
|
@@ -1086,15 +1075,15 @@ class CompletionProvider {
|
|
1086
1075
|
// since parser won't see "is" as partially written member name instead it will see it as
|
1087
1076
|
// expression statement with missing expression after "is" keyword.
|
1088
1077
|
// In such case, use "MyType." to get completion.
|
1089
|
-
if (
|
1078
|
+
if (token?.type !== 8 /* TokenType.Keyword */ || textRange_1.TextRange.getEnd(token) !== offset) {
|
1090
1079
|
return this._getExpressionCompletions(node, priorWord, priorText, postText);
|
1091
1080
|
}
|
1092
|
-
if (
|
1081
|
+
if (prevToken?.type !== 20 /* TokenType.Dot */) {
|
1093
1082
|
return this._getExpressionCompletions(node, priorWord, priorText, postText);
|
1094
1083
|
}
|
1095
1084
|
const previousOffset = textRange_1.TextRange.getEnd(prevToken);
|
1096
1085
|
const previousNode = ParseTreeUtils.findNodeByOffset(this.parseResults.parserOutput.parseTree, previousOffset);
|
1097
|
-
if (
|
1086
|
+
if (previousNode?.nodeType !== 0 /* ParseNodeType.Error */ ||
|
1098
1087
|
previousNode.d.category !== 7 /* ErrorExpressionCategory.MissingMemberAccessName */) {
|
1099
1088
|
return this._getExpressionCompletions(node, priorWord, priorText, postText);
|
1100
1089
|
}
|
@@ -1105,8 +1094,8 @@ class CompletionProvider {
|
|
1105
1094
|
}
|
1106
1095
|
else if (node.d.category === 7 /* ErrorExpressionCategory.MissingMemberAccessName */) {
|
1107
1096
|
// Skip double dots on member access.
|
1108
|
-
if ((
|
1109
|
-
(
|
1097
|
+
if ((token?.type === 20 /* TokenType.Dot */ || token?.type === 19 /* TokenType.Ellipsis */) &&
|
1098
|
+
(prevToken?.type === 20 /* TokenType.Dot */ || prevToken?.type === 19 /* TokenType.Ellipsis */)) {
|
1110
1099
|
return undefined;
|
1111
1100
|
}
|
1112
1101
|
}
|
@@ -1125,7 +1114,7 @@ class CompletionProvider {
|
|
1125
1114
|
}
|
1126
1115
|
case 10 /* ErrorExpressionCategory.MissingFunctionParameterList */: {
|
1127
1116
|
if (node.d.child && node.d.child.nodeType === 38 /* ParseNodeType.Name */) {
|
1128
|
-
if (
|
1117
|
+
if (node.d.decorators?.some((d) => this._isOverload(d))) {
|
1129
1118
|
return this._getMethodOverloadsCompletions(priorWord, node.d.child);
|
1130
1119
|
}
|
1131
1120
|
// Determine if the partial name is a method that's overriding
|
@@ -1158,15 +1147,14 @@ class CompletionProvider {
|
|
1158
1147
|
return completionMap;
|
1159
1148
|
}
|
1160
1149
|
_addClassVariableTypeAnnotationCompletions(priorWord, parseNode, completionMap) {
|
1161
|
-
var _a, _b, _c, _d;
|
1162
1150
|
// class T:
|
1163
1151
|
// f: |<= here
|
1164
|
-
const isTypeAnnotationOfClassVariable =
|
1152
|
+
const isTypeAnnotationOfClassVariable = parseNode.parent?.nodeType === 54 /* ParseNodeType.TypeAnnotation */ &&
|
1165
1153
|
parseNode.parent.d.valueExpr.nodeType === 38 /* ParseNodeType.Name */ &&
|
1166
1154
|
parseNode.parent.d.annotation === parseNode &&
|
1167
|
-
|
1168
|
-
|
1169
|
-
|
1155
|
+
parseNode.parent.parent?.nodeType === 47 /* ParseNodeType.StatementList */ &&
|
1156
|
+
parseNode.parent.parent.parent?.nodeType === 50 /* ParseNodeType.Suite */ &&
|
1157
|
+
parseNode.parent.parent.parent.parent?.nodeType === 10 /* ParseNodeType.Class */;
|
1170
1158
|
if (!isTypeAnnotationOfClassVariable) {
|
1171
1159
|
return;
|
1172
1160
|
}
|
@@ -1264,12 +1252,11 @@ class CompletionProvider {
|
|
1264
1252
|
return completionMap.size > 0 ? completionMap : undefined;
|
1265
1253
|
}
|
1266
1254
|
_getMethodOverloadsCompletions(priorWord, partialName) {
|
1267
|
-
var _a;
|
1268
1255
|
const symbolTable = getSymbolTable(this.evaluator, partialName);
|
1269
1256
|
if (!symbolTable) {
|
1270
1257
|
return undefined;
|
1271
1258
|
}
|
1272
|
-
const funcParensDisabled =
|
1259
|
+
const funcParensDisabled = partialName.parent?.nodeType === 31 /* ParseNodeType.Function */ ? true : undefined;
|
1273
1260
|
const completionMap = new CompletionMap();
|
1274
1261
|
const enclosingFunc = ParseTreeUtils.getEnclosingFunction(partialName);
|
1275
1262
|
symbolTable.forEach((symbol, name) => {
|
@@ -1314,7 +1301,7 @@ class CompletionProvider {
|
|
1314
1301
|
const moduleNode = ParseTreeUtils.getEnclosingModule(partialName);
|
1315
1302
|
if (moduleNode) {
|
1316
1303
|
const moduleScope = AnalyzerNodeInfo.getScope(moduleNode);
|
1317
|
-
return moduleScope
|
1304
|
+
return moduleScope?.symbolTable;
|
1318
1305
|
}
|
1319
1306
|
return undefined;
|
1320
1307
|
}
|
@@ -1354,7 +1341,7 @@ class CompletionProvider {
|
|
1354
1341
|
}
|
1355
1342
|
if (param.d.defaultValue) {
|
1356
1343
|
paramString += paramTypeAnnotation ? ' = ' : '=';
|
1357
|
-
const useEllipsis = ellipsisForDefault
|
1344
|
+
const useEllipsis = ellipsisForDefault ?? !ParseTreeUtils.isSimpleDefault(param.d.defaultValue);
|
1358
1345
|
paramString += useEllipsis
|
1359
1346
|
? '...'
|
1360
1347
|
: ParseTreeUtils.printExpression(param.d.defaultValue, printFlags);
|
@@ -1380,7 +1367,6 @@ class CompletionProvider {
|
|
1380
1367
|
return this._getExpressionCompletions(parseNode, priorWord, priorText, postText);
|
1381
1368
|
}
|
1382
1369
|
_getExpressionCompletions(parseNode, priorWord, priorText, postText) {
|
1383
|
-
var _a, _b, _c;
|
1384
1370
|
const isIndexArgument = this._isIndexArgument(parseNode);
|
1385
1371
|
// If the user typed a "." as part of a number, don't present
|
1386
1372
|
// any completion options.
|
@@ -1389,8 +1375,8 @@ class CompletionProvider {
|
|
1389
1375
|
}
|
1390
1376
|
// Are we within a "with Y as []"?
|
1391
1377
|
// Don't add any completion options.
|
1392
|
-
if (
|
1393
|
-
parseNode.parent ===
|
1378
|
+
if (parseNode.parent?.nodeType === 59 /* ParseNodeType.WithItem */ &&
|
1379
|
+
parseNode.parent === parseNode.parent.d.target?.parent) {
|
1394
1380
|
return undefined;
|
1395
1381
|
}
|
1396
1382
|
const completionMap = new CompletionMap();
|
@@ -1420,7 +1406,7 @@ class CompletionProvider {
|
|
1420
1406
|
// Add auto-import suggestions from other modules.
|
1421
1407
|
// Ignore this check for privates, since they are not imported.
|
1422
1408
|
if (!priorWord.startsWith('_') && !this.itemToResolve) {
|
1423
|
-
const parensDisabled =
|
1409
|
+
const parensDisabled = parseNode.parent?.nodeType === 16 /* ParseNodeType.Decorator */;
|
1424
1410
|
this.addAutoImportCompletions(priorWord, similarityLimit, this.options.lazyEdit, completionMap, parensDisabled);
|
1425
1411
|
}
|
1426
1412
|
// Add literal values if appropriate.
|
@@ -1494,7 +1480,7 @@ class CompletionProvider {
|
|
1494
1480
|
return [];
|
1495
1481
|
}
|
1496
1482
|
return node.d.items.flatMap((entry) => {
|
1497
|
-
if (entry.nodeType !== 20 /* ParseNodeType.DictionaryKeyEntry */ ||
|
1483
|
+
if (entry.nodeType !== 20 /* ParseNodeType.DictionaryKeyEntry */ || excludeIds?.has(entry.d.keyExpr.id)) {
|
1498
1484
|
return [];
|
1499
1485
|
}
|
1500
1486
|
if (entry.d.keyExpr.nodeType === 48 /* ParseNodeType.StringList */) {
|
@@ -1545,7 +1531,6 @@ class CompletionProvider {
|
|
1545
1531
|
return undefined;
|
1546
1532
|
}
|
1547
1533
|
_getIndexKeys(indexNode, invocationNode) {
|
1548
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
|
1549
1534
|
const baseType = this.evaluator.getType(indexNode.d.leftExpr);
|
1550
1535
|
if (!baseType || !(0, types_1.isClassInstance)(baseType)) {
|
1551
1536
|
return [];
|
@@ -1573,7 +1558,7 @@ class CompletionProvider {
|
|
1573
1558
|
return [];
|
1574
1559
|
}
|
1575
1560
|
// Must be local variable/parameter
|
1576
|
-
const declarations =
|
1561
|
+
const declarations = this.evaluator.getDeclInfoForNameNode(indexNode.d.leftExpr)?.decls ?? [];
|
1577
1562
|
const declaration = declarations.length > 0 ? declarations[0] : undefined;
|
1578
1563
|
if (!declaration ||
|
1579
1564
|
(declaration.type !== 1 /* DeclarationType.Variable */ && declaration.type !== 2 /* DeclarationType.Param */)) {
|
@@ -1586,16 +1571,16 @@ class CompletionProvider {
|
|
1586
1571
|
if (declaration.node) {
|
1587
1572
|
const scopeRoot = ParseTreeUtils.getEvaluationScopeNode(declaration.node).node;
|
1588
1573
|
// Find the lowest tree to search the symbol.
|
1589
|
-
if (
|
1574
|
+
if (ParseTreeUtils.getFileInfoFromNode(startingNode)?.fileUri.equals(ParseTreeUtils.getFileInfoFromNode(scopeRoot)?.fileUri)) {
|
1590
1575
|
startingNode = scopeRoot;
|
1591
1576
|
}
|
1592
1577
|
}
|
1593
1578
|
const results = documentSymbolCollector_1.DocumentSymbolCollector.collectFromNode(this.program, indexNode.d.leftExpr, this.cancellationToken, startingNode);
|
1594
1579
|
const keys = new Set();
|
1595
1580
|
for (const result of results) {
|
1596
|
-
const node =
|
1597
|
-
if (
|
1598
|
-
|
1581
|
+
const node = result.node.parent?.nodeType === 54 /* ParseNodeType.TypeAnnotation */ ? result.node.parent : result.node;
|
1582
|
+
if (node.parent?.nodeType === 3 /* ParseNodeType.Assignment */ ||
|
1583
|
+
node.parent?.nodeType === 4 /* ParseNodeType.AssignmentExpression */) {
|
1599
1584
|
if (node.parent.d.rightExpr.nodeType === 18 /* ParseNodeType.Dictionary */) {
|
1600
1585
|
const dictionary = node.parent.d.rightExpr;
|
1601
1586
|
for (const entry of dictionary.d.items.filter((e) => e.nodeType === 20 /* ParseNodeType.DictionaryKeyEntry */)) {
|
@@ -1611,7 +1596,7 @@ class CompletionProvider {
|
|
1611
1596
|
continue;
|
1612
1597
|
}
|
1613
1598
|
for (const arg of call.d.args) {
|
1614
|
-
const key =
|
1599
|
+
const key = arg.d.name?.d.value.trim() ?? '';
|
1615
1600
|
const quote = this.parseResults.tokenizerOutput.predominantSingleQuoteCharacter;
|
1616
1601
|
if (key.length > 0) {
|
1617
1602
|
keys.add(`${quote}${key}${quote}`);
|
@@ -1619,7 +1604,7 @@ class CompletionProvider {
|
|
1619
1604
|
}
|
1620
1605
|
}
|
1621
1606
|
}
|
1622
|
-
if (
|
1607
|
+
if (node.parent?.nodeType === 27 /* ParseNodeType.Index */ &&
|
1623
1608
|
node.parent.d.items.length === 1 &&
|
1624
1609
|
node.parent.d.items[0].d.valueExpr.nodeType !== 0 /* ParseNodeType.Error */ &&
|
1625
1610
|
!textRange_1.TextRange.containsRange(node.parent, invocationNode)) {
|
@@ -1648,7 +1633,6 @@ class CompletionProvider {
|
|
1648
1633
|
return completionMap;
|
1649
1634
|
}
|
1650
1635
|
_tryAddLiterals(parseNode, priorWord, priorText, postText, completionMap) {
|
1651
|
-
var _a, _b, _c, _d, _e, _f;
|
1652
1636
|
const parentAndChild = getParentSkippingStringList(parseNode);
|
1653
1637
|
if (!parentAndChild) {
|
1654
1638
|
return false;
|
@@ -1677,10 +1661,10 @@ class CompletionProvider {
|
|
1677
1661
|
let dictOrSet;
|
1678
1662
|
if (nodeForKey.nodeType === 20 /* ParseNodeType.DictionaryKeyEntry */ &&
|
1679
1663
|
nodeForKey.d.keyExpr === parentAndChild.child &&
|
1680
|
-
|
1664
|
+
nodeForKey.parent?.nodeType === 18 /* ParseNodeType.Dictionary */) {
|
1681
1665
|
dictOrSet = nodeForKey.parent;
|
1682
1666
|
}
|
1683
|
-
else if (
|
1667
|
+
else if (nodeForKey?.nodeType === 45 /* ParseNodeType.Set */) {
|
1684
1668
|
dictOrSet = nodeForKey;
|
1685
1669
|
}
|
1686
1670
|
if (dictOrSet) {
|
@@ -1692,7 +1676,7 @@ class CompletionProvider {
|
|
1692
1676
|
// a: DictType = { .... }
|
1693
1677
|
// a[/* here */] or a['/* here */'] or a[variable/*here*/]
|
1694
1678
|
const argument = parentAndChild.parent;
|
1695
|
-
if (argument.nodeType === 1 /* ParseNodeType.Argument */ &&
|
1679
|
+
if (argument.nodeType === 1 /* ParseNodeType.Argument */ && argument.parent?.nodeType === 27 /* ParseNodeType.Index */) {
|
1696
1680
|
const priorTextInString = parseNode.nodeType === 49 /* ParseNodeType.String */ ? priorText : '';
|
1697
1681
|
if (this._tryAddTypedDictKeysFromIndexer(argument.parent, priorWord, priorTextInString, postText, completionMap)) {
|
1698
1682
|
return true;
|
@@ -1757,7 +1741,7 @@ class CompletionProvider {
|
|
1757
1741
|
caseNode.d.pattern.nodeType === 0 /* ParseNodeType.Error */ &&
|
1758
1742
|
caseNode.d.pattern.d.category === 11 /* ErrorExpressionCategory.MissingPattern */ &&
|
1759
1743
|
caseNode.d.suite === parentAndChild.child &&
|
1760
|
-
|
1744
|
+
caseNode.parent?.nodeType === 63 /* ParseNodeType.Match */) {
|
1761
1745
|
const type = this.evaluator.getType(caseNode.parent.d.expr);
|
1762
1746
|
if (type && (0, typeUtils_1.containsLiteralType)(type)) {
|
1763
1747
|
this._addLiteralValuesForTargetType(type, priorWord, priorText, postText, completionMap);
|
@@ -1770,9 +1754,9 @@ class CompletionProvider {
|
|
1770
1754
|
const patternLiteral = parentAndChild.parent;
|
1771
1755
|
if ((patternLiteral.nodeType === 67 /* ParseNodeType.PatternLiteral */ ||
|
1772
1756
|
patternLiteral.nodeType === 69 /* ParseNodeType.PatternCapture */) &&
|
1773
|
-
|
1774
|
-
|
1775
|
-
|
1757
|
+
patternLiteral.parent?.nodeType === 66 /* ParseNodeType.PatternAs */ &&
|
1758
|
+
patternLiteral.parent.parent?.nodeType === 64 /* ParseNodeType.Case */ &&
|
1759
|
+
patternLiteral.parent.parent.parent?.nodeType === 63 /* ParseNodeType.Match */) {
|
1776
1760
|
const type = this.evaluator.getType(patternLiteral.parent.parent.parent.d.expr);
|
1777
1761
|
if (type && (0, typeUtils_1.containsLiteralType)(type)) {
|
1778
1762
|
this._addLiteralValuesForTargetType(type, priorWord, priorText, postText, completionMap);
|
@@ -1787,7 +1771,6 @@ class CompletionProvider {
|
|
1787
1771
|
}
|
1788
1772
|
return false;
|
1789
1773
|
function getParentSkippingStringList(node) {
|
1790
|
-
var _a;
|
1791
1774
|
if (!node.parent) {
|
1792
1775
|
return undefined;
|
1793
1776
|
}
|
@@ -1797,7 +1780,7 @@ class CompletionProvider {
|
|
1797
1780
|
if (!node.parent.parent) {
|
1798
1781
|
return undefined;
|
1799
1782
|
}
|
1800
|
-
if (
|
1783
|
+
if (node.parent?.nodeType !== 48 /* ParseNodeType.StringList */ || node.parent.d.strings.length > 1) {
|
1801
1784
|
return undefined;
|
1802
1785
|
}
|
1803
1786
|
return { parent: node.parent.parent, child: node.parent };
|
@@ -1829,7 +1812,6 @@ class CompletionProvider {
|
|
1829
1812
|
return true;
|
1830
1813
|
}
|
1831
1814
|
_tryAddTypedDictKeysFromDictionary(dictionaryNode, stringNode, priorWord, priorText, postText, completionMap) {
|
1832
|
-
var _a;
|
1833
1815
|
const expectedTypeResult = this.evaluator.getExpectedType(dictionaryNode);
|
1834
1816
|
if (!expectedTypeResult) {
|
1835
1817
|
return false;
|
@@ -1839,7 +1821,7 @@ class CompletionProvider {
|
|
1839
1821
|
if (ParseTreeUtils.getNodeDepth(expectedTypeResult.node) < ParseTreeUtils.getNodeDepth(dictionaryNode)) {
|
1840
1822
|
return false;
|
1841
1823
|
}
|
1842
|
-
const keys = this._getDictExpressionStringKeys(dictionaryNode, stringNode ? new Set([
|
1824
|
+
const keys = this._getDictExpressionStringKeys(dictionaryNode, stringNode ? new Set([stringNode.parent?.id]) : undefined);
|
1843
1825
|
return this._tryAddTypedDictKeys(expectedTypeResult.type, keys, priorWord, priorText, postText, completionMap);
|
1844
1826
|
}
|
1845
1827
|
_tryNarrowTypedDicts(types, keys) {
|
@@ -1947,7 +1929,6 @@ class CompletionProvider {
|
|
1947
1929
|
completionMap.set(completionItem);
|
1948
1930
|
}
|
1949
1931
|
_getImportFromCompletions(importFromNode, offset, priorWord) {
|
1950
|
-
var _a;
|
1951
1932
|
// Don't attempt to provide completions for "from X import *".
|
1952
1933
|
if (importFromNode.d.isWildcardImport) {
|
1953
1934
|
return undefined;
|
@@ -1968,7 +1949,7 @@ class CompletionProvider {
|
|
1968
1949
|
this._addImplicitImportsToCompletion(importInfo, importFromNode, priorWord, completionMap);
|
1969
1950
|
return completionMap;
|
1970
1951
|
}
|
1971
|
-
const symbolTable =
|
1952
|
+
const symbolTable = AnalyzerNodeInfo.getScope(parseResults.parserOutput.parseTree)?.symbolTable;
|
1972
1953
|
if (!symbolTable) {
|
1973
1954
|
return completionMap;
|
1974
1955
|
}
|
@@ -2013,9 +1994,8 @@ class CompletionProvider {
|
|
2013
1994
|
});
|
2014
1995
|
// Add keys from typed dict outside signatures.
|
2015
1996
|
signatureInfo.signatures.forEach((signature) => {
|
2016
|
-
var _a;
|
2017
1997
|
if (signature.type.priv.boundToType) {
|
2018
|
-
const keys = Array.from(
|
1998
|
+
const keys = Array.from(signature.type.priv.boundToType.shared.typedDictEntries?.knownItems.keys() || []);
|
2019
1999
|
keys.forEach((key) => argNameSet.add(key));
|
2020
2000
|
}
|
2021
2001
|
});
|
@@ -2100,7 +2080,6 @@ class CompletionProvider {
|
|
2100
2080
|
const insideTypeAnnotation = ParseTreeUtils.isWithinAnnotationComment(node) ||
|
2101
2081
|
ParseTreeUtils.isWithinTypeAnnotation(node, /* requireQuotedAnnotation */ false);
|
2102
2082
|
symbolTable.forEach((symbol, name) => {
|
2103
|
-
var _a;
|
2104
2083
|
// If there are no declarations or the symbol is not
|
2105
2084
|
// exported from this scope, don't include it in the
|
2106
2085
|
// suggestion list unless we are in the same file.
|
@@ -2111,7 +2090,7 @@ class CompletionProvider {
|
|
2111
2090
|
if (!completionMap.has(name)) {
|
2112
2091
|
// Skip func parens for classes when not a direct assignment or an argument (passed as a value)
|
2113
2092
|
const skipForClass = !this._shouldShowAutoParensForClass(symbol, node);
|
2114
|
-
const skipForDecorator =
|
2093
|
+
const skipForDecorator = node.parent?.nodeType === 16 /* ParseNodeType.Decorator */;
|
2115
2094
|
this.addSymbol(name, symbol, priorWord, completionMap, {
|
2116
2095
|
boundObjectOrClass,
|
2117
2096
|
funcParensDisabled: isInImport || insideTypeAnnotation || skipForClass || skipForDecorator,
|
@@ -2122,13 +2101,12 @@ class CompletionProvider {
|
|
2122
2101
|
});
|
2123
2102
|
}
|
2124
2103
|
_shouldShowAutoParensForClass(symbol, node) {
|
2125
|
-
var _a, _b;
|
2126
2104
|
if (symbol.getDeclarations().every((d) => d.type !== 6 /* DeclarationType.Class */)) {
|
2127
2105
|
// Not actually a class, so yes show parens.
|
2128
2106
|
return true;
|
2129
2107
|
}
|
2130
2108
|
// If an argument then show parens for classes if not a class argument.
|
2131
|
-
if (
|
2109
|
+
if (node.parent?.nodeType === 1 /* ParseNodeType.Argument */ && node.parent.parent?.nodeType !== 10 /* ParseNodeType.Class */) {
|
2132
2110
|
return true;
|
2133
2111
|
}
|
2134
2112
|
// Otherwise only show when the class is being assigned to a variable.
|
@@ -2320,9 +2298,8 @@ class CompletionMap {
|
|
2320
2298
|
return this._completions.delete(key);
|
2321
2299
|
}
|
2322
2300
|
toArray() {
|
2323
|
-
var _a;
|
2324
2301
|
const items = [];
|
2325
|
-
|
2302
|
+
this._completions?.forEach((value) => {
|
2326
2303
|
if (Array.isArray(value)) {
|
2327
2304
|
value.forEach((item) => {
|
2328
2305
|
items.push(item);
|
@@ -2335,24 +2312,22 @@ class CompletionMap {
|
|
2335
2312
|
return items;
|
2336
2313
|
}
|
2337
2314
|
static matchKindAndImportText(completionItemOrItems, getCompletionData, kind, autoImportText) {
|
2338
|
-
var _a;
|
2339
2315
|
if (!Array.isArray(completionItemOrItems)) {
|
2340
2316
|
return (completionItemOrItems.kind === kind &&
|
2341
|
-
|
2317
|
+
getCompletionData(completionItemOrItems)?.autoImportText === autoImportText);
|
2342
2318
|
}
|
2343
2319
|
else {
|
2344
|
-
return !!completionItemOrItems.find((c) =>
|
2320
|
+
return !!completionItemOrItems.find((c) => c.kind === kind && getCompletionData(c)?.autoImportText === autoImportText);
|
2345
2321
|
}
|
2346
2322
|
}
|
2347
2323
|
static labelOnlyIgnoringAutoImports(completionItemOrItems, getCompletionData) {
|
2348
|
-
var _a;
|
2349
2324
|
if (!Array.isArray(completionItemOrItems)) {
|
2350
|
-
if (!
|
2325
|
+
if (!getCompletionData(completionItemOrItems)?.autoImportText) {
|
2351
2326
|
return true;
|
2352
2327
|
}
|
2353
2328
|
}
|
2354
2329
|
else {
|
2355
|
-
if (completionItemOrItems.find((c) =>
|
2330
|
+
if (completionItemOrItems.find((c) => !getCompletionData(c)?.autoImportText)) {
|
2356
2331
|
return true;
|
2357
2332
|
}
|
2358
2333
|
}
|