@zzzen/pyright-internal 1.2.0-dev.20230212 → 1.2.0-dev.20230219

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 (118) hide show
  1. package/dist/analyzer/backgroundAnalysisProgram.d.ts +1 -0
  2. package/dist/analyzer/backgroundAnalysisProgram.js +5 -0
  3. package/dist/analyzer/backgroundAnalysisProgram.js.map +1 -1
  4. package/dist/analyzer/checker.js +7 -4
  5. package/dist/analyzer/checker.js.map +1 -1
  6. package/dist/analyzer/commentUtils.d.ts +6 -1
  7. package/dist/analyzer/commentUtils.js +100 -25
  8. package/dist/analyzer/commentUtils.js.map +1 -1
  9. package/dist/analyzer/declaration.d.ts +1 -0
  10. package/dist/analyzer/declaration.js.map +1 -1
  11. package/dist/analyzer/importStatementUtils.d.ts +1 -0
  12. package/dist/analyzer/importStatementUtils.js +14 -1
  13. package/dist/analyzer/importStatementUtils.js.map +1 -1
  14. package/dist/analyzer/parseTreeUtils.d.ts +5 -2
  15. package/dist/analyzer/parseTreeUtils.js +21 -3
  16. package/dist/analyzer/parseTreeUtils.js.map +1 -1
  17. package/dist/analyzer/patternMatching.js +25 -5
  18. package/dist/analyzer/patternMatching.js.map +1 -1
  19. package/dist/analyzer/program.d.ts +9 -2
  20. package/dist/analyzer/program.js +106 -8
  21. package/dist/analyzer/program.js.map +1 -1
  22. package/dist/analyzer/service.d.ts +1 -4
  23. package/dist/analyzer/service.js +16 -36
  24. package/dist/analyzer/service.js.map +1 -1
  25. package/dist/analyzer/sourceFile.d.ts +4 -0
  26. package/dist/analyzer/sourceFile.js +82 -16
  27. package/dist/analyzer/sourceFile.js.map +1 -1
  28. package/dist/analyzer/typeEvaluator.js +43 -15
  29. package/dist/analyzer/typeEvaluator.js.map +1 -1
  30. package/dist/backgroundAnalysisBase.d.ts +2 -1
  31. package/dist/backgroundAnalysisBase.js +15 -1
  32. package/dist/backgroundAnalysisBase.js.map +1 -1
  33. package/dist/backgroundThreadBase.js +1 -0
  34. package/dist/backgroundThreadBase.js.map +1 -1
  35. package/dist/common/commandLineOptions.d.ts +2 -0
  36. package/dist/common/commandLineOptions.js.map +1 -1
  37. package/dist/common/configOptions.d.ts +3 -0
  38. package/dist/common/configOptions.js +10 -1
  39. package/dist/common/configOptions.js.map +1 -1
  40. package/dist/common/core.d.ts +2 -0
  41. package/dist/common/core.js +9 -1
  42. package/dist/common/core.js.map +1 -1
  43. package/dist/common/diagnostic.d.ts +15 -3
  44. package/dist/common/diagnostic.js +13 -4
  45. package/dist/common/diagnostic.js.map +1 -1
  46. package/dist/common/editAction.d.ts +1 -0
  47. package/dist/common/editAction.js +8 -0
  48. package/dist/common/editAction.js.map +1 -1
  49. package/dist/common/extensibility.d.ts +34 -11
  50. package/dist/common/extensibility.js +63 -18
  51. package/dist/common/extensibility.js.map +1 -1
  52. package/dist/common/pathUtils.d.ts +3 -0
  53. package/dist/common/pathUtils.js +18 -0
  54. package/dist/common/pathUtils.js.map +1 -1
  55. package/dist/common/textEditUtils.d.ts +26 -9
  56. package/dist/common/textEditUtils.js +218 -41
  57. package/dist/common/textEditUtils.js.map +1 -1
  58. package/dist/languageServerBase.d.ts +3 -0
  59. package/dist/languageServerBase.js +90 -1
  60. package/dist/languageServerBase.js.map +1 -1
  61. package/dist/languageService/analyzerServiceExecutor.js +1 -0
  62. package/dist/languageService/analyzerServiceExecutor.js.map +1 -1
  63. package/dist/languageService/definitionProvider.js +1 -1
  64. package/dist/languageService/definitionProvider.js.map +1 -1
  65. package/dist/languageService/documentSymbolCollector.js +1 -1
  66. package/dist/languageService/documentSymbolCollector.js.map +1 -1
  67. package/dist/languageService/hoverProvider.js +10 -6
  68. package/dist/languageService/hoverProvider.js.map +1 -1
  69. package/dist/languageService/importAdder.d.ts +4 -0
  70. package/dist/languageService/importAdder.js +50 -13
  71. package/dist/languageService/importAdder.js.map +1 -1
  72. package/dist/languageService/insertionPointUtils.js +28 -7
  73. package/dist/languageService/insertionPointUtils.js.map +1 -1
  74. package/dist/languageService/renameModuleProvider.d.ts +12 -10
  75. package/dist/languageService/renameModuleProvider.js +240 -229
  76. package/dist/languageService/renameModuleProvider.js.map +1 -1
  77. package/dist/localization/localize.d.ts +9 -0
  78. package/dist/localization/localize.js +5 -0
  79. package/dist/localization/localize.js.map +1 -1
  80. package/dist/localization/package.nls.en-us.json +7 -1
  81. package/dist/tests/checker.test.js +5 -0
  82. package/dist/tests/checker.test.js.map +1 -1
  83. package/dist/tests/fourslash/hover.inferred.fourslash.d.ts +1 -0
  84. package/dist/tests/fourslash/hover.inferred.fourslash.js +24 -0
  85. package/dist/tests/fourslash/hover.inferred.fourslash.js.map +1 -0
  86. package/dist/tests/importAdder.test.js +39 -2
  87. package/dist/tests/importAdder.test.js.map +1 -1
  88. package/dist/tests/insertionPointUtils.test.js +70 -3
  89. package/dist/tests/insertionPointUtils.test.js.map +1 -1
  90. package/dist/tests/{updateSymbolReference.test.d.ts → moveSymbol.importAdder.test.d.ts} +0 -0
  91. package/dist/tests/moveSymbol.importAdder.test.js +139 -0
  92. package/dist/tests/moveSymbol.importAdder.test.js.map +1 -0
  93. package/dist/tests/moveSymbol.insertion.test.d.ts +1 -0
  94. package/dist/tests/moveSymbol.insertion.test.js +360 -0
  95. package/dist/tests/moveSymbol.insertion.test.js.map +1 -0
  96. package/dist/tests/moveSymbol.misc.test.d.ts +1 -0
  97. package/dist/tests/moveSymbol.misc.test.js +37 -0
  98. package/dist/tests/moveSymbol.misc.test.js.map +1 -0
  99. package/dist/tests/moveSymbol.updateReference.test.d.ts +1 -0
  100. package/dist/tests/{updateSymbolReference.test.js → moveSymbol.updateReference.test.js} +235 -158
  101. package/dist/tests/moveSymbol.updateReference.test.js.map +1 -0
  102. package/dist/tests/parseTreeUtils.test.js +36 -13
  103. package/dist/tests/parseTreeUtils.test.js.map +1 -1
  104. package/dist/tests/renameModuleTestUtils.js +9 -3
  105. package/dist/tests/renameModuleTestUtils.js.map +1 -1
  106. package/dist/tests/testStateUtils.d.ts +2 -0
  107. package/dist/tests/testStateUtils.js +25 -22
  108. package/dist/tests/testStateUtils.js.map +1 -1
  109. package/dist/tests/textEditUtil.test.d.ts +1 -0
  110. package/dist/tests/textEditUtil.test.js +107 -0
  111. package/dist/tests/textEditUtil.test.js.map +1 -0
  112. package/dist/tests/typeEvaluator4.test.js +4 -0
  113. package/dist/tests/typeEvaluator4.test.js.map +1 -1
  114. package/dist/workspaceMap.d.ts +0 -1
  115. package/dist/workspaceMap.js +0 -11
  116. package/dist/workspaceMap.js.map +1 -1
  117. package/package.json +1 -1
  118. package/dist/tests/updateSymbolReference.test.js.map +0 -1
