@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.
Files changed (142) hide show
  1. package/dist/analyzer/backgroundAnalysisProgram.d.ts +1 -1
  2. package/dist/analyzer/checker.js +37 -2
  3. package/dist/analyzer/checker.js.map +1 -1
  4. package/dist/analyzer/constraintSolver.js +14 -15
  5. package/dist/analyzer/constraintSolver.js.map +1 -1
  6. package/dist/analyzer/constructors.js +246 -189
  7. package/dist/analyzer/constructors.js.map +1 -1
  8. package/dist/analyzer/dataClasses.js +2 -2
  9. package/dist/analyzer/dataClasses.js.map +1 -1
  10. package/dist/analyzer/docStringConversion.js +1 -1
  11. package/dist/analyzer/docStringConversion.js.map +1 -1
  12. package/dist/analyzer/enums.js +8 -0
  13. package/dist/analyzer/enums.js.map +1 -1
  14. package/dist/analyzer/importResolver.js +47 -29
  15. package/dist/analyzer/importResolver.js.map +1 -1
  16. package/dist/analyzer/namedTuples.js +2 -5
  17. package/dist/analyzer/namedTuples.js.map +1 -1
  18. package/dist/analyzer/program.d.ts +7 -17
  19. package/dist/analyzer/program.js +32 -247
  20. package/dist/analyzer/program.js.map +1 -1
  21. package/dist/analyzer/protocols.js +1 -1
  22. package/dist/analyzer/protocols.js.map +1 -1
  23. package/dist/analyzer/service.d.ts +4 -12
  24. package/dist/analyzer/service.js +12 -23
  25. package/dist/analyzer/service.js.map +1 -1
  26. package/dist/analyzer/sourceFile.d.ts +2 -11
  27. package/dist/analyzer/sourceFile.js +11 -74
  28. package/dist/analyzer/sourceFile.js.map +1 -1
  29. package/dist/analyzer/symbol.d.ts +3 -1
  30. package/dist/analyzer/symbol.js +5 -0
  31. package/dist/analyzer/symbol.js.map +1 -1
  32. package/dist/analyzer/typeEvaluator.js +362 -142
  33. package/dist/analyzer/typeEvaluator.js.map +1 -1
  34. package/dist/analyzer/typeEvaluatorTypes.d.ts +4 -0
  35. package/dist/analyzer/typeEvaluatorTypes.js.map +1 -1
  36. package/dist/analyzer/typePrinter.d.ts +3 -3
  37. package/dist/analyzer/typePrinter.js +247 -100
  38. package/dist/analyzer/typePrinter.js.map +1 -1
  39. package/dist/analyzer/typeUtils.d.ts +12 -7
  40. package/dist/analyzer/typeUtils.js +173 -48
  41. package/dist/analyzer/typeUtils.js.map +1 -1
  42. package/dist/analyzer/typeVarContext.d.ts +1 -2
  43. package/dist/analyzer/typeVarContext.js +14 -32
  44. package/dist/analyzer/typeVarContext.js.map +1 -1
  45. package/dist/analyzer/types.d.ts +3 -2
  46. package/dist/analyzer/types.js +13 -10
  47. package/dist/analyzer/types.js.map +1 -1
  48. package/dist/backgroundAnalysisBase.d.ts +1 -1
  49. package/dist/backgroundAnalysisBase.js +16 -0
  50. package/dist/backgroundAnalysisBase.js.map +1 -1
  51. package/dist/commands/dumpFileDebugInfoCommand.js +0 -1
  52. package/dist/commands/dumpFileDebugInfoCommand.js.map +1 -1
  53. package/dist/common/extensibility.d.ts +26 -3
  54. package/dist/common/extensibility.js.map +1 -1
  55. package/dist/common/logTracker.d.ts +2 -0
  56. package/dist/common/logTracker.js +8 -1
  57. package/dist/common/logTracker.js.map +1 -1
  58. package/dist/common/lspUtils.d.ts +4 -1
  59. package/dist/common/lspUtils.js +38 -1
  60. package/dist/common/lspUtils.js.map +1 -1
  61. package/dist/common/pythonVersion.d.ts +2 -1
  62. package/dist/common/pythonVersion.js +1 -0
  63. package/dist/common/pythonVersion.js.map +1 -1
  64. package/dist/common/workspaceEditUtils.d.ts +3 -3
  65. package/dist/common/workspaceEditUtils.js +10 -10
  66. package/dist/common/workspaceEditUtils.js.map +1 -1
  67. package/dist/languageServerBase.d.ts +2 -5
  68. package/dist/languageServerBase.js +33 -60
  69. package/dist/languageServerBase.js.map +1 -1
  70. package/dist/languageService/autoImporter.d.ts +50 -51
  71. package/dist/languageService/autoImporter.js +125 -210
  72. package/dist/languageService/autoImporter.js.map +1 -1
  73. package/dist/languageService/callHierarchyProvider.js +6 -32
  74. package/dist/languageService/callHierarchyProvider.js.map +1 -1
  75. package/dist/languageService/completionProvider.d.ts +40 -79
  76. package/dist/languageService/completionProvider.js +571 -811
  77. package/dist/languageService/completionProvider.js.map +1 -1
  78. package/dist/languageService/documentSymbolCollector.d.ts +2 -2
  79. package/dist/languageService/documentSymbolCollector.js +33 -23
  80. package/dist/languageService/documentSymbolCollector.js.map +1 -1
  81. package/dist/languageService/documentSymbolProvider.d.ts +13 -35
  82. package/dist/languageService/documentSymbolProvider.js +52 -264
  83. package/dist/languageService/documentSymbolProvider.js.map +1 -1
  84. package/dist/languageService/hoverProvider.d.ts +1 -3
  85. package/dist/languageService/hoverProvider.js +11 -97
  86. package/dist/languageService/hoverProvider.js.map +1 -1
  87. package/dist/languageService/referencesProvider.d.ts +3 -3
  88. package/dist/languageService/referencesProvider.js +5 -7
  89. package/dist/languageService/referencesProvider.js.map +1 -1
  90. package/dist/languageService/renameProvider.d.ts +0 -1
  91. package/dist/languageService/renameProvider.js +2 -6
  92. package/dist/languageService/renameProvider.js.map +1 -1
  93. package/dist/languageService/symbolIndexer.d.ts +31 -0
  94. package/dist/languageService/symbolIndexer.js +105 -0
  95. package/dist/languageService/symbolIndexer.js.map +1 -0
  96. package/dist/languageService/tooltipUtils.d.ts +8 -1
  97. package/dist/languageService/tooltipUtils.js +102 -1
  98. package/dist/languageService/tooltipUtils.js.map +1 -1
  99. package/dist/languageService/workspaceSymbolProvider.d.ts +17 -0
  100. package/dist/languageService/workspaceSymbolProvider.js +133 -0
  101. package/dist/languageService/workspaceSymbolProvider.js.map +1 -0
  102. package/dist/localization/localize.d.ts +16 -1
  103. package/dist/localization/localize.js +9 -1
  104. package/dist/localization/localize.js.map +1 -1
  105. package/dist/localization/package.nls.en-us.json +9 -1
  106. package/dist/parser/parser.js +3 -0
  107. package/dist/parser/parser.js.map +1 -1
  108. package/dist/pyright.js +26 -4
  109. package/dist/pyright.js.map +1 -1
  110. package/dist/tests/chainedSourceFiles.test.js +15 -20
  111. package/dist/tests/chainedSourceFiles.test.js.map +1 -1
  112. package/dist/tests/checker.test.js +14 -0
  113. package/dist/tests/checker.test.js.map +1 -1
  114. package/dist/tests/completions.test.js +11 -236
  115. package/dist/tests/completions.test.js.map +1 -1
  116. package/dist/tests/docStringConversion.test.js +36 -2
  117. package/dist/tests/docStringConversion.test.js.map +1 -1
  118. package/dist/tests/fourslash/completions.override2.fourslash.js +1 -16
  119. package/dist/tests/fourslash/completions.override2.fourslash.js.map +1 -1
  120. package/dist/tests/harness/fourslash/testState.d.ts +14 -8
  121. package/dist/tests/harness/fourslash/testState.js +25 -36
  122. package/dist/tests/harness/fourslash/testState.js.map +1 -1
  123. package/dist/tests/importResolver.test.js +81 -1
  124. package/dist/tests/importResolver.test.js.map +1 -1
  125. package/dist/tests/typeEvaluator2.test.js +12 -0
  126. package/dist/tests/typeEvaluator2.test.js.map +1 -1
  127. package/dist/tests/typeEvaluator3.test.js +4 -0
  128. package/dist/tests/typeEvaluator3.test.js.map +1 -1
  129. package/dist/tests/typeEvaluator5.test.js +21 -9
  130. package/dist/tests/typeEvaluator5.test.js.map +1 -1
  131. package/dist/tests/workspaceEditUtils.test.js +15 -10
  132. package/dist/tests/workspaceEditUtils.test.js.map +1 -1
  133. package/package.json +1 -1
  134. package/dist/languageService/importAdder.d.ts +0 -40
  135. package/dist/languageService/importAdder.js +0 -388
  136. package/dist/languageService/importAdder.js.map +0 -1
  137. package/dist/tests/fourslash/completions.commitChars.fourslash.d.ts +0 -1
  138. package/dist/tests/fourslash/completions.commitChars.fourslash.js +0 -81
  139. package/dist/tests/fourslash/completions.commitChars.fourslash.js.map +0 -1
  140. package/dist/tests/importAdder.test.d.ts +0 -1
  141. package/dist/tests/importAdder.test.js +0 -1325
  142. package/dist/tests/importAdder.test.js.map +0 -1
