@zzzen/pyright-internal 1.2.0-dev.20230101 → 1.2.0-dev.20230115
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/analyzerFileInfo.js +14 -1
- package/dist/analyzer/analyzerFileInfo.js.map +1 -1
- package/dist/analyzer/backgroundAnalysisProgram.d.ts +3 -3
- package/dist/analyzer/backgroundAnalysisProgram.js +4 -4
- package/dist/analyzer/backgroundAnalysisProgram.js.map +1 -1
- package/dist/analyzer/checker.d.ts +1 -1
- package/dist/analyzer/checker.js +145 -53
- package/dist/analyzer/checker.js.map +1 -1
- package/dist/analyzer/codeFlowEngine.js +26 -11
- package/dist/analyzer/codeFlowEngine.js.map +1 -1
- package/dist/analyzer/constraintSolver.js +4 -2
- package/dist/analyzer/constraintSolver.js.map +1 -1
- package/dist/analyzer/dataClasses.js +6 -1
- package/dist/analyzer/dataClasses.js.map +1 -1
- package/dist/analyzer/importResolver.d.ts +2 -1
- package/dist/analyzer/importResolver.js +18 -3
- package/dist/analyzer/importResolver.js.map +1 -1
- package/dist/analyzer/patternMatching.js +2 -2
- package/dist/analyzer/patternMatching.js.map +1 -1
- package/dist/analyzer/program.d.ts +1 -0
- package/dist/analyzer/program.js +54 -32
- package/dist/analyzer/program.js.map +1 -1
- package/dist/analyzer/regions.js +14 -5
- package/dist/analyzer/regions.js.map +1 -1
- package/dist/analyzer/service.d.ts +3 -2
- package/dist/analyzer/service.js +14 -12
- package/dist/analyzer/service.js.map +1 -1
- package/dist/analyzer/sourceFile.d.ts +4 -3
- package/dist/analyzer/sourceFile.js +4 -4
- package/dist/analyzer/sourceFile.js.map +1 -1
- package/dist/analyzer/sourceMapper.d.ts +2 -2
- package/dist/analyzer/sourceMapper.js +14 -5
- package/dist/analyzer/sourceMapper.js.map +1 -1
- package/dist/analyzer/typeCacheUtils.d.ts +0 -1
- package/dist/analyzer/typeCacheUtils.js +3 -3
- package/dist/analyzer/typeCacheUtils.js.map +1 -1
- package/dist/analyzer/typeDocStringUtils.d.ts +2 -1
- package/dist/analyzer/typeDocStringUtils.js +18 -7
- package/dist/analyzer/typeDocStringUtils.js.map +1 -1
- package/dist/analyzer/typeEvaluator.js +494 -423
- package/dist/analyzer/typeEvaluator.js.map +1 -1
- package/dist/analyzer/typeEvaluatorTypes.d.ts +20 -13
- package/dist/analyzer/typeEvaluatorTypes.js +15 -15
- package/dist/analyzer/typeEvaluatorTypes.js.map +1 -1
- package/dist/analyzer/typeGuards.d.ts +5 -1
- package/dist/analyzer/typeGuards.js +204 -44
- package/dist/analyzer/typeGuards.js.map +1 -1
- package/dist/analyzer/typeUtils.d.ts +8 -0
- package/dist/analyzer/typeUtils.js +15 -4
- package/dist/analyzer/typeUtils.js.map +1 -1
- package/dist/analyzer/types.d.ts +3 -0
- package/dist/analyzer/types.js +10 -2
- package/dist/analyzer/types.js.map +1 -1
- package/dist/backgroundAnalysisBase.d.ts +4 -1
- package/dist/backgroundAnalysisBase.js +1 -1
- package/dist/backgroundAnalysisBase.js.map +1 -1
- package/dist/backgroundThreadBase.d.ts +5 -2
- package/dist/backgroundThreadBase.js.map +1 -1
- package/dist/commands/createTypeStub.js +3 -0
- package/dist/commands/createTypeStub.js.map +1 -1
- package/dist/commands/quickActionCommand.js +1 -1
- package/dist/commands/quickActionCommand.js.map +1 -1
- package/dist/common/collectionUtils.d.ts +1 -0
- package/dist/common/collectionUtils.js +9 -1
- package/dist/common/collectionUtils.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/diagnosticRules.d.ts +1 -0
- package/dist/common/diagnosticRules.js +1 -0
- package/dist/common/diagnosticRules.js.map +1 -1
- package/dist/common/fileSystem.d.ts +1 -0
- package/dist/common/fileSystem.js.map +1 -1
- package/dist/common/textEditUtils.d.ts +3 -2
- package/dist/common/textEditUtils.js +11 -10
- package/dist/common/textEditUtils.js.map +1 -1
- package/dist/languageServerBase.d.ts +1 -1
- package/dist/languageServerBase.js +2 -2
- package/dist/languageServerBase.js.map +1 -1
- package/dist/languageService/completionProvider.d.ts +3 -0
- package/dist/languageService/completionProvider.js +212 -159
- package/dist/languageService/completionProvider.js.map +1 -1
- package/dist/languageService/documentSymbolCollector.d.ts +12 -4
- package/dist/languageService/documentSymbolCollector.js +103 -22
- package/dist/languageService/documentSymbolCollector.js.map +1 -1
- package/dist/languageService/documentSymbolProvider.js +6 -0
- package/dist/languageService/documentSymbolProvider.js.map +1 -1
- package/dist/languageService/hoverProvider.d.ts +0 -1
- package/dist/languageService/hoverProvider.js +7 -20
- package/dist/languageService/hoverProvider.js.map +1 -1
- package/dist/languageService/indentationUtils.d.ts +1 -1
- package/dist/languageService/indentationUtils.js +74 -29
- package/dist/languageService/indentationUtils.js.map +1 -1
- package/dist/languageService/referencesProvider.d.ts +5 -4
- package/dist/languageService/referencesProvider.js +15 -10
- package/dist/languageService/referencesProvider.js.map +1 -1
- package/dist/languageService/renameModuleProvider.js +11 -11
- package/dist/languageService/renameModuleProvider.js.map +1 -1
- package/dist/languageService/tooltipUtils.d.ts +5 -1
- package/dist/languageService/tooltipUtils.js +28 -4
- package/dist/languageService/tooltipUtils.js.map +1 -1
- package/dist/localization/localize.d.ts +3 -0
- package/dist/localization/localize.js +3 -0
- package/dist/localization/localize.js.map +1 -1
- package/dist/localization/package.nls.en-us.json +3 -0
- package/dist/parser/tokenizer.js +6 -2
- package/dist/parser/tokenizer.js.map +1 -1
- package/dist/tests/checker.test.js +16 -0
- package/dist/tests/checker.test.js.map +1 -1
- package/dist/tests/completions.test.d.ts +1 -0
- package/dist/tests/completions.test.js +331 -0
- package/dist/tests/completions.test.js.map +1 -0
- package/dist/tests/documentSymbolCollector.test.js +86 -5
- package/dist/tests/documentSymbolCollector.test.js.map +1 -1
- package/dist/tests/filesystem.test.js +11 -0
- package/dist/tests/filesystem.test.js.map +1 -1
- package/dist/tests/fourslash/rename.init.fourslash.d.ts +1 -0
- package/dist/tests/fourslash/rename.init.fourslash.js +23 -0
- package/dist/tests/fourslash/rename.init.fourslash.js.map +1 -0
- package/dist/tests/harness/fourslash/testState.d.ts +2 -2
- package/dist/tests/harness/fourslash/testState.js +10 -7
- package/dist/tests/harness/fourslash/testState.js.map +1 -1
- package/dist/tests/harness/vfs/filesystem.d.ts +2 -2
- package/dist/tests/harness/vfs/filesystem.js +5 -1
- package/dist/tests/harness/vfs/filesystem.js.map +1 -1
- package/dist/tests/hoverProvider.test.d.ts +1 -0
- package/dist/tests/hoverProvider.test.js +247 -0
- package/dist/tests/hoverProvider.test.js.map +1 -0
- package/dist/tests/indentationUtils.ptvs.test.js +13 -13
- package/dist/tests/indentationUtils.ptvs.test.js.map +1 -1
- package/dist/tests/indentationUtils.test.js +68 -10
- package/dist/tests/indentationUtils.test.js.map +1 -1
- package/dist/tests/typeEvaluator1.test.js +24 -0
- package/dist/tests/typeEvaluator1.test.js.map +1 -1
- package/dist/tests/typeEvaluator2.test.js +5 -1
- package/dist/tests/typeEvaluator2.test.js.map +1 -1
- package/dist/tests/typeEvaluator3.test.js +10 -2
- package/dist/tests/typeEvaluator3.test.js.map +1 -1
- package/dist/tests/typeEvaluator4.test.js +4 -0
- package/dist/tests/typeEvaluator4.test.js.map +1 -1
- package/dist/tests/typeEvaluator5.test.js +6 -0
- package/dist/tests/typeEvaluator5.test.js.map +1 -1
- package/dist/workspaceMap.js +1 -3
- package/dist/workspaceMap.js.map +1 -1
- package/package.json +6 -6
@@ -41,6 +41,7 @@ const sourceMapper_1 = require("../analyzer/sourceMapper");
|
|
41
41
|
const SymbolNameUtils = __importStar(require("../analyzer/symbolNameUtils"));
|
42
42
|
const symbolUtils_1 = require("../analyzer/symbolUtils");
|
43
43
|
const typedDicts_1 = require("../analyzer/typedDicts");
|
44
|
+
const typeDocStringUtils_1 = require("../analyzer/typeDocStringUtils");
|
44
45
|
const typePrinter_1 = require("../analyzer/typePrinter");
|
45
46
|
const types_1 = require("../analyzer/types");
|
46
47
|
const typeUtils_1 = require("../analyzer/typeUtils");
|
@@ -52,6 +53,7 @@ const lspUtils_1 = require("../common/lspUtils");
|
|
52
53
|
const positionUtils_1 = require("../common/positionUtils");
|
53
54
|
const pythonVersion_1 = require("../common/pythonVersion");
|
54
55
|
const StringUtils = __importStar(require("../common/stringUtils"));
|
56
|
+
const textEditUtils_1 = require("../common/textEditUtils");
|
55
57
|
const textRange_1 = require("../common/textRange");
|
56
58
|
const textRange_2 = require("../common/textRange");
|
57
59
|
const timing_1 = require("../common/timing");
|
@@ -360,22 +362,44 @@ class CompletionProvider {
|
|
360
362
|
// Prevent the MRU list from growing indefinitely.
|
361
363
|
CompletionProvider._mostRecentCompletions.pop();
|
362
364
|
}
|
363
|
-
if (completionItemData.symbolLabel) {
|
364
|
-
|
365
|
-
|
366
|
-
|
367
|
-
|
368
|
-
|
369
|
-
|
370
|
-
this.getCompletionsForPosition();
|
365
|
+
if (!completionItemData.symbolLabel) {
|
366
|
+
return;
|
367
|
+
}
|
368
|
+
if (completionItemData.modulePath) {
|
369
|
+
const documentation = (0, typeDocStringUtils_1.getModuleDocStringFromPaths)([completionItemData.modulePath], this._sourceMapper);
|
370
|
+
if (!documentation) {
|
371
|
+
return;
|
371
372
|
}
|
372
|
-
|
373
|
-
const
|
374
|
-
|
375
|
-
|
376
|
-
|
377
|
-
|
373
|
+
if (this._options.format === vscode_languageserver_1.MarkupKind.Markdown) {
|
374
|
+
const markdownString = (0, docStringConversion_1.convertDocStringToMarkdown)(documentation);
|
375
|
+
completionItem.documentation = {
|
376
|
+
kind: vscode_languageserver_1.MarkupKind.Markdown,
|
377
|
+
value: markdownString,
|
378
|
+
};
|
379
|
+
}
|
380
|
+
else if (this._options.format === vscode_languageserver_1.MarkupKind.PlainText) {
|
381
|
+
const plainTextString = (0, docStringConversion_1.convertDocStringToPlainText)(documentation);
|
382
|
+
completionItem.documentation = {
|
383
|
+
kind: vscode_languageserver_1.MarkupKind.PlainText,
|
384
|
+
value: plainTextString,
|
385
|
+
};
|
378
386
|
}
|
387
|
+
return;
|
388
|
+
}
|
389
|
+
this._itemToResolve = completionItem;
|
390
|
+
if (!completionItemData.autoImportText) {
|
391
|
+
// Rerun the completion lookup. It will fill in additional information
|
392
|
+
// about the item to be resolved. We'll ignore the rest of the returned
|
393
|
+
// list. This is a bit wasteful, but all of that information should be
|
394
|
+
// cached, so it's not as bad as it might seem.
|
395
|
+
this.getCompletionsForPosition();
|
396
|
+
}
|
397
|
+
else if (!completionItem.additionalTextEdits) {
|
398
|
+
const completionMap = new CompletionMap();
|
399
|
+
const completionResults = { completionMap };
|
400
|
+
this._addAutoImportCompletions(completionItemData.symbolLabel,
|
401
|
+
/* similarityLimit */ 1,
|
402
|
+
/* lazyEdit */ false, completionResults);
|
379
403
|
}
|
380
404
|
}
|
381
405
|
// This method will return false if it wants
|
@@ -1678,7 +1702,9 @@ class CompletionProvider {
|
|
1678
1702
|
// Add the implicit imports.
|
1679
1703
|
importInfo.implicitImports.forEach((implImport) => {
|
1680
1704
|
if (!importFromNode.imports.find((imp) => imp.name.value === implImport.name)) {
|
1681
|
-
this._addNameToCompletions(implImport.name, vscode_languageserver_1.CompletionItemKind.Module, priorWord, completionMap
|
1705
|
+
this._addNameToCompletions(implImport.name, vscode_languageserver_1.CompletionItemKind.Module, priorWord, completionMap, {
|
1706
|
+
modulePath: implImport.path,
|
1707
|
+
});
|
1682
1708
|
}
|
1683
1709
|
});
|
1684
1710
|
return { completionMap };
|
@@ -1795,7 +1821,7 @@ class CompletionProvider {
|
|
1795
1821
|
});
|
1796
1822
|
}
|
1797
1823
|
_addSymbol(name, symbol, priorWord, completionMap, detail) {
|
1798
|
-
var _a, _b;
|
1824
|
+
var _a, _b, _c, _d;
|
1799
1825
|
let primaryDecl = (0, symbolUtils_1.getLastTypedDeclaredForSymbol)(symbol);
|
1800
1826
|
if (!primaryDecl) {
|
1801
1827
|
const declarations = symbol.getDeclarations();
|
@@ -1803,132 +1829,83 @@ class CompletionProvider {
|
|
1803
1829
|
primaryDecl = declarations[declarations.length - 1];
|
1804
1830
|
}
|
1805
1831
|
}
|
1806
|
-
|
1807
|
-
|
1808
|
-
|
1809
|
-
|
1810
|
-
|
1811
|
-
|
1812
|
-
|
1813
|
-
|
1814
|
-
|
1815
|
-
|
1816
|
-
|
1817
|
-
|
1818
|
-
|
1819
|
-
|
1820
|
-
|
1821
|
-
|
1822
|
-
|
1823
|
-
|
1824
|
-
|
1825
|
-
|
1826
|
-
|
1827
|
-
|
1828
|
-
|
1829
|
-
|
1830
|
-
|
1831
|
-
|
1832
|
-
|
1833
|
-
|
1834
|
-
|
1835
|
-
|
1836
|
-
|
1837
|
-
|
1838
|
-
|
1839
|
-
|
1840
|
-
|
1841
|
-
|
1842
|
-
|
1843
|
-
|
1844
|
-
|
1845
|
-
|
1846
|
-
|
1847
|
-
|
1848
|
-
|
1849
|
-
|
1850
|
-
|
1851
|
-
|
1852
|
-
|
1853
|
-
|
1854
|
-
|
1855
|
-
|
1856
|
-
|
1857
|
-
const propertyType = this._evaluator.getGetterTypeFromProperty(functionType,
|
1858
|
-
/* inferTypeIfNeeded */ true) || types_1.UnknownType.create();
|
1859
|
-
typeDetail =
|
1860
|
-
name + ': ' + this._evaluator.printType(propertyType) + ' (property)';
|
1861
|
-
}
|
1862
|
-
else if ((0, types_1.isOverloadedFunction)(functionType)) {
|
1863
|
-
// 35 is completion tooltip's default width size
|
1864
|
-
typeDetail = (0, tooltipUtils_1.getOverloadedFunctionTooltip)(functionType, this._evaluator,
|
1865
|
-
/* columnThreshold */ 35);
|
1866
|
-
}
|
1867
|
-
else if ((0, types_1.isFunction)(functionType)) {
|
1868
|
-
typeDetail = name + this._evaluator.printType(functionType);
|
1869
|
-
}
|
1870
|
-
else {
|
1871
|
-
typeDetail = name + ': ' + this._evaluator.printType(functionType);
|
1872
|
-
}
|
1873
|
-
}
|
1874
|
-
break;
|
1875
|
-
}
|
1876
|
-
case 6 /* Class */:
|
1877
|
-
case 7 /* SpecialBuiltInClass */: {
|
1878
|
-
typeDetail = 'class ' + name + '()';
|
1879
|
-
break;
|
1880
|
-
}
|
1881
|
-
case 8 /* Alias */: {
|
1882
|
-
typeDetail = name;
|
1883
|
-
if (primaryDecl.path) {
|
1884
|
-
const lookupResults = this._importLookup(primaryDecl.path);
|
1885
|
-
if (lookupResults) {
|
1886
|
-
documentation = lookupResults.docString;
|
1887
|
-
}
|
1888
|
-
}
|
1889
|
-
break;
|
1890
|
-
}
|
1891
|
-
default: {
|
1892
|
-
typeDetail = name;
|
1893
|
-
break;
|
1894
|
-
}
|
1895
|
-
}
|
1896
|
-
documentation = (0, tooltipUtils_1.getDocumentationPartsForTypeAndDecl)(this._sourceMapper, type, primaryDecl, this._evaluator, symbol, detail.boundObjectOrClass);
|
1897
|
-
if (this._options.format === vscode_languageserver_1.MarkupKind.Markdown) {
|
1898
|
-
let markdownString = '```python\n' + typeDetail + '\n```\n';
|
1899
|
-
if (documentation) {
|
1900
|
-
markdownString += '---\n';
|
1901
|
-
markdownString += (0, docStringConversion_1.convertDocStringToMarkdown)(documentation);
|
1902
|
-
}
|
1903
|
-
markdownString = markdownString.trimEnd();
|
1904
|
-
this._itemToResolve.documentation = {
|
1905
|
-
kind: vscode_languageserver_1.MarkupKind.Markdown,
|
1906
|
-
value: markdownString,
|
1907
|
-
};
|
1908
|
-
}
|
1909
|
-
else if (this._options.format === vscode_languageserver_1.MarkupKind.PlainText) {
|
1910
|
-
let plainTextString = typeDetail + '\n';
|
1911
|
-
if (documentation) {
|
1912
|
-
plainTextString += '\n';
|
1913
|
-
plainTextString += (0, docStringConversion_1.convertDocStringToPlainText)(documentation);
|
1914
|
-
}
|
1915
|
-
plainTextString = plainTextString.trimEnd();
|
1916
|
-
this._itemToResolve.documentation = {
|
1917
|
-
kind: vscode_languageserver_1.MarkupKind.PlainText,
|
1918
|
-
value: plainTextString,
|
1919
|
-
};
|
1920
|
-
}
|
1921
|
-
else {
|
1922
|
-
(0, debug_1.fail)(`Unsupported markup type: ${this._options.format}`);
|
1923
|
-
}
|
1924
|
-
}
|
1925
|
-
}
|
1832
|
+
primaryDecl = primaryDecl
|
1833
|
+
? (_a = this._evaluator.resolveAliasDeclaration(primaryDecl, /* resolveLocalNames */ true)) !== null && _a !== void 0 ? _a : primaryDecl
|
1834
|
+
: undefined;
|
1835
|
+
const autoImportText = detail.autoImportSource
|
1836
|
+
? this._getAutoImportText(name, detail.autoImportSource, detail.autoImportAlias)
|
1837
|
+
: undefined;
|
1838
|
+
// Are we resolving a completion item? If so, see if this symbol
|
1839
|
+
// is the one that we're trying to match.
|
1840
|
+
if (this._itemToResolve) {
|
1841
|
+
const completionItemData = (0, lspUtils_1.fromLSPAny)(this._itemToResolve.data);
|
1842
|
+
if (completionItemData.symbolLabel !== name) {
|
1843
|
+
// It's not what we are looking for.
|
1844
|
+
return;
|
1845
|
+
}
|
1846
|
+
if (completionItemData.autoImportText) {
|
1847
|
+
if (completionItemData.autoImportText === (autoImportText === null || autoImportText === void 0 ? void 0 : autoImportText.importText) &&
|
1848
|
+
((_b = detail.edits) === null || _b === void 0 ? void 0 : _b.additionalTextEdits)) {
|
1849
|
+
this._itemToResolve.additionalTextEdits = (0, textEditUtils_1.convertEditActionsToTextEdits)(detail.edits.additionalTextEdits);
|
1850
|
+
}
|
1851
|
+
return;
|
1852
|
+
}
|
1853
|
+
// This call can be expensive to perform on every completion item
|
1854
|
+
// that we return, so we do it lazily in the "resolve" callback.
|
1855
|
+
const type = this._evaluator.getEffectiveTypeOfSymbol(symbol);
|
1856
|
+
if (!type) {
|
1857
|
+
// Can't resolve. so bail out.
|
1858
|
+
return;
|
1859
|
+
}
|
1860
|
+
const typeDetail = this._getTypeDetail(primaryDecl, type, name, detail);
|
1861
|
+
const documentation = (0, tooltipUtils_1.getDocumentationPartsForTypeAndDecl)(this._sourceMapper, type, primaryDecl, this._evaluator, {
|
1862
|
+
name,
|
1863
|
+
symbol,
|
1864
|
+
boundObjectOrClass: detail.boundObjectOrClass,
|
1865
|
+
});
|
1866
|
+
if (this._options.format === vscode_languageserver_1.MarkupKind.Markdown) {
|
1867
|
+
let markdownString = '```python\n' + typeDetail + '\n```\n';
|
1868
|
+
if (documentation) {
|
1869
|
+
markdownString += '---\n';
|
1870
|
+
markdownString += (0, docStringConversion_1.convertDocStringToMarkdown)(documentation);
|
1871
|
+
}
|
1872
|
+
markdownString = markdownString.trimEnd();
|
1873
|
+
this._itemToResolve.documentation = {
|
1874
|
+
kind: vscode_languageserver_1.MarkupKind.Markdown,
|
1875
|
+
value: markdownString,
|
1876
|
+
};
|
1877
|
+
}
|
1878
|
+
else if (this._options.format === vscode_languageserver_1.MarkupKind.PlainText) {
|
1879
|
+
let plainTextString = typeDetail + '\n';
|
1880
|
+
if (documentation) {
|
1881
|
+
plainTextString += '\n';
|
1882
|
+
plainTextString += (0, docStringConversion_1.convertDocStringToPlainText)(documentation);
|
1926
1883
|
}
|
1884
|
+
plainTextString = plainTextString.trimEnd();
|
1885
|
+
this._itemToResolve.documentation = {
|
1886
|
+
kind: vscode_languageserver_1.MarkupKind.PlainText,
|
1887
|
+
value: plainTextString,
|
1888
|
+
};
|
1889
|
+
}
|
1890
|
+
else {
|
1891
|
+
(0, debug_1.fail)(`Unsupported markup type: ${this._options.format}`);
|
1927
1892
|
}
|
1928
|
-
|
1929
|
-
|
1930
|
-
|
1931
|
-
|
1893
|
+
// Bail out. We don't need to add items to completion.
|
1894
|
+
return;
|
1895
|
+
}
|
1896
|
+
if (primaryDecl) {
|
1897
|
+
let itemKind = this._convertDeclarationTypeToItemKind(primaryDecl);
|
1898
|
+
// Handle enum members specially. Enum members normally look like
|
1899
|
+
// variables, but the are declared using assignment expressions
|
1900
|
+
// within an enum class.
|
1901
|
+
if (primaryDecl.type === 1 /* Variable */ &&
|
1902
|
+
detail.boundObjectOrClass &&
|
1903
|
+
(0, types_1.isInstantiableClass)(detail.boundObjectOrClass) &&
|
1904
|
+
types_1.ClassType.isEnumClass(detail.boundObjectOrClass) &&
|
1905
|
+
((_c = primaryDecl.node.parent) === null || _c === void 0 ? void 0 : _c.nodeType) === 3 /* Assignment */) {
|
1906
|
+
itemKind = vscode_languageserver_1.CompletionItemKind.EnumMember;
|
1907
|
+
}
|
1908
|
+
this._addNameToCompletions((_d = detail.autoImportAlias) !== null && _d !== void 0 ? _d : name, itemKind, priorWord, completionMap, {
|
1932
1909
|
autoImportText,
|
1933
1910
|
extraCommitChars: detail.extraCommitChars,
|
1934
1911
|
funcParensDisabled: detail.funcParensDisabled,
|
@@ -1939,7 +1916,7 @@ class CompletionProvider {
|
|
1939
1916
|
// Does the symbol have no declaration but instead has a synthesized type?
|
1940
1917
|
const synthesizedType = symbol.getSynthesizedType();
|
1941
1918
|
if (synthesizedType) {
|
1942
|
-
const itemKind =
|
1919
|
+
const itemKind = this._convertTypeToItemKind(synthesizedType);
|
1943
1920
|
this._addNameToCompletions(name, itemKind, priorWord, completionMap, {
|
1944
1921
|
extraCommitChars: detail.extraCommitChars,
|
1945
1922
|
funcParensDisabled: detail.funcParensDisabled,
|
@@ -1948,6 +1925,72 @@ class CompletionProvider {
|
|
1948
1925
|
}
|
1949
1926
|
}
|
1950
1927
|
}
|
1928
|
+
_getTypeDetail(primaryDecl, type, name, detail) {
|
1929
|
+
if (!primaryDecl) {
|
1930
|
+
if ((0, types_1.isModule)(type)) {
|
1931
|
+
// Special casing import modules.
|
1932
|
+
// submodule imported through `import` statement doesn't have
|
1933
|
+
// corresponding decls. so use given name as it is.
|
1934
|
+
//
|
1935
|
+
// ex) import X.Y
|
1936
|
+
// X.[Y]
|
1937
|
+
return name;
|
1938
|
+
}
|
1939
|
+
return;
|
1940
|
+
}
|
1941
|
+
switch (primaryDecl.type) {
|
1942
|
+
case 0 /* Intrinsic */:
|
1943
|
+
case 1 /* Variable */:
|
1944
|
+
case 2 /* Parameter */:
|
1945
|
+
case 3 /* TypeParameter */: {
|
1946
|
+
let expandTypeAlias = false;
|
1947
|
+
if (type && types_1.TypeBase.isInstantiable(type)) {
|
1948
|
+
const typeAliasInfo = (0, types_1.getTypeAliasInfo)(type);
|
1949
|
+
if (typeAliasInfo) {
|
1950
|
+
if (typeAliasInfo.name === name) {
|
1951
|
+
expandTypeAlias = true;
|
1952
|
+
}
|
1953
|
+
}
|
1954
|
+
}
|
1955
|
+
return name + ': ' + this._evaluator.printType(type, { expandTypeAlias });
|
1956
|
+
}
|
1957
|
+
case 5 /* Function */: {
|
1958
|
+
const functionType = detail.boundObjectOrClass && ((0, types_1.isFunction)(type) || (0, types_1.isOverloadedFunction)(type))
|
1959
|
+
? this._evaluator.bindFunctionToClassOrObject(detail.boundObjectOrClass, type)
|
1960
|
+
: type;
|
1961
|
+
if (!functionType) {
|
1962
|
+
return undefined;
|
1963
|
+
}
|
1964
|
+
if ((0, typeUtils_1.isProperty)(functionType) &&
|
1965
|
+
detail.boundObjectOrClass &&
|
1966
|
+
(0, types_1.isClassInstance)(detail.boundObjectOrClass)) {
|
1967
|
+
const propertyType = this._evaluator.getGetterTypeFromProperty(functionType,
|
1968
|
+
/* inferTypeIfNeeded */ true) || types_1.UnknownType.create();
|
1969
|
+
return name + ': ' + this._evaluator.printType(propertyType) + ' (property)';
|
1970
|
+
}
|
1971
|
+
if ((0, types_1.isOverloadedFunction)(functionType)) {
|
1972
|
+
// 35 is completion tooltip's default width size
|
1973
|
+
return (0, tooltipUtils_1.getOverloadedFunctionTooltip)(functionType, this._evaluator, /* columnThreshold */ 35);
|
1974
|
+
}
|
1975
|
+
else if ((0, types_1.isFunction)(functionType)) {
|
1976
|
+
return name + this._evaluator.printType(functionType);
|
1977
|
+
}
|
1978
|
+
else {
|
1979
|
+
return name + ': ' + this._evaluator.printType(functionType);
|
1980
|
+
}
|
1981
|
+
}
|
1982
|
+
case 6 /* Class */:
|
1983
|
+
case 7 /* SpecialBuiltInClass */: {
|
1984
|
+
return 'class ' + name + '()';
|
1985
|
+
}
|
1986
|
+
case 8 /* Alias */: {
|
1987
|
+
return name;
|
1988
|
+
}
|
1989
|
+
default: {
|
1990
|
+
return name;
|
1991
|
+
}
|
1992
|
+
}
|
1993
|
+
}
|
1951
1994
|
_getAutoImportText(importName, importFrom, importAlias) {
|
1952
1995
|
const autoImportText = (0, tooltipUtils_1.getAutoImportText)(importName, importFrom, importAlias);
|
1953
1996
|
let importText = '';
|
@@ -1988,6 +2031,9 @@ class CompletionProvider {
|
|
1988
2031
|
if (detail === null || detail === void 0 ? void 0 : detail.funcParensDisabled) {
|
1989
2032
|
completionItemData.funcParensDisabled = true;
|
1990
2033
|
}
|
2034
|
+
if (detail === null || detail === void 0 ? void 0 : detail.modulePath) {
|
2035
|
+
completionItemData.modulePath = detail.modulePath;
|
2036
|
+
}
|
1991
2037
|
completionItem.data = (0, lspUtils_1.toLSPAny)(completionItemData);
|
1992
2038
|
if ((detail === null || detail === void 0 ? void 0 : detail.sortText) || (detail === null || detail === void 0 ? void 0 : detail.itemDetail)) {
|
1993
2039
|
completionItem.sortText = detail.sortText;
|
@@ -2077,16 +2123,8 @@ class CompletionProvider {
|
|
2077
2123
|
completionItem.textEdit = detail.edits.textEdit;
|
2078
2124
|
}
|
2079
2125
|
if ((_d = detail === null || detail === void 0 ? void 0 : detail.edits) === null || _d === void 0 ? void 0 : _d.additionalTextEdits) {
|
2080
|
-
completionItem.additionalTextEdits = detail.edits.additionalTextEdits
|
2081
|
-
|
2082
|
-
range: {
|
2083
|
-
start: { line: te.range.start.line, character: te.range.start.character },
|
2084
|
-
end: { line: te.range.end.line, character: te.range.end.character },
|
2085
|
-
},
|
2086
|
-
newText: te.replacementText,
|
2087
|
-
};
|
2088
|
-
return textEdit;
|
2089
|
-
});
|
2126
|
+
completionItem.additionalTextEdits = (0, textEditUtils_1.convertEditActionsToTextEdits)(detail.edits.additionalTextEdits);
|
2127
|
+
// This is for auto import entries from indices which skip symbols.
|
2090
2128
|
if (this._itemToResolve) {
|
2091
2129
|
const data = (0, lspUtils_1.fromLSPAny)(this._itemToResolve.data);
|
2092
2130
|
if (data.autoImportText === completionItemData.autoImportText) {
|
@@ -2173,6 +2211,24 @@ class CompletionProvider {
|
|
2173
2211
|
return vscode_languageserver_1.CompletionItemKind.Module;
|
2174
2212
|
}
|
2175
2213
|
}
|
2214
|
+
_convertTypeToItemKind(type) {
|
2215
|
+
switch (type.category) {
|
2216
|
+
case 8 /* Module */:
|
2217
|
+
return vscode_languageserver_1.CompletionItemKind.Module;
|
2218
|
+
case 7 /* Class */:
|
2219
|
+
return vscode_languageserver_1.CompletionItemKind.Class;
|
2220
|
+
case 5 /* Function */:
|
2221
|
+
case 6 /* OverloadedFunction */:
|
2222
|
+
if ((0, typeUtils_1.isProperty)(type)) {
|
2223
|
+
return vscode_languageserver_1.CompletionItemKind.Property;
|
2224
|
+
}
|
2225
|
+
return vscode_languageserver_1.CompletionItemKind.Function;
|
2226
|
+
case 10 /* TypeVar */:
|
2227
|
+
return vscode_languageserver_1.CompletionItemKind.TypeParameter;
|
2228
|
+
default:
|
2229
|
+
return vscode_languageserver_1.CompletionItemKind.Variable;
|
2230
|
+
}
|
2231
|
+
}
|
2176
2232
|
_getImportModuleCompletions(node) {
|
2177
2233
|
const moduleDescriptor = {
|
2178
2234
|
leadingDots: node.leadingDots,
|
@@ -2194,14 +2250,11 @@ class CompletionProvider {
|
|
2194
2250
|
completionItem.sortText = this._makeSortText(SortCategory.Keyword, keyword);
|
2195
2251
|
completionMap.set(completionItem);
|
2196
2252
|
}
|
2197
|
-
completions.forEach((completionName) => {
|
2198
|
-
|
2199
|
-
|
2200
|
-
|
2201
|
-
|
2202
|
-
completionItem.kind = vscode_languageserver_1.CompletionItemKind.Module;
|
2203
|
-
completionItem.sortText = this._makeSortText(SortCategory.ImportModuleName, completionName);
|
2204
|
-
completionMap.set(completionItem);
|
2253
|
+
completions.forEach((modulePath, completionName) => {
|
2254
|
+
this._addNameToCompletions(completionName, vscode_languageserver_1.CompletionItemKind.Module, '', completionMap, {
|
2255
|
+
sortText: this._makeSortText(SortCategory.ImportModuleName, completionName),
|
2256
|
+
modulePath,
|
2257
|
+
});
|
2205
2258
|
});
|
2206
2259
|
return { completionMap };
|
2207
2260
|
}
|