Skip to content

Commit 17c3d00

Browse files
authored
add check for empty diagnostic/range in code action highlighting (microsoft#203382)
* add check for empty diagnostics/ranges * cleanup
1 parent 5b91204 commit 17c3d00

File tree

1 file changed

+14
-12
lines changed

1 file changed

+14
-12
lines changed

src/vs/editor/contrib/codeAction/browser/codeActionController.ts

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -279,19 +279,21 @@ export class CodeActionController extends Disposable implements IEditorContribut
279279
return { canPreview: !!action.action.edit?.edits.length };
280280
},
281281
onFocus: (action: CodeActionItem | undefined) => {
282-
// If provider contributes ranges, then highlight contributed range over diagnostic range.
283-
if (action && action.action.ranges) {
282+
if (action && action.action) {
283+
const ranges = action.action.ranges;
284+
const diagnostics = action.action.diagnostics;
284285
currentDecorations.clear();
285-
const decorations: IModelDeltaDecoration[] = action.action.ranges.map(range => ({ range, options: CodeActionController.DECORATION }));
286-
currentDecorations.set(decorations);
287-
} else if (action && action.action.diagnostics) {
288-
currentDecorations.clear();
289-
const decorations: IModelDeltaDecoration[] = action.action.diagnostics.map(diagnostic => ({ range: diagnostic, options: CodeActionController.DECORATION }));
290-
currentDecorations.set(decorations);
291-
const diagnostic = action.action.diagnostics[0];
292-
if (diagnostic.startLineNumber && diagnostic.startColumn) {
293-
const selectionText = this._editor.getModel()?.getWordAtPosition({ lineNumber: diagnostic.startLineNumber, column: diagnostic.startColumn })?.word;
294-
aria.status(localize('editingNewSelection', "Context: {0} at line {1} and column {2}.", selectionText, diagnostic.startLineNumber, diagnostic.startColumn));
286+
if (ranges && ranges.length > 0) {
287+
const decorations: IModelDeltaDecoration[] = ranges.map(range => ({ range, options: CodeActionController.DECORATION }));
288+
currentDecorations.set(decorations);
289+
} else if (diagnostics && diagnostics.length > 0) {
290+
const decorations: IModelDeltaDecoration[] = diagnostics.map(diagnostic => ({ range: diagnostic, options: CodeActionController.DECORATION }));
291+
currentDecorations.set(decorations);
292+
const diagnostic = diagnostics[0];
293+
if (diagnostic.startLineNumber && diagnostic.startColumn) {
294+
const selectionText = this._editor.getModel()?.getWordAtPosition({ lineNumber: diagnostic.startLineNumber, column: diagnostic.startColumn })?.word;
295+
aria.status(localize('editingNewSelection', "Context: {0} at line {1} and column {2}.", selectionText, diagnostic.startLineNumber, diagnostic.startColumn));
296+
}
295297
}
296298
} else {
297299
currentDecorations.clear();

0 commit comments

Comments
 (0)