@@ -1,37 +1,15 @@
1
- import { CancellationToken, CompletionItemKind, DocumentSymbol, SymbolInformation, SymbolKind } from 'vscode-languageserver';
2
- import { AnalyzerFileInfo, ImportLookup } from '../analyzer/analyzerFileInfo';
3
- import { AliasDeclaration } from '../analyzer/declaration';
4
- import { Range } from '../common/textRange';
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
- static getSymbolsForDocument(fileInfo: AnalyzerFileInfo | undefined, indexResults: IndexResults | undefined, parseResults: ParseResults | undefined, filePath: string, query: string, token: CancellationToken): SymbolInformation[];
35
- static addHierarchicalSymbolsForDocument(fileInfo: AnalyzerFileInfo | undefined, indexResults: IndexResults | undefined, parseResults: ParseResults | undefined, symbolList: DocumentSymbol[], token: CancellationToken): void;
36
- static indexSymbols(fileInfo: AnalyzerFileInfo, parseResults: ParseResults, options: IndexOptions, token: CancellationToken): IndexSymbolData[];
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 = exports.getIndexAliasData = void 0;
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 positionUtils_1 = require("../common/positionUtils");
40
- const StringUtils = __importStar(require("../common/stringUtils"));
41
- const autoImporter_1 = require("./autoImporter");
42
- function getIndexAliasData(importLookup, declaration) {
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
- appendToFlatSymbolsRecursive(flatSymbols, documentUri, symbol);
22
+ _appendToFlatSymbolsRecursive(flatSymbols, documentUri, symbol);
75
23
  }