@@ -26,11 +26,12 @@ var __importStar = (this && this.__importStar) || function (mod) {
26
26
  return result;
27
27
  };
28
28
  Object.defineProperty(exports, "__esModule", { value: true });
29
- exports.TextEditTracker = exports.convertEditActionsToWorkspaceEdit = exports.convertEditActionsToTextEdits = void 0;
29
+ exports.TextEditTracker = exports.applyTextEditActions = exports.convertEditActionsToWorkspaceEdit = exports.convertEditActionsToTextEdits = void 0;
30
30
  const analyzerNodeInfo_1 = require("../analyzer/analyzerNodeInfo");
31
31
  const importStatementUtils_1 = require("../analyzer/importStatementUtils");
32
32
  const ParseTreeUtils = __importStar(require("../analyzer/parseTreeUtils"));
33
33
  const debug = __importStar(require("../common/debug"));
34
+ const editAction_1 = require("../common/editAction");
34
35
  const collectionUtils_1 = require("./collectionUtils");
35
36
  const core_1 = require("./core");
36
37
  const positionUtils_1 = require("./positionUtils");
@@ -54,50 +55,116 @@ function convertEditActionsToWorkspaceEdit(uri, editActions) {
54
55
  };
55
56
  }
56
57
  exports.convertEditActionsToWorkspaceEdit = convertEditActionsToWorkspaceEdit;
