@zzzen/pyright-internal 1.2.0-dev.20230507 → 1.2.0-dev.20230514
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/analyzer/backgroundAnalysisProgram.d.ts +1 -1
- package/dist/analyzer/checker.js +37 -2
- package/dist/analyzer/checker.js.map +1 -1
- package/dist/analyzer/constraintSolver.js +14 -15
- package/dist/analyzer/constraintSolver.js.map +1 -1
- package/dist/analyzer/constructors.js +246 -189
- package/dist/analyzer/constructors.js.map +1 -1
- package/dist/analyzer/dataClasses.js +2 -2
- package/dist/analyzer/dataClasses.js.map +1 -1
- package/dist/analyzer/docStringConversion.js +1 -1
- package/dist/analyzer/docStringConversion.js.map +1 -1
- package/dist/analyzer/enums.js +8 -0
- package/dist/analyzer/enums.js.map +1 -1
- package/dist/analyzer/importResolver.js +47 -29
- package/dist/analyzer/importResolver.js.map +1 -1
- package/dist/analyzer/namedTuples.js +2 -5
- package/dist/analyzer/namedTuples.js.map +1 -1
- package/dist/analyzer/program.d.ts +7 -17
- package/dist/analyzer/program.js +32 -247
- package/dist/analyzer/program.js.map +1 -1
- package/dist/analyzer/protocols.js +1 -1
- package/dist/analyzer/protocols.js.map +1 -1
- package/dist/analyzer/service.d.ts +4 -12
- package/dist/analyzer/service.js +12 -23
- package/dist/analyzer/service.js.map +1 -1
- package/dist/analyzer/sourceFile.d.ts +2 -11
- package/dist/analyzer/sourceFile.js +11 -74
- package/dist/analyzer/sourceFile.js.map +1 -1
- package/dist/analyzer/symbol.d.ts +3 -1
- package/dist/analyzer/symbol.js +5 -0
- package/dist/analyzer/symbol.js.map +1 -1
- package/dist/analyzer/typeEvaluator.js +362 -142
- package/dist/analyzer/typeEvaluator.js.map +1 -1
- package/dist/analyzer/typeEvaluatorTypes.d.ts +4 -0
- package/dist/analyzer/typeEvaluatorTypes.js.map +1 -1
- package/dist/analyzer/typePrinter.d.ts +3 -3
- package/dist/analyzer/typePrinter.js +247 -100
- package/dist/analyzer/typePrinter.js.map +1 -1
- package/dist/analyzer/typeUtils.d.ts +12 -7
- package/dist/analyzer/typeUtils.js +173 -48
- package/dist/analyzer/typeUtils.js.map +1 -1
- package/dist/analyzer/typeVarContext.d.ts +1 -2
- package/dist/analyzer/typeVarContext.js +14 -32
- package/dist/analyzer/typeVarContext.js.map +1 -1
- package/dist/analyzer/types.d.ts +3 -2
- package/dist/analyzer/types.js +13 -10
- package/dist/analyzer/types.js.map +1 -1
- package/dist/backgroundAnalysisBase.d.ts +1 -1
- package/dist/backgroundAnalysisBase.js +16 -0
- package/dist/backgroundAnalysisBase.js.map +1 -1
- package/dist/commands/dumpFileDebugInfoCommand.js +0 -1
- package/dist/commands/dumpFileDebugInfoCommand.js.map +1 -1
- package/dist/common/extensibility.d.ts +26 -3
- package/dist/common/extensibility.js.map +1 -1
- package/dist/common/logTracker.d.ts +2 -0
- package/dist/common/logTracker.js +8 -1
- package/dist/common/logTracker.js.map +1 -1
- package/dist/common/lspUtils.d.ts +4 -1
- package/dist/common/lspUtils.js +38 -1
- package/dist/common/lspUtils.js.map +1 -1
- package/dist/common/pythonVersion.d.ts +2 -1
- package/dist/common/pythonVersion.js +1 -0
- package/dist/common/pythonVersion.js.map +1 -1
- package/dist/common/workspaceEditUtils.d.ts +3 -3
- package/dist/common/workspaceEditUtils.js +10 -10
- package/dist/common/workspaceEditUtils.js.map +1 -1
- package/dist/languageServerBase.d.ts +2 -5
- package/dist/languageServerBase.js +33 -60
- package/dist/languageServerBase.js.map +1 -1
- package/dist/languageService/autoImporter.d.ts +50 -51
- package/dist/languageService/autoImporter.js +125 -210
- package/dist/languageService/autoImporter.js.map +1 -1
- package/dist/languageService/callHierarchyProvider.js +6 -32
- package/dist/languageService/callHierarchyProvider.js.map +1 -1
- package/dist/languageService/completionProvider.d.ts +40 -79
- package/dist/languageService/completionProvider.js +571 -811
- package/dist/languageService/completionProvider.js.map +1 -1
- package/dist/languageService/documentSymbolCollector.d.ts +2 -2
- package/dist/languageService/documentSymbolCollector.js +33 -23
- package/dist/languageService/documentSymbolCollector.js.map +1 -1
- package/dist/languageService/documentSymbolProvider.d.ts +13 -35
- package/dist/languageService/documentSymbolProvider.js +52 -264
- package/dist/languageService/documentSymbolProvider.js.map +1 -1
- package/dist/languageService/hoverProvider.d.ts +1 -3
- package/dist/languageService/hoverProvider.js +11 -97
- package/dist/languageService/hoverProvider.js.map +1 -1
- package/dist/languageService/referencesProvider.d.ts +3 -3
- package/dist/languageService/referencesProvider.js +5 -7
- package/dist/languageService/referencesProvider.js.map +1 -1
- package/dist/languageService/renameProvider.d.ts +0 -1
- package/dist/languageService/renameProvider.js +2 -6
- package/dist/languageService/renameProvider.js.map +1 -1
- package/dist/languageService/symbolIndexer.d.ts +31 -0
- package/dist/languageService/symbolIndexer.js +105 -0
- package/dist/languageService/symbolIndexer.js.map +1 -0
- package/dist/languageService/tooltipUtils.d.ts +8 -1
- package/dist/languageService/tooltipUtils.js +102 -1
- package/dist/languageService/tooltipUtils.js.map +1 -1
- package/dist/languageService/workspaceSymbolProvider.d.ts +17 -0
- package/dist/languageService/workspaceSymbolProvider.js +133 -0
- package/dist/languageService/workspaceSymbolProvider.js.map +1 -0
- package/dist/localization/localize.d.ts +16 -1
- package/dist/localization/localize.js +9 -1
- package/dist/localization/localize.js.map +1 -1
- package/dist/localization/package.nls.en-us.json +9 -1
- package/dist/parser/parser.js +3 -0
- package/dist/parser/parser.js.map +1 -1
- package/dist/pyright.js +26 -4
- package/dist/pyright.js.map +1 -1
- package/dist/tests/chainedSourceFiles.test.js +15 -20
- package/dist/tests/chainedSourceFiles.test.js.map +1 -1
- package/dist/tests/checker.test.js +14 -0
- package/dist/tests/checker.test.js.map +1 -1
- package/dist/tests/completions.test.js +11 -236
- package/dist/tests/completions.test.js.map +1 -1
- package/dist/tests/docStringConversion.test.js +36 -2
- package/dist/tests/docStringConversion.test.js.map +1 -1
- package/dist/tests/fourslash/completions.override2.fourslash.js +1 -16
- package/dist/tests/fourslash/completions.override2.fourslash.js.map +1 -1
- package/dist/tests/harness/fourslash/testState.d.ts +14 -8
- package/dist/tests/harness/fourslash/testState.js +25 -36
- package/dist/tests/harness/fourslash/testState.js.map +1 -1
- package/dist/tests/importResolver.test.js +81 -1
- package/dist/tests/importResolver.test.js.map +1 -1
- package/dist/tests/typeEvaluator2.test.js +12 -0
- package/dist/tests/typeEvaluator2.test.js.map +1 -1
- package/dist/tests/typeEvaluator3.test.js +4 -0
- package/dist/tests/typeEvaluator3.test.js.map +1 -1
- package/dist/tests/typeEvaluator5.test.js +21 -9
- package/dist/tests/typeEvaluator5.test.js.map +1 -1
- package/dist/tests/workspaceEditUtils.test.js +15 -10
- package/dist/tests/workspaceEditUtils.test.js.map +1 -1
- package/package.json +1 -1
- package/dist/languageService/importAdder.d.ts +0 -40
- package/dist/languageService/importAdder.js +0 -388
- package/dist/languageService/importAdder.js.map +0 -1
- package/dist/tests/fourslash/completions.commitChars.fourslash.d.ts +0 -1
- package/dist/tests/fourslash/completions.commitChars.fourslash.js +0 -81
- package/dist/tests/fourslash/completions.commitChars.fourslash.js.map +0 -1
- package/dist/tests/importAdder.test.d.ts +0 -1
- package/dist/tests/importAdder.test.js +0 -1325
- package/dist/tests/importAdder.test.js.map +0 -1
@@ -1,37 +1,15 @@
|
|
1
|
-
import { CancellationToken,
|
2
|
-
import {
|
3
|
-
import {
|
4
|
-
|
5
|
-
import { ParseResults } from '../parser/parser';
|
6
|
-
export interface IndexAliasData {
|
7
|
-
readonly originalName: string;
|
8
|
-
readonly modulePath: string;
|
9
|
-
readonly kind: SymbolKind;
|
10
|
-
readonly itemKind?: CompletionItemKind | undefined;
|
11
|
-
}
|
12
|
-
export interface IndexSymbolData {
|
13
|
-
readonly name: string;
|
14
|
-
readonly externallyVisible: boolean;
|
15
|
-
readonly kind: SymbolKind;
|
16
|
-
readonly itemKind?: CompletionItemKind | undefined;
|
17
|
-
readonly alias?: IndexAliasData | undefined;
|
18
|
-
readonly range?: Range | undefined;
|
19
|
-
readonly selectionRange?: Range | undefined;
|
20
|
-
readonly children?: IndexSymbolData[] | undefined;
|
21
|
-
}
|
22
|
-
export interface IndexResults {
|
23
|
-
readonly privateOrProtected: boolean;
|
24
|
-
readonly symbols: IndexSymbolData[];
|
25
|
-
}
|
26
|
-
export interface IndexOptions {
|
27
|
-
indexingForAutoImportMode: boolean;
|
28
|
-
includeAllSymbols?: boolean;
|
29
|
-
}
|
30
|
-
export declare type WorkspaceSymbolCallback = (symbols: SymbolInformation[]) => void;
|
31
|
-
export declare function getIndexAliasData(importLookup: ImportLookup, declaration: AliasDeclaration): IndexAliasData | undefined;
|
32
|
-
export declare function convertToFlatSymbols(documentUri: string, symbolList: DocumentSymbol[]): SymbolInformation[];
|
1
|
+
import { CancellationToken, DocumentSymbol, SymbolInformation } from 'vscode-languageserver';
|
2
|
+
import { IndexSymbolData } from './symbolIndexer';
|
3
|
+
import { ProgramView } from '../common/extensibility';
|
4
|
+
export declare function convertToFlatSymbols(program: ProgramView, filePath: string, symbolList: DocumentSymbol[]): SymbolInformation[];
|
33
5
|
export declare class DocumentSymbolProvider {
|
34
|
-
|
35
|
-
|
36
|
-
|
6
|
+
protected readonly program: ProgramView;
|
7
|
+
protected readonly filePath: string;
|
8
|
+
private readonly _supportHierarchicalDocumentSymbol;
|
9
|
+
private readonly _token;
|
10
|
+
private _parseResults;
|
11
|
+
constructor(program: ProgramView, filePath: string, _supportHierarchicalDocumentSymbol: boolean, _token: CancellationToken);
|
12
|
+
getSymbols(): DocumentSymbol[] | SymbolInformation[];
|
13
|
+
protected getHierarchicalSymbols(): DocumentSymbol[];
|
14
|
+
protected appendDocumentSymbolsRecursive(indexSymbolData: IndexSymbolData[] | undefined, symbolList: DocumentSymbol[]): void;
|
37
15
|
}
|
@@ -8,296 +8,84 @@
|
|
8
8
|
* Logic that enumerates all of the symbols within a specified
|
9
9
|
* source file document.
|
10
10
|
*/
|
11
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
12
|
-
if (k2 === undefined) k2 = k;
|
13
|
-
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
14
|
-
}) : (function(o, m, k, k2) {
|
15
|
-
if (k2 === undefined) k2 = k;
|
16
|
-
o[k2] = m[k];
|
17
|
-
}));
|
18
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
19
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
20
|
-
}) : function(o, v) {
|
21
|
-
o["default"] = v;
|
22
|
-
});
|
23
|
-
var __importStar = (this && this.__importStar) || function (mod) {
|
24
|
-
if (mod && mod.__esModule) return mod;
|
25
|
-
var result = {};
|
26
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
27
|
-
__setModuleDefault(result, mod);
|
28
|
-
return result;
|
29
|
-
};
|
30
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
31
|
-
exports.DocumentSymbolProvider = exports.convertToFlatSymbols =
|
12
|
+
exports.DocumentSymbolProvider = exports.convertToFlatSymbols = void 0;
|
32
13
|
const vscode_languageserver_1 = require("vscode-languageserver");
|
33
|
-
const vscode_uri_1 = require("vscode-uri");
|
34
|
-
const AnalyzerNodeInfo = __importStar(require("../analyzer/analyzerNodeInfo"));
|
35
|
-
const declarationUtils_1 = require("../analyzer/declarationUtils");
|
36
|
-
const symbolUtils_1 = require("../analyzer/symbolUtils");
|
37
|
-
const typeUtils_1 = require("../analyzer/typeUtils");
|
38
14
|
const cancellationUtils_1 = require("../common/cancellationUtils");
|
39
|
-
const
|
40
|
-
const
|
41
|
-
const
|
42
|
-
function
|
43
|
-
var _a;
|
44
|
-
if (!declaration.symbolName) {
|
45
|
-
return undefined;
|
46
|
-
}
|
47
|
-
const resolvedInfo = (0, declarationUtils_1.resolveAliasDeclaration)(importLookup, declaration, {
|
48
|
-
resolveLocalNames: true,
|
49
|
-
allowExternallyHiddenAccess: false,
|
50
|
-
skipFileNeededCheck: false,
|
51
|
-
});
|
52
|
-
if (!resolvedInfo || !resolvedInfo.declaration) {
|
53
|
-
return undefined;
|
54
|
-
}
|
55
|
-
if (resolvedInfo.isPrivate) {
|
56
|
-
return undefined;
|
57
|
-
}
|
58
|
-
const nameValue = (0, declarationUtils_1.getNameFromDeclaration)(resolvedInfo.declaration);
|
59
|
-
if (!nameValue || resolvedInfo.declaration.path.length <= 0) {
|
60
|
-
return undefined;
|
61
|
-
}
|
62
|
-
const symbolKind = (_a = getSymbolKind(nameValue, resolvedInfo.declaration)) !== null && _a !== void 0 ? _a : vscode_languageserver_1.SymbolKind.Module;
|
63
|
-
return {
|
64
|
-
originalName: nameValue,
|
65
|
-
modulePath: resolvedInfo.declaration.path,
|
66
|
-
kind: symbolKind,
|
67
|
-
itemKind: (0, autoImporter_1.convertSymbolKindToCompletionItemKind)(symbolKind),
|
68
|
-
};
|
69
|
-
}
|
70
|
-
exports.getIndexAliasData = getIndexAliasData;
|
71
|
-
function convertToFlatSymbols(documentUri, symbolList) {
|
15
|
+
const symbolIndexer_1 = require("./symbolIndexer");
|
16
|
+
const analyzerNodeInfo_1 = require("../analyzer/analyzerNodeInfo");
|
17
|
+
const pathUtils_1 = require("../common/pathUtils");
|
18
|
+
function convertToFlatSymbols(program, filePath, symbolList) {
|
72
19
|
const flatSymbols = [];
|
20
|
+
const documentUri = (0, pathUtils_1.convertPathToUri)(program.fileSystem, filePath);
|
73
21
|
for (const symbol of symbolList) {
|
74
|
-
|
22
|
+
_appendToFlatSymbolsRecursive(flatSymbols, documentUri, symbol);
|
75
23
|
}
|
76
24
|
return flatSymbols;
|
77
25
|
}
|
78
26
|
exports.convertToFlatSymbols = convertToFlatSymbols;
|
79
27
|
class DocumentSymbolProvider {
|
80
|
-
|
81
|
-
|
28
|
+
constructor(program, filePath, _supportHierarchicalDocumentSymbol, _token) {
|
29
|
+
this.program = program;
|
30
|
+
this.filePath = filePath;
|
31
|
+
this._supportHierarchicalDocumentSymbol = _supportHierarchicalDocumentSymbol;
|
32
|
+
this._token = _token;
|
33
|
+
this._parseResults = this.program.getParseResults(this.filePath);
|
34
|
+
}
|
35
|
+
getSymbols() {
|
36
|
+
if (!this._parseResults) {
|
37
|
+
return [];
|
38
|
+
}
|
39
|
+
const symbolList = this.getHierarchicalSymbols();
|
40
|
+
if (this._supportHierarchicalDocumentSymbol) {
|
41
|
+
return symbolList;
|
42
|
+
}
|
43
|
+
return convertToFlatSymbols(this.program, this.filePath, symbolList);
|
44
|
+
}
|
45
|
+
getHierarchicalSymbols() {
|
82
46
|
const symbolList = [];
|
83
|
-
|
47
|
+
const parseResults = this.program.getParseResults(this.filePath);
|
48
|
+
if (!parseResults) {
|
84
49
|
return symbolList;
|
85
50
|
}
|
86
|
-
const
|
87
|
-
|
51
|
+
const fileInfo = (0, analyzerNodeInfo_1.getFileInfo)(parseResults.parseTree);
|
52
|
+
if (!fileInfo) {
|
53
|
+
return symbolList;
|
54
|
+
}
|
55
|
+
const indexSymbolData = symbolIndexer_1.SymbolIndexer.indexSymbols(fileInfo, parseResults, this._token);
|
56
|
+
this.appendDocumentSymbolsRecursive(indexSymbolData, symbolList);
|
88
57
|
return symbolList;
|
89
58
|
}
|
90
|
-
|
91
|
-
|
92
|
-
if (!
|
59
|
+
appendDocumentSymbolsRecursive(indexSymbolData, symbolList) {
|
60
|
+
(0, cancellationUtils_1.throwIfCancellationRequested)(this._token);
|
61
|
+
if (!indexSymbolData) {
|
93
62
|
return;
|
94
63
|
}
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
static indexSymbols(fileInfo, parseResults, options, token) {
|
99
|
-
// Here are the rule of what symbols are indexed for a file.
|
100
|
-
// 1. If it is a stub file, we index every public symbols defined by "https://www.python.org/dev/peps/pep-0484/#stub-files"
|
101
|
-
// 2. If it is a py file and it is py.typed package, we index public symbols
|
102
|
-
// defined by "https://github.com/microsoft/pyright/blob/main/docs/typed-libraries.md#library-interface"
|
103
|
-
// 3. If it is a py file and it is not py.typed package, we index only symbols that appear in
|
104
|
-
// __all__ to make sure we don't include too many symbols in the index.
|
105
|
-
const indexSymbolData = [];
|
106
|
-
collectSymbolIndexData(fileInfo, parseResults, parseResults.parseTree, options, indexSymbolData, token);
|
107
|
-
return indexSymbolData;
|
108
|
-
}
|
109
|
-
}
|
110
|
-
exports.DocumentSymbolProvider = DocumentSymbolProvider;
|
111
|
-
function getSymbolKind(name, declaration, evaluator) {
|
112
|
-
var _a;
|
113
|
-
let symbolKind;
|
114
|
-
switch (declaration.type) {
|
115
|
-
case 6 /* Class */:
|
116
|
-
case 7 /* SpecialBuiltInClass */:
|
117
|
-
symbolKind = vscode_languageserver_1.SymbolKind.Class;
|
118
|
-
break;
|
119
|
-
case 5 /* Function */:
|
120
|
-
if (declaration.isMethod) {
|
121
|
-
const declType = (_a = evaluator === null || evaluator === void 0 ? void 0 : evaluator.getTypeForDeclaration(declaration)) === null || _a === void 0 ? void 0 : _a.type;
|
122
|
-
if (declType && (0, typeUtils_1.isMaybeDescriptorInstance)(declType, /* requireSetter */ false)) {
|
123
|
-
symbolKind = vscode_languageserver_1.SymbolKind.Property;
|
124
|
-
}
|
125
|
-
else {
|
126
|
-
symbolKind = vscode_languageserver_1.SymbolKind.Method;
|
127
|
-
}
|
128
|
-
}
|
129
|
-
else {
|
130
|
-
symbolKind = vscode_languageserver_1.SymbolKind.Function;
|
131
|
-
}
|
132
|
-
break;
|
133
|
-
case 8 /* Alias */:
|
134
|
-
symbolKind = vscode_languageserver_1.SymbolKind.Module;
|
135
|
-
break;
|
136
|
-
case 2 /* Parameter */:
|
137
|
-
if (name === 'self' || name === 'cls' || name === '_') {
|
138
|
-
return;
|
64
|
+
for (const symbolData of indexSymbolData) {
|
65
|
+
if (symbolData.alias) {
|
66
|
+
continue;
|
139
67
|
}
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
case 1 /* Variable */:
|
146
|
-
if (name === '_') {
|
147
|
-
return;
|
68
|
+
// It's possible for a name to be '' under certain error
|
69
|
+
// conditions (such as a decorator with no associated function
|
70
|
+
// or class).
|
71
|
+
if (!symbolData.name) {
|
72
|
+
continue;
|
148
73
|
}
|
149
|
-
|
150
|
-
|
151
|
-
default:
|
152
|
-
symbolKind = vscode_languageserver_1.SymbolKind.Variable;
|
153
|
-
break;
|
154
|
-
}
|
155
|
-
return symbolKind;
|
156
|
-
}
|
157
|
-
function appendWorkspaceSymbolsRecursive(indexSymbolData, filePath, query, container, symbolList, token) {
|
158
|
-
(0, cancellationUtils_1.throwIfCancellationRequested)(token);
|
159
|
-
if (!indexSymbolData) {
|
160
|
-
return;
|
161
|
-
}
|
162
|
-
for (const symbolData of indexSymbolData) {
|
163
|
-
if (symbolData.alias) {
|
164
|
-
continue;
|
165
|
-
}
|
166
|
-
if (StringUtils.isPatternInSymbol(query, symbolData.name)) {
|
167
|
-
const location = {
|
168
|
-
uri: vscode_uri_1.URI.file(filePath).toString(),
|
169
|
-
range: symbolData.selectionRange,
|
170
|
-
};
|
74
|
+
const children = [];
|
75
|
+
this.appendDocumentSymbolsRecursive(symbolData.children, children);
|
171
76
|
const symbolInfo = {
|
172
77
|
name: symbolData.name,
|
173
78
|
kind: symbolData.kind,
|
174
|
-
|
79
|
+
range: symbolData.range,
|
80
|
+
selectionRange: symbolData.selectionRange,
|
81
|
+
children: children,
|
175
82
|
};
|
176
|
-
if (container.length) {
|
177
|
-
symbolInfo.containerName = container;
|
178
|
-
}
|
179
83
|
symbolList.push(symbolInfo);
|
180
84
|
}
|
181
|
-
appendWorkspaceSymbolsRecursive(symbolData.children, filePath, query, getContainerName(container, symbolData.name), symbolList, token);
|
182
|
-
}
|
183
|
-
function getContainerName(container, name) {
|
184
|
-
if (container.length > 0) {
|
185
|
-
return `${container}.${name}`;
|
186
|
-
}
|
187
|
-
return name;
|
188
85
|
}
|
189
86
|
}
|
190
|
-
|
191
|
-
|
192
|
-
if (!indexSymbolData) {
|
193
|
-
return;
|
194
|
-
}
|
195
|
-
for (const symbolData of indexSymbolData) {
|
196
|
-
if (symbolData.alias) {
|
197
|
-
continue;
|
198
|
-
}
|
199
|
-
// It's possible for a name to be '' under certain error
|
200
|
-
// conditions (such as a decorator with no associated function
|
201
|
-
// or class).
|
202
|
-
if (!symbolData.name) {
|
203
|
-
continue;
|
204
|
-
}
|
205
|
-
const children = [];
|
206
|
-
appendDocumentSymbolsRecursive(symbolData.children, children, token);
|
207
|
-
const symbolInfo = {
|
208
|
-
name: symbolData.name,
|
209
|
-
kind: symbolData.kind,
|
210
|
-
range: symbolData.range,
|
211
|
-
selectionRange: symbolData.selectionRange,
|
212
|
-
children: children,
|
213
|
-
};
|
214
|
-
symbolList.push(symbolInfo);
|
215
|
-
}
|
216
|
-
}
|
217
|
-
function collectSymbolIndexData(fileInfo, parseResults, node, options, indexSymbolData, token) {
|
218
|
-
(0, cancellationUtils_1.throwIfCancellationRequested)(token);
|
219
|
-
const scope = AnalyzerNodeInfo.getScope(node);
|
220
|
-
if (!scope) {
|
221
|
-
return;
|
222
|
-
}
|
223
|
-
const symbolTable = scope.symbolTable;
|
224
|
-
symbolTable.forEach((symbol, name) => {
|
225
|
-
if (symbol.isIgnoredForProtocolMatch()) {
|
226
|
-
return;
|
227
|
-
}
|
228
|
-
// If we are not py.typed package, symbol must exist in __all__ for auto import mode.
|
229
|
-
if (options.indexingForAutoImportMode &&
|
230
|
-
!options.includeAllSymbols &&
|
231
|
-
!fileInfo.isStubFile &&
|
232
|
-
!fileInfo.isInPyTypedPackage &&
|
233
|
-
!symbol.isInDunderAll()) {
|
234
|
-
return;
|
235
|
-
}
|
236
|
-
// Prefer declarations with a defined type.
|
237
|
-
let declaration = (0, symbolUtils_1.getLastTypedDeclaredForSymbol)(symbol);
|
238
|
-
// Fall back to declarations without a type.
|
239
|
-
if (!declaration && symbol.hasDeclarations()) {
|
240
|
-
declaration = symbol.getDeclarations()[0];
|
241
|
-
}
|
242
|
-
if (!declaration) {
|
243
|
-
return;
|
244
|
-
}
|
245
|
-
if (8 /* Alias */ === declaration.type) {
|
246
|
-
if (!options.indexingForAutoImportMode) {
|
247
|
-
// We don't include import alias for workspace files.
|
248
|
-
return;
|
249
|
-
}
|
250
|
-
if (!declaration.loadSymbolsFromPath || declaration.path.length <= 0) {
|
251
|
-
// If alias doesn't have a path to the original file, we can't do dedup
|
252
|
-
// so ignore those aliases.
|
253
|
-
// ex) asyncio.futures, asyncio.base_futures.futures and many will dedup
|
254
|
-
// to asyncio.futures
|
255
|
-
return;
|
256
|
-
}
|
257
|
-
}
|
258
|
-
// We rely on ExternallyHidden flag to determine what
|
259
|
-
// symbols should be public (included in the index)
|
260
|
-
collectSymbolIndexDataForName(fileInfo, parseResults, declaration, options, (0, symbolUtils_1.isVisibleExternally)(symbol), name, indexSymbolData, token);
|
261
|
-
});
|
262
|
-
}
|
263
|
-
function collectSymbolIndexDataForName(fileInfo, parseResults, declaration, options, externallyVisible, name, indexSymbolData, token) {
|
264
|
-
if (options.indexingForAutoImportMode && !externallyVisible) {
|
265
|
-
return;
|
266
|
-
}
|
267
|
-
const symbolKind = getSymbolKind(name, declaration);
|
268
|
-
if (symbolKind === undefined) {
|
269
|
-
return;
|
270
|
-
}
|
271
|
-
const selectionRange = declaration.range;
|
272
|
-
let range = selectionRange;
|
273
|
-
const children = [];
|
274
|
-
if (declaration.type === 6 /* Class */ || declaration.type === 5 /* Function */) {
|
275
|
-
if (!options.indexingForAutoImportMode) {
|
276
|
-
collectSymbolIndexData(fileInfo, parseResults, declaration.node, options, children, token);
|
277
|
-
}
|
278
|
-
range = (0, positionUtils_1.convertOffsetsToRange)(declaration.node.start, declaration.node.start + declaration.node.length, parseResults.tokenizerOutput.lines);
|
279
|
-
}
|
280
|
-
let aliasData = undefined;
|
281
|
-
if (8 /* Alias */ === declaration.type) {
|
282
|
-
aliasData = getIndexAliasData(AnalyzerNodeInfo.getFileInfo(parseResults.parseTree).importLookup, declaration);
|
283
|
-
// If we can't create alias data for import alias, then don't include it in index.
|
284
|
-
if (!aliasData) {
|
285
|
-
return;
|
286
|
-
}
|
287
|
-
}
|
288
|
-
const data = {
|
289
|
-
name,
|
290
|
-
externallyVisible,
|
291
|
-
kind: symbolKind,
|
292
|
-
itemKind: (0, autoImporter_1.convertSymbolKindToCompletionItemKind)(symbolKind),
|
293
|
-
alias: aliasData,
|
294
|
-
range: options.indexingForAutoImportMode ? undefined : range,
|
295
|
-
selectionRange: options.indexingForAutoImportMode ? undefined : selectionRange,
|
296
|
-
children: options.indexingForAutoImportMode ? undefined : children,
|
297
|
-
};
|
298
|
-
indexSymbolData.push(data);
|
299
|
-
}
|
300
|
-
function appendToFlatSymbolsRecursive(flatSymbols, documentUri, symbol, parent) {
|
87
|
+
exports.DocumentSymbolProvider = DocumentSymbolProvider;
|
88
|
+
function _appendToFlatSymbolsRecursive(flatSymbols, documentUri, symbol, parent) {
|
301
89
|
const flatSymbol = {
|
302
90
|
name: symbol.name,
|
303
91
|
kind: symbol.kind,
|
@@ -312,7 +100,7 @@ function appendToFlatSymbolsRecursive(flatSymbols, documentUri, symbol, parent)
|
|
312
100
|
flatSymbols.push(flatSymbol);
|
313
101
|
if (symbol.children) {
|
314
102
|
for (const child of symbol.children) {
|
315
|
-
|
103
|
+
_appendToFlatSymbolsRecursive(flatSymbols, documentUri, child, symbol);
|
316
104
|
}
|
317
105
|
}
|
318
106
|
}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"documentSymbolProvider.js","sourceRoot":"","sources":["../../../src/languageService/documentSymbolProvider.ts"],"names":[],"mappings":";AAAA;;;;;;;;GAQG
|
1
|
+
{"version":3,"file":"documentSymbolProvider.js","sourceRoot":"","sources":["../../../src/languageService/documentSymbolProvider.ts"],"names":[],"mappings":"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"}
|
@@ -19,11 +19,9 @@ export declare class HoverProvider {
|
|
19
19
|
private _addResultsForDeclaration;
|
20
20
|
private _tryAddPartsForTypedDictKey;
|
21
21
|
private _addInitOrNewMethodInsteadIfCallNode;
|
22
|
+
private _getType;
|
22
23
|
private _getTypeText;
|
23
24
|
private _getTypesText;
|
24
|
-
private _bindFunctionToClassOrObject;
|
25
|
-
private _getType;
|
26
|
-
private _limitOverloadBasedOnCall;
|
27
25
|
private _addDocumentationPart;
|
28
26
|
private _addDocumentationPartForType;
|
29
27
|
private _addDocumentationResultsPart;
|
@@ -334,73 +334,26 @@ class HoverProvider {
|
|
334
334
|
});
|
335
335
|
}
|
336
336
|
_addInitOrNewMethodInsteadIfCallNode(node, parts, declaration) {
|
337
|
-
|
338
|
-
|
339
|
-
// instantiated), include the constructor arguments within the
|
340
|
-
// hover text.
|
341
|
-
let callLeftNode = node;
|
342
|
-
// Allow the left to be a member access chain (e.g. a.b.c) if the
|
343
|
-
// node in question is the last item in the chain.
|
344
|
-
if (((_a = callLeftNode === null || callLeftNode === void 0 ? void 0 : callLeftNode.parent) === null || _a === void 0 ? void 0 : _a.nodeType) === 35 /* MemberAccess */ && node === callLeftNode.parent.memberName) {
|
345
|
-
callLeftNode = node.parent;
|
346
|
-
// Allow the left to be a generic class constructor (e.g. foo[int]())
|
347
|
-
}
|
348
|
-
else if (((_b = callLeftNode === null || callLeftNode === void 0 ? void 0 : callLeftNode.parent) === null || _b === void 0 ? void 0 : _b.nodeType) === 24 /* Index */) {
|
349
|
-
callLeftNode = node.parent;
|
350
|
-
}
|
351
|
-
if (!callLeftNode ||
|
352
|
-
!callLeftNode.parent ||
|
353
|
-
callLeftNode.parent.nodeType !== 9 /* Call */ ||
|
354
|
-
callLeftNode.parent.leftExpression !== callLeftNode) {
|
355
|
-
return false;
|
356
|
-
}
|
357
|
-
// Get the init method for this class.
|
358
|
-
const classType = this._getType(node);
|
359
|
-
if (!(0, types_1.isInstantiableClass)(classType)) {
|
360
|
-
return false;
|
361
|
-
}
|
362
|
-
const instanceType = this._getType(callLeftNode.parent);
|
363
|
-
if (!(0, types_1.isClassInstance)(instanceType)) {
|
337
|
+
const result = (0, tooltipUtils_1.getClassAndConstructorTypes)(node, this._evaluator);
|
338
|
+
if (!result) {
|
364
339
|
return false;
|
365
340
|
}
|
366
|
-
|
367
|
-
|
368
|
-
// Don't exclude `object.__init__` since in the plain case we want to show Foo().
|
369
|
-
const initMember = (0, typeUtils_1.lookUpClassMember)(classType, '__init__', 8 /* SkipInstanceVariables */);
|
370
|
-
if (initMember) {
|
371
|
-
const functionType = this._evaluator.getTypeOfMember(initMember);
|
372
|
-
if ((0, types_1.isFunction)(functionType) || (0, types_1.isOverloadedFunction)(functionType)) {
|
373
|
-
methodType = this._bindFunctionToClassOrObject(node, instanceType, functionType);
|
374
|
-
}
|
375
|
-
}
|
376
|
-
// If there was no `__init__`, excluding `object` class `__init__`, or if `__init__` only had default params (*args: Any, **kwargs: Any) or no params (),
|
377
|
-
// see if we can find a better `__new__` method.
|
378
|
-
if (!methodType ||
|
379
|
-
(methodType &&
|
380
|
-
(0, types_1.isFunction)(methodType) &&
|
381
|
-
(types_1.FunctionType.hasDefaultParameters(methodType) || methodType.details.parameters.length === 0))) {
|
382
|
-
const newMember = (0, typeUtils_1.lookUpClassMember)(classType, '__new__', 4 /* SkipObjectBaseClass */ | 8 /* SkipInstanceVariables */);
|
383
|
-
if (newMember) {
|
384
|
-
const newMemberType = this._evaluator.getTypeOfMember(newMember);
|
385
|
-
// Prefer `__new__` if it doesn't have default params (*args: Any, **kwargs: Any) or no params ().
|
386
|
-
if ((0, types_1.isFunction)(newMemberType) || (0, types_1.isOverloadedFunction)(newMemberType)) {
|
387
|
-
// Set `treatConstructorAsClassMember` to true to exclude `cls` as a parameter.
|
388
|
-
methodType = this._bindFunctionToClassOrObject(node, instanceType, newMemberType,
|
389
|
-
/* treatConstructorAsClassMember */ true);
|
390
|
-
}
|
391
|
-
}
|
392
|
-
}
|
393
|
-
if (methodType && ((0, types_1.isFunction)(methodType) || (0, types_1.isOverloadedFunction)(methodType))) {
|
394
|
-
this._addResultsPart(parts, (0, tooltipUtils_1.getConstructorTooltip)(node.value, methodType, this._evaluator, this._functionSignatureDisplay),
|
341
|
+
if (result.methodType && ((0, types_1.isFunction)(result.methodType) || (0, types_1.isOverloadedFunction)(result.methodType))) {
|
342
|
+
this._addResultsPart(parts, (0, tooltipUtils_1.getConstructorTooltip)(node.value, result.methodType, this._evaluator, this._functionSignatureDisplay),
|
395
343
|
/* python */ true);
|
396
|
-
const addedDoc = this._addDocumentationPartForType(parts, methodType, declaration);
|
344
|
+
const addedDoc = this._addDocumentationPartForType(parts, result.methodType, declaration);
|
397
345
|
if (!addedDoc) {
|
398
|
-
this._addDocumentationPartForType(parts, classType, declaration);
|
346
|
+
this._addDocumentationPartForType(parts, result.classType, declaration);
|
399
347
|
}
|
400
348
|
return true;
|
401
349
|
}
|
402
350
|
return false;
|
403
351
|
}
|
352
|
+
_getType(node) {
|
353
|
+
// It does common work necessary for hover for a type we got
|
354
|
+
// from raw type evaluator.
|
355
|
+
return (0, tooltipUtils_1.getTypeForToolTip)(this._evaluator, node);
|
356
|
+
}
|
404
357
|
_getTypeText(node, expandTypeAlias = false) {
|
405
358
|
const type = this._getType(node);
|
406
359
|
return ': ' + this._evaluator.printType(type, { expandTypeAlias });
|
@@ -409,45 +362,6 @@ class HoverProvider {
|
|
409
362
|
const type = (0, tooltipUtils_1.combineExpressionTypes)(nodes, this._evaluator);
|
410
363
|
return ': ' + this._evaluator.printType(type, { expandTypeAlias });
|
411
364
|
}
|
412
|
-
_bindFunctionToClassOrObject(node, baseType, memberType, treatConstructorAsClassMember) {
|
413
|
-
const methodType = this._evaluator.bindFunctionToClassOrObject(baseType, memberType,
|
414
|
-
/* memberClass */ undefined,
|
415
|
-
/* errorNode */ undefined,
|
416
|
-
/* recursiveCount */ undefined, treatConstructorAsClassMember);
|
417
|
-
if (!methodType) {
|
418
|
-
return undefined;
|
419
|
-
}
|
420
|
-
return this._limitOverloadBasedOnCall(methodType, node);
|
421
|
-
}
|
422
|
-
_getType(node) {
|
423
|
-
var _a;
|
424
|
-
// It does common work necessary for hover for a type we got
|
425
|
-
// from raw type evaluator.
|
426
|
-
const type = (_a = this._evaluator.getType(node)) !== null && _a !== void 0 ? _a : types_1.UnknownType.create();
|
427
|
-
return this._limitOverloadBasedOnCall(type, node);
|
428
|
-
}
|
429
|
-
_limitOverloadBasedOnCall(type, node) {
|
430
|
-
// If it's an overloaded function, see if it's part of a call expression.
|
431
|
-
// If so, we may be able to eliminate some of the overloads based on
|
432
|
-
// the overload resolution.
|
433
|
-
if (!(0, types_1.isOverloadedFunction)(type) || node.nodeType !== 38 /* Name */) {
|
434
|
-
return type;
|
435
|
-
}
|
436
|
-
const callNode = ParseTreeUtils.getCallForName(node);
|
437
|
-
if (!callNode) {
|
438
|
-
return type;
|
439
|
-
}
|
440
|
-
const callTypeResult = this._evaluator.getTypeResult(callNode);
|
441
|
-
if (!callTypeResult ||
|
442
|
-
!callTypeResult.overloadsUsedForCall ||
|
443
|
-
callTypeResult.overloadsUsedForCall.length === 0) {
|
444
|
-
return type;
|
445
|
-
}
|
446
|
-
if (callTypeResult.overloadsUsedForCall.length === 1) {
|
447
|
-
return callTypeResult.overloadsUsedForCall[0];
|
448
|
-
}
|
449
|
-
return types_1.OverloadedFunctionType.create(callTypeResult.overloadsUsedForCall);
|
450
|
-
}
|
451
365
|
_addDocumentationPart(parts, node, resolvedDecl) {
|
452
366
|
const type = this._getType(node);
|
453
367
|
this._addDocumentationPartForType(parts, type, resolvedDecl, node.value);
|