76
24
  return flatSymbols;
77
25
  }
78
26
  exports.convertToFlatSymbols = convertToFlatSymbols;
79
27
  class DocumentSymbolProvider {
80
- static getSymbolsForDocument(fileInfo, indexResults, parseResults, filePath, query, token) {
81
- var _a;
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
- if (!indexResults && !parseResults) {
47
+ const parseResults = this.program.getParseResults(this.filePath);
48
+ if (!parseResults) {
84
49
  return symbolList;
85
50
  }
86
- const indexSymbolData = (_a = indexResults === null || indexResults === void 0 ? void 0 : indexResults.symbols) !== null && _a !== void 0 ? _a : DocumentSymbolProvider.indexSymbols(fileInfo, parseResults, { indexingForAutoImportMode: false }, token);
87
- appendWorkspaceSymbolsRecursive(indexSymbolData, filePath, query, '', symbolList, token);
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
- static addHierarchicalSymbolsForDocument(fileInfo, indexResults, parseResults, symbolList, token) {
91
- var _a;
92
- if (!indexResults && !parseResults) {
59
+ appendDocumentSymbolsRecursive(indexSymbolData, symbolList) {
60
+ (0, cancellationUtils_1.throwIfCancellationRequested)(this._token);
61
+ if (!indexSymbolData) {
93
62
  return;
94
63
  }
95
- const indexSymbolData = (_a = indexResults === null || indexResults === void 0 ? void 0 : indexResults.symbols) !== null && _a !== void 0 ? _a : DocumentSymbolProvider.indexSymbols(fileInfo, parseResults, { indexingForAutoImportMode: false }, token);
96
- appendDocumentSymbolsRecursive(indexSymbolData, symbolList, token);
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
- symbolKind = vscode_languageserver_1.SymbolKind.Variable;
141
- break;
142
- case 3 /* TypeParameter */:
143
- symbolKind = vscode_languageserver_1.SymbolKind.TypeParameter;
144
- break;
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
- symbolKind = declaration.isConstant || declaration.isFinal ? vscode_languageserver_1.SymbolKind.Constant : vscode_languageserver_1.SymbolKind.Variable;
150
- break;
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
- location,
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
- function appendDocumentSymbolsRecursive(indexSymbolData, symbolList, token) {
191
- (0, cancellationUtils_1.throwIfCancellationRequested)(token);
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
- appendToFlatSymbolsRecursive(flatSymbols, documentUri, child, symbol);
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":"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"}
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
- var _a, _b;
338
- // If the class is used as part of a call (i.e. it is being
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
- let methodType;
367
- // Try to get the `__init__` method first because it typically has more type information than `__new__`.
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);