58
+ function applyTextEditActions(text, edits, lines) {
59
+ const editsWithOffset = edits
60
+ .map((e) => {
61
+ var _a;
62
+ return ({
63
+ range: (_a = (0, positionUtils_1.convertRangeToTextRange)(e.range, lines)) !== null && _a !== void 0 ? _a : { start: text.length, length: 0 },
64
+ text: e.replacementText,
65
+ });
66
+ })
67
+ .sort((e1, e2) => {
68
+ const result = e2.range.start - e1.range.start;
69
+ if (result !== 0) {
70
+ return result;
71
+ }
72
+ return textRange_1.TextRange.getEnd(e2.range) - textRange_1.TextRange.getEnd(e1.range);
73
+ });
74
+ // Apply change in reverse order.
75
+ let current = text;
76
+ for (const change of editsWithOffset) {
77
+ current = current.substr(0, change.range.start) + change.text + current.substr(textRange_1.TextRange.getEnd(change.range));
78
+ }
79
+ return current;
80
+ }
81
+ exports.applyTextEditActions = applyTextEditActions;
57
82
  class TextEditTracker {
58
- constructor() {
59
- this._nodesRemoved = [];
83
+ constructor(_mergeOnlyDuplications = true) {
84
+ this._mergeOnlyDuplications = _mergeOnlyDuplications;
85
+ this._nodesRemoved = new Map();
60
86
  this._results = new Map();
87
+ this._pendingNodeToRemove = [];
88
+ // Empty
61
89
  }
62
90
  addEdits(...edits) {
63
91
  edits.forEach((e) => this.addEdit(e.filePath, e.range, e.replacementText));
64
92
  }
65
93
  addEdit(filePath, range, replacementText) {
66
94
  const edits = (0, collectionUtils_1.getOrAdd)(this._results, filePath, () => []);
67
- if (replacementText === '') {
68
- // If it is a deletion, merge with overlapping deletion edit if there is any.
69
- const deletions = this.getDeletionsForSpan(edits, range);
70
- if (deletions.length > 0) {
71
- // Delete the existing ones.
72
- this.removeEdits(edits, deletions);
73
- // Extend range with deleted ones.
74
- (0, textRange_1.extendRange)(range, deletions.map((d) => d.range));
75
- }
95
+ // If there is any overlapping edit, see whether we can merge edits.
96
+ // We can merge edits, if one of them is 'deletion' or 2 edits has the same
97
+ // replacement text with containing range.
98
+ const overlappingEdits = this._getEditsToMerge(edits, range, replacementText);
99
+ if (overlappingEdits.length > 0) {
100
+ // Merge the given edit with the existing edits by
101
+ // first deleting existing edits and expanding the current edit's range
102
+ // to cover all existing edits.
103
+ this._removeEdits(edits, overlappingEdits);
104
+ (0, textRange_1.extendRange)(range, overlappingEdits.map((d) => d.range));
76
105
  }
77
- // Don't put duplicated edit. It can happen if code has duplicated module import.
78
- // ex) from a import b, b, c
79
- // If we need to introduce new "from import" statement for "b", we will add new statement twice.
80
- if (edits.some((e) => (0, textRange_1.rangesAreEqual)(e.range, range) && e.replacementText === replacementText)) {
106
+ edits.push({ filePath, range, replacementText });
107
+ }
108
+ addEditWithTextRange(parseResults, range, replacementText) {
109
+ const filePath = (0, analyzerNodeInfo_1.getFileInfo)(parseResults.parseTree).filePath;
110
+ const existing = parseResults.text.substr(range.start, range.length);
111
+ if (existing === replacementText) {
112
+ // No change. Return as it is.
81
113
  return;
82
114
  }
83
- edits.push({ filePath, range, replacementText });
115
+ this.addEdit(filePath, (0, positionUtils_1.convertTextRangeToRange)(range, parseResults.tokenizerOutput.lines), replacementText);
84
116
  }
85
- getDeletionsForSpan(filePathOrEdit, range) {
86
- var _a;
87
- if ((0, core_1.isString)(filePathOrEdit)) {
88
- filePathOrEdit = (_a = this._results.get(filePathOrEdit)) !== null && _a !== void 0 ? _a : [];
117
+ deleteImportName(parseResults, importToDelete) {
118
+ // TODO: remove all these manual text handling and merge it to _processNodeRemoved that is
119
+ // used by remove unused imports.
120
+ const imports = importToDelete.nodeType === 21 /* ImportAs */
121
+ ? importToDelete.parent.list
122
+ : importToDelete.parent.imports;
123
+ const filePath = (0, analyzerNodeInfo_1.getFileInfo)(parseResults.parseTree).filePath;
124
+ const ranges = (0, importStatementUtils_1.getTextRangeForImportNameDeletion)(imports, imports.findIndex((v) => v === importToDelete));
125
+ ranges.forEach((r) => this.addEditWithTextRange(parseResults, r, ''));
126
+ this._markNodeRemoved(importToDelete, parseResults);
127
+ // Check whether we have deleted all trailing import names.
128
+ // If either no trailing import is deleted or handled properly
129
+ // then, there is nothing to do. otherwise, either delete the whole statement
130
+ // or remove trailing comma.
131
+ // ex) from x import [y], z or from x import y[, z]
132
+ let lastImportIndexNotDeleted = 0;
133
+ for (lastImportIndexNotDeleted = imports.length - 1; lastImportIndexNotDeleted >= 0; lastImportIndexNotDeleted--) {
134
+ if (!this._nodesRemoved.has(imports[lastImportIndexNotDeleted])) {
135
+ break;
136
+ }
137
+ }
138
+ if (lastImportIndexNotDeleted === -1) {
139
+ // Whole statement is deleted. Remove the statement itself.
140
+ // ex) [from x import a, b, c] or [import a]
141
+ const importStatement = importToDelete.parent;
142
+ if (importStatement) {
143
+ this.addEdit(filePath, ParseTreeUtils.getFullStatementRange(importStatement, parseResults), '');
144
+ }
145
+ }
146
+ else if (lastImportIndexNotDeleted >= 0 && lastImportIndexNotDeleted < imports.length - 2) {
147
+ // We need to delete trailing comma
148
+ // ex) from x import a, [b, c]
149
+ const start = textRange_1.TextRange.getEnd(imports[lastImportIndexNotDeleted]);
150
+ const length = textRange_1.TextRange.getEnd(imports[lastImportIndexNotDeleted + 1]) - start;
151
+ this.addEditWithTextRange(parseResults, { start, length }, '');
89
152
  }
90
- return filePathOrEdit.filter((e) => e.replacementText === '' && (0, textRange_1.doRangesIntersect)(e.range, range));
91
153
  }
92
- removeEdits(filePathOrEdit, edits) {
93
- var _a;
94
- if ((0, core_1.isString)(filePathOrEdit)) {
95
- filePathOrEdit = (_a = this._results.get(filePathOrEdit)) !== null && _a !== void 0 ? _a : [];
154
+ addOrUpdateImport(parseResults, importStatements, moduleNameInfo, importGroup, importNameInfo, updateOptions) {
155
+ // TODO: remove all these manual text handling and merge it to _processNodeRemoved that is
156
+ // used by remove unused imports.
157
+ if (importNameInfo &&
158
+ this._tryUpdateImport(parseResults, importStatements, moduleNameInfo, importNameInfo, updateOptions)) {
159
+ return;
96
160
  }
97
- (0, collectionUtils_1.removeArrayElements)(filePathOrEdit, (f) => edits.findIndex((e) => e === f) >= 0);
161
+ this._addImport(parseResults, importStatements, moduleNameInfo, importGroup, importNameInfo);
98
162
  }
99
163
  removeNodes(...nodes) {
100
- this._nodesRemoved.push(...nodes);
164
+ this._pendingNodeToRemove.push(...nodes);
165
+ }
166
+ isNodeRemoved(node) {
167
+ return this._nodesRemoved.has(node);
101
168
  }
102
169
  getEdits(token) {
103
170
  this._processNodeRemoved(token);
@@ -105,39 +172,131 @@ class TextEditTracker {
105
172
  this._results.forEach((v) => (0, collectionUtils_1.appendArray)(edits, v));
106
173
  return edits;
107
174
  }
175
+ _addImport(parseResults, importStatements, moduleNameInfo, importGroup, importNameInfo) {
176
+ const filePath = (0, analyzerNodeInfo_1.getFileInfo)(parseResults.parseTree).filePath;
177
+ this.addEdits(...(0, importStatementUtils_1.getTextEditsForAutoImportInsertion)(importNameInfo !== null && importNameInfo !== void 0 ? importNameInfo : [], moduleNameInfo, importStatements, importGroup, parseResults, (0, positionUtils_1.convertOffsetToPosition)(parseResults.parseTree.length, parseResults.tokenizerOutput.lines)).map((e) => ({ filePath, range: e.range, replacementText: e.replacementText })));
178
+ }
179
+ _tryUpdateImport(parseResults, importStatements, moduleNameInfo, importNameInfo, updateOptions) {
180
+ if (!updateOptions) {
181
+ return false;
182
+ }
183
+ // See whether we have existing from import statement for the same module
184
+ // ex) from [|moduleName|] import subModule
185
+ const imported = importStatements.orderedImports.find((i) => i.node.nodeType === 22 /* ImportFrom */ &&
186
+ (i.moduleName === moduleNameInfo.nameForImportFrom || i.moduleName === moduleNameInfo.name));
187
+ if (!imported || imported.node.nodeType !== 22 /* ImportFrom */ || imported.node.isWildcardImport) {
188
+ return false;
189
+ }
190
+ const filePath = (0, analyzerNodeInfo_1.getFileInfo)(parseResults.parseTree).filePath;
191
+ const edits = (0, importStatementUtils_1.getTextEditsForAutoImportSymbolAddition)(importNameInfo, imported, parseResults);
192
+ if (imported.node !== updateOptions.currentFromImport) {
193
+ // Add what we want to the existing "import from" statement as long as it is not the same import
194
+ // node we are working on.
195
+ // ex) from xxx import yyy <= we are working on here.
196
+ // from xxx import zzz <= but we found this.
197
+ this.addEdits(...edits.map((e) => ({ filePath, range: e.range, replacementText: e.replacementText })));
198
+ return true;
199
+ }
200
+ const moduleNames = updateOptions.originalModuleName.split('.');
201
+ const newModuleNames = moduleNameInfo.name.split('.');
202
+ if (!(0, importStatementUtils_1.haveSameParentModule)(moduleNames, newModuleNames)) {
203
+ // Module has moved.
204
+ return false;
205
+ }
206
+ // Check whether we can avoid creating a new statement. We can't just merge with existing one since
207
+ // we could create invalid text edits (2 edits that change the same span, or invalid replacement text since
208
+ // texts on the node has changed)
209
+ if (importNameInfo.length !== 1 || edits.length !== 1) {
210
+ return false;
211
+ }
212
+ const deletions = this._getDeletionsForSpan(filePath, edits[0].range);
213
+ if (deletions.length === 0) {
214
+ this.addEdit(filePath, edits[0].range, edits[0].replacementText);
215
+ return true;
216
+ }
217
+ const lastModuleName = moduleNames[moduleNames.length - 1];
218
+ const newLastModuleName = newModuleNames[newModuleNames.length - 1];
219
+ const alias = importNameInfo[0].alias === newLastModuleName ? lastModuleName : importNameInfo[0].alias;
220
+ const importName = updateOptions.currentFromImport.imports.find((i) => { var _a; return i.name.value === lastModuleName && ((_a = i.alias) === null || _a === void 0 ? void 0 : _a.value) === alias; });
221
+ if (!importName) {
222
+ return false;
223
+ }
224
+ this._removeEdits(filePath, deletions);
225
+ if (importName.alias) {
226
+ this._nodesRemoved.delete(importName.alias);
227
+ }
228
+ this.addEdit(filePath, (0, positionUtils_1.convertTextRangeToRange)(importName.name, parseResults.tokenizerOutput.lines), newLastModuleName);
229
+ return true;
230
+ }
231
+ _getDeletionsForSpan(filePathOrEdit, range) {
232
+ const edits = this._getOverlappingForSpan(filePathOrEdit, range);
233
+ return edits.filter((e) => e.replacementText === '');
234
+ }
235
+ _removeEdits(filePathOrEdit, edits) {
236
+ var _a;
237
+ if ((0, core_1.isString)(filePathOrEdit)) {
238
+ filePathOrEdit = (_a = this._results.get(filePathOrEdit)) !== null && _a !== void 0 ? _a : [];
239
+ }
240
+ (0, collectionUtils_1.removeArrayElements)(filePathOrEdit, (f) => edits.some((e) => editAction_1.FileEditAction.areEqual(f, e)));
241
+ }
242
+ _getEditsToMerge(edits, range, replacementText) {
243
+ const overlappingEdits = this._getOverlappingForSpan(edits, range);
244
+ if (this._mergeOnlyDuplications && overlappingEdits.length > 0) {
245
+ // Merge duplicated deletion. For deletion, we can even merge edits
246
+ // intersecting each other.
247
+ if (replacementText === '') {
248
+ return overlappingEdits.filter((e) => e.replacementText === '');
249
+ }
250
+ // Merge duplicated edits as long as one of them contains the other.
251
+ return overlappingEdits.filter((e) => e.replacementText === replacementText &&
252
+ ((0, textRange_1.doesRangeContain)(range, e.range) || (0, textRange_1.doesRangeContain)(e.range, range)));
253
+ }
254
+ // We are allowed to merge more than exact duplication. If the existing edit
255
+ // is deletion or duplicated text with containing ranges, merge them to 1.
256
+ return overlappingEdits.filter((e) => e.replacementText === '' ||
257
+ (e.replacementText === replacementText &&
258
+ ((0, textRange_1.doesRangeContain)(range, e.range) || (0, textRange_1.doesRangeContain)(e.range, range))));
259
+ }
260
+ _getOverlappingForSpan(filePathOrEdit, range) {
261
+ var _a;
262
+ if ((0, core_1.isString)(filePathOrEdit)) {
263
+ filePathOrEdit = (_a = this._results.get(filePathOrEdit)) !== null && _a !== void 0 ? _a : [];
264
+ }
265
+ return filePathOrEdit.filter((e) => (0, textRange_1.doRangesIntersect)(e.range, range));
266
+ }
108
267
  _processNodeRemoved(token) {
109
- while (this._nodesRemoved.length > 0) {
110
- const numberOfNodesBeforeProcessing = this._nodesRemoved.length;
111
- const peekNodeToRemove = this._nodesRemoved[this._nodesRemoved.length - 1];
268
+ while (this._pendingNodeToRemove.length > 0) {
269
+ const numberOfNodesBeforeProcessing = this._pendingNodeToRemove.length;
270
+ const peekNodeToRemove = this._pendingNodeToRemove[this._pendingNodeToRemove.length - 1];
112
271
  this._handleImportNameNode(peekNodeToRemove, token);
113
- if (this._nodesRemoved.length === numberOfNodesBeforeProcessing) {
272
+ if (this._pendingNodeToRemove.length === numberOfNodesBeforeProcessing) {
114
273
  // It looks like we don't know how to handle the node,
115
274
  // Please add code to handle the case.
116
275
  debug.assert(`please add handler for ${peekNodeToRemove.node.nodeType}`);
117
276
  // As a default behavior, we will just remove the node
118
- this._nodesRemoved.pop();
277
+ this._pendingNodeToRemove.pop();
119
278
  const info = (0, analyzerNodeInfo_1.getFileInfo)(peekNodeToRemove.parseResults.parseTree);
120
279
  this.addEdit(info.filePath, (0, positionUtils_1.convertTextRangeToRange)(peekNodeToRemove.node, info.lines), '');
121
280
  }
122
281
  }
123
282
  }
124
- _handleImportNameNode(peekNodeToRemove, token) {
125
- const peekNode = peekNodeToRemove.node;
126
- if (peekNode.nodeType !== 38 /* Name */) {
283
+ _handleImportNameNode(nodeToRemove, token) {
284
+ const node = nodeToRemove.node;
285
+ if (node.nodeType !== 38 /* Name */) {
127
286
  return false;
128
287
  }
129
- const module = peekNodeToRemove.parseResults.parseTree;
288
+ const module = nodeToRemove.parseResults.parseTree;
130
289
  const info = (0, analyzerNodeInfo_1.getFileInfo)(module);
131
- const importNode = (0, importStatementUtils_1.getContainingImportStatement)(ParseTreeUtils.findNodeByOffset(module, peekNode.start), token);
290
+ const importNode = (0, importStatementUtils_1.getContainingImportStatement)(ParseTreeUtils.findNodeByOffset(module, node.start), token);
132
291
  if (!importNode) {
133
292
  return false;
134
293
  }
135
294
  const nameNodes = (0, importStatementUtils_1.getAllImportNames)(importNode);
136
295
  // check various different cases
137
296
  // 1. check whether all imported names in the import statement is not used.
138
- const nodesRemoved = this._nodesRemoved.filter((nodeToRemove) => nameNodes.some((n) => textRange_1.TextRange.overlapsRange(nodeToRemove.node, n)));
297
+ const nodesRemoved = this._pendingNodeToRemove.filter((nodeToRemove) => nameNodes.some((n) => textRange_1.TextRange.overlapsRange(nodeToRemove.node, n)));
139
298
  if (nameNodes.length === nodesRemoved.length) {
140
- this.addEdit(info.filePath, ParseTreeUtils.getFullStatementRange(importNode, peekNodeToRemove.parseResults.tokenizerOutput), '');
299
+ this.addEdit(info.filePath, ParseTreeUtils.getFullStatementRange(importNode, nodeToRemove.parseResults), '');
141
300
  // Remove nodes that are handled from queue.
142
301
  this._removeNodesHandled(nodesRemoved);
143
302
  return true;
@@ -160,7 +319,25 @@ class TextEditTracker {
160
319
  return true;
161
320
  }
162
321
  _removeNodesHandled(nodesRemoved) {
163
- (0, collectionUtils_1.removeArrayElements)(this._nodesRemoved, (n) => nodesRemoved.some((r) => r === n));
322
+ nodesRemoved.forEach((n) => this._markNodeRemoved(n.node, n.parseResults));
323
+ (0, collectionUtils_1.removeArrayElements)(this._pendingNodeToRemove, (n) => this._nodesRemoved.has(n.node));
324
+ }
325
+ _markNodeRemoved(nodeToDelete, parseResults) {
326
+ // Mark that we don't need to process these node again later.
327
+ this._nodesRemoved.set(nodeToDelete, parseResults);
328
+ if (nodeToDelete.nodeType === 21 /* ImportAs */) {
329
+ this._nodesRemoved.set(nodeToDelete.module, parseResults);
330
+ nodeToDelete.module.nameParts.forEach((n) => this._nodesRemoved.set(n, parseResults));
331
+ if (nodeToDelete.alias) {
332
+ this._nodesRemoved.set(nodeToDelete.alias, parseResults);
333
+ }
334
+ }
335
+ else if (nodeToDelete.nodeType === 23 /* ImportFromAs */) {
336
+ this._nodesRemoved.set(nodeToDelete.name, parseResults);
337
+ if (nodeToDelete.alias) {
338
+ this._nodesRemoved.set(nodeToDelete.alias, parseResults);
339
+ }
340
+ }
164
341
  }
165
342
  }
166
343
  exports.TextEditTracker = TextEditTracker;
@@ -1 +1 @@
1
- {"version":3,"file":"textEditUtils.js","sourceRoot":"","sources":["../../../src/common/textEditUtils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"textEditUtils.js","sourceRoot":"","sources":["../../../src/common/textEditUtils.ts"],"names":[],"mappings":"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"}
@@ -13,6 +13,7 @@ import { CancellationProvider } from './common/cancellationUtils';
13
13
  import { DiagnosticSeverityOverrides, DiagnosticSeverityOverridesMap } from './common/commandLineOptions';
14
14
  import { ConfigOptions, SignatureDisplayType } from './common/configOptions';
15
15
  import { ConsoleInterface, LogLevel } from './common/console';
16
+ import { TaskListToken } from './common/diagnostic';
16
17
  import { DiagnosticRule } from './common/diagnosticRules';
17
18
  import { FileDiagnostics } from './common/diagnosticSink';
18
19
  import { FileSystem, FileWatcherHandler } from './common/fileSystem';
@@ -48,6 +49,7 @@ export interface ServerSettings {
48
49
  fileSpecs?: string[];
49
50
  excludeFileSpecs?: string[];
50
51
  ignoreFileSpecs?: string[];
52
+ taskListTokens?: TaskListToken[];
51
53
  functionSignatureDisplay?: SignatureDisplayType | undefined;
52
54
  }
53
55
  export declare enum WellKnownWorkspaceKinds {
@@ -139,6 +141,7 @@ interface ClientCapabilities {
139
141
  signatureDocFormat: MarkupKind;
140
142
  supportsDeprecatedDiagnosticTag: boolean;
141
143
  supportsUnnecessaryDiagnosticTag: boolean;
144
+ supportsTaskItemDiagnosticTag: boolean;
142
145
  completionItemResolveSupportsAdditionalTextEdits: boolean;
143
146
  }
144
147
  export declare abstract class LanguageServerBase implements LanguageServerInterface {
@@ -25,6 +25,8 @@ const commandLineOptions_1 = require("./common/commandLineOptions");
25
25
  const configOptions_1 = require("./common/configOptions");
26
26
  const console_1 = require("./common/console");
27
27
  const deferred_1 = require("./common/deferred");
28
+ const diagnostic_1 = require("./common/diagnostic");
29
+ const extensibility_1 = require("./common/extensibility");
28
30
  const lspUtils_1 = require("./common/lspUtils");
29
31
  const pathUtils_1 = require("./common/pathUtils");
30
32
  const progressReporter_1 = require("./common/progressReporter");
@@ -77,6 +79,64 @@ function createInitStatus() {
77
79
  }
78
80
  exports.createInitStatus = createInitStatus;
79
81
  const nullProgressReporter = (0, progress_1.attachWorkDone)(undefined, /* params */ undefined);
82
+ /*
83
+ * Additional DiagnosticTag values that are specific to Visual Studio.
84
+ * These must match the values in https://dev.azure.com/devdiv/DevDiv/_git/vslanguageserverclient?path=%2Fsrc%2Fproduct%2FProtocol%2FLanguageServer.Protocol.Extensions%2FVSDiagnosticTags.cs&version=GBdevelop&_a=contents
85
+ */
86
+ var VSDiagnosticTag;
87
+ (function (VSDiagnosticTag) {
88
+ /**
89
+ * A diagnostic entry generated by the build.
90
+ */
91
+ VSDiagnosticTag.BuildError = -1;
92
+ /**
93
+ * A diagnostic entry generated by Intellisense.
94
+ */
95
+ VSDiagnosticTag.IntellisenseError = -2;
96
+ /**
97
+ * A diagnostic entry that could be generated from both builds and Intellisense.
98
+ *
99
+ * Diagnostic entries tagged with PotentialDuplicate will be hidden
100
+ * in the error list if the error list is displaying build and intellisense errors.
101
+ */
102
+ VSDiagnosticTag.PotentialDuplicate = -3;
103
+ /**
104
+ * A diagnostic entry that is never displayed in the error list.
105
+ */
106
+ VSDiagnosticTag.HiddenInErrorList = -4;
107
+ /**
108
+ * A diagnostic entry that is always displayed in the error list.
109
+ */
110
+ VSDiagnosticTag.VisibleInErrorList = -5;
111
+ /**
112
+ * A diagnostic entry that is never displayed in the editor.
113
+ */
114
+ VSDiagnosticTag.HiddenInEditor = -6;
115
+ /**
116
+ * No tooltip is shown for the Diagnostic entry in the editor.
117
+ */
118
+ VSDiagnosticTag.SuppressEditorToolTip = -7;
119
+ /**
120
+ * A diagnostic entry that is represented in the editor as an Edit and Continue error.
121
+ */
122
+ VSDiagnosticTag.EditAndContinueError = -8;
123
+ /**
124
+ * A diagnostic entry that is represented in the editor as a Task List item (View -> Task List)
125
+ */
126
+ VSDiagnosticTag.TaskItem = -9;
127
+ })(VSDiagnosticTag || (VSDiagnosticTag = {}));
128
+ /*
129
+ * DiagnosticRank values that are specific to Visual Studio.
130
+ * These must match the values in https://dev.azure.com/devdiv/DevDiv/_git/vslanguageserverclient?path=/src/product/Protocol/LanguageServer.Protocol.Extensions/VSDiagnosticRank.cs&version=GBdevelop&_a=contents
131
+ */
132
+ var VSDiagnosticRank;
133
+ (function (VSDiagnosticRank) {
134
+ VSDiagnosticRank.Highest = 100;
135
+ VSDiagnosticRank.High = 200;
136
+ VSDiagnosticRank.Default = 300;
137
+ VSDiagnosticRank.Low = 400;
138
+ VSDiagnosticRank.Lowest = 500;
139
+ })(VSDiagnosticRank || (VSDiagnosticRank = {}));
80
140
  class LanguageServerBase {
81
141
  constructor(_serverOptions, _connection, console, uriParserFactory = (fs) => new uriParser_1.UriParser(fs)) {
82
142
  var _a, _b;
@@ -106,6 +166,7 @@ class LanguageServerBase {
106
166
  signatureDocFormat: vscode_languageserver_1.MarkupKind.PlainText,
107
167
  supportsDeprecatedDiagnosticTag: false,
108
168
  supportsUnnecessaryDiagnosticTag: false,
169
+ supportsTaskItemDiagnosticTag: false,
109
170
  completionItemResolveSupportsAdditionalTextEdits: false,
110
171
  };
111
172
  // Stash the base directory into a global variable.
@@ -129,6 +190,8 @@ class LanguageServerBase {
129
190
  this._progressReporter = new progressReporter_1.ProgressReportTracker(this.createProgressReporter());
130
191
  // Listen on the connection.
131
192
  this._connection.listen();
193
+ // Setup extensions
194
+ extensibility_1.Extensions.createLanguageServiceExtensions(this);
132
195
  }
133
196
  // Convert uri to path
134
197
  decodeTextDocumentUri(uriString) {
@@ -265,7 +328,7 @@ class LanguageServerBase {
265
328
  this.client.hasWatchFileRelativePathCapability =
266
329
  !!((_e = (_d = capabilities.workspace) === null || _d === void 0 ? void 0 : _d.didChangeWatchedFiles) === null || _e === void 0 ? void 0 : _e.relativePatternSupport);
267
330
  this.client.hasWorkspaceFoldersCapability = !!((_f = capabilities.workspace) === null || _f === void 0 ? void 0 : _f.workspaceFolders);
268
- this.client.hasVisualStudioExtensionsCapability = !!capabilities.supportsVisualStudioExtensions;
331
+ this.client.hasVisualStudioExtensionsCapability = !!capabilities._vs_supportsVisualStudioExtensions;
269
332
  this.client.hasActiveParameterCapability =
270
333
  !!((_j = (_h = (_g = capabilities.textDocument) === null || _g === void 0 ? void 0 : _g.signatureHelp) === null || _h === void 0 ? void 0 : _h.signatureInformation) === null || _j === void 0 ? void 0 : _j.activeParameterSupport);
271
334
  this.client.hasSignatureLabelOffsetCapability =
@@ -286,6 +349,8 @@ class LanguageServerBase {
286
349
  const supportedDiagnosticTags = ((_13 = (_12 = (_11 = capabilities.textDocument) === null || _11 === void 0 ? void 0 : _11.publishDiagnostics) === null || _12 === void 0 ? void 0 : _12.tagSupport) === null || _13 === void 0 ? void 0 : _13.valueSet) || [];
287
350
  this.client.supportsUnnecessaryDiagnosticTag = supportedDiagnosticTags.some((tag) => tag === vscode_languageserver_1.DiagnosticTag.Unnecessary);
288
351
  this.client.supportsDeprecatedDiagnosticTag = supportedDiagnosticTags.some((tag) => tag === vscode_languageserver_1.DiagnosticTag.Deprecated);
352
+ // if the client is running in VS, it always supports task item diagnostics
353
+ this.client.supportsTaskItemDiagnosticTag = this.client.hasVisualStudioExtensionsCapability;
289
354
  this.client.hasWindowProgressCapability = !!((_14 = capabilities.window) === null || _14 === void 0 ? void 0 : _14.workDoneProgress);
290
355
  this.client.hasGoToDeclarationCapability = !!((_15 = capabilities.textDocument) === null || _15 === void 0 ? void 0 : _15.declaration);
291
356
  this.client.completionItemResolveSupportsAdditionalTextEdits =
@@ -955,6 +1020,29 @@ class LanguageServerBase {
955
1020
  return;
956
1021
  }
957
1022
  }
1023
+ else if (diag.category === 6 /* TaskItem */) {
1024
+ vsDiag.tags = [VSDiagnosticTag.TaskItem];
1025
+ // Map the task item priority to a value VS will understand
1026
+ // and store it in the diagnostic.
1027
+ // The Diagnostic type is defined in a protocol that we can't change,
1028
+ // so we just dynamically create the vsDiag._vs_diagnosticRank property at runtime,
1029
+ // which is what VS is looking for.
1030
+ switch (diag.priority) {
1031
+ case diagnostic_1.TaskListPriority.High:
1032
+ vsDiag._vs_diagnosticRank = VSDiagnosticRank.High;
1033
+ break;
1034
+ case diagnostic_1.TaskListPriority.Normal:
1035
+ vsDiag._vs_diagnosticRank = VSDiagnosticRank.Default;
1036
+ break;
1037
+ case diagnostic_1.TaskListPriority.Low:
1038
+ vsDiag._vs_diagnosticRank = VSDiagnosticRank.Low;
1039
+ break;
1040
+ }
1041
+ // if the client doesn't support "taskitem" tags, don't report.
1042
+ if (!this.client.supportsTaskItemDiagnosticTag) {
1043
+ return;
1044
+ }
1045
+ }
958
1046
  if (rule) {
959
1047
  const ruleDocUrl = this.getDocumentationUrlForDiagnosticRule(rule);
960
1048
  if (ruleDocUrl) {
@@ -978,6 +1066,7 @@ class LanguageServerBase {
978
1066
  case 1 /* Warning */:
979
1067
  return vscode_languageserver_1.DiagnosticSeverity.Warning;
980
1068
  case 2 /* Information */:
1069
+ case 6 /* TaskItem */: // task items only show up in the task list if they are information or above.
981
1070
  return vscode_languageserver_1.DiagnosticSeverity.Information;
982
1071
  case 3 /* UnusedCode */:
983
1072
  case 4 /* UnreachableCode */: