const startRow = marker.startLineNumber; // Found quickfix on the same line and check relative distance to other markers <del> if ((row === currPosition.lineNumber || startRow === currPosition.lineNumber) && Math.abs(currPosition.column - col) < distance) { distance = Math.abs(currPosition.column - col); toBeModified = true; </del> <ins> if ((row === currPosition.lineNumber || startRow === currPosition.lineNumber)) { </ins> trackedPosition = new Position(row, col); <ins> const newCodeActionTrigger: CodeActionTrigger = { type: trigger.trigger.type, triggerAction: trigger.trigger.triggerAction, filter: { include: trigger.trigger.filter?.include ? trigger.trigger.filter?.include : CodeActionKind.QuickFix }, autoApply: trigger.trigger.autoApply, context: { notAvailableMessage: trigger.trigger.context?.notAvailableMessage || '', position: trackedPosition } }; const selectionAsPosition = new Selection(trackedPosition.lineNumber, trackedPosition.column, trackedPosition.lineNumber, trackedPosition.column); const actionsAtMarker = await getCodeActions(this._registry, model, selectionAsPosition, newCodeActionTrigger, Progress.None, token); if (actionsAtMarker.validActions.length !== 0) { for (const action of actionsAtMarker.validActions) { action.highlightRange = action.action.isPreferred; } // Already filtered through to only get quickfixes, so no need to filter again. if (Math.abs(currPosition.column - col) < distance) { currentActions.unshift(...actionsAtMarker.validActions); } else { currentActions.push(...actionsAtMarker.validActions); } } distance = Math.abs(currPosition.column - col); </ins> } } <ins> currentActions.filter((action, index, self) => self.findIndex((a) => a.action.title === action.action.title) === index); currentActions.sort((a, b) => { if (a.action.isPreferred && !b.action.isPreferred) { return -1; } else if (!a.action.isPreferred && b.action.isPreferred) { return 1; } else { return 0; } }); </ins> // Only retriggers if actually found quickfix on the same line as cursor <del> if (toBeModified) { const newCodeActionTrigger: CodeActionTrigger = { type: trigger.trigger.type, triggerAction: trigger.trigger.triggerAction, filter: { include: trigger.trigger.filter?.include ? trigger.trigger.filter?.include : CodeActionKind.QuickFix }, autoApply: trigger.trigger.autoApply, context: { notAvailableMessage: trigger.trigger.context?.notAvailableMessage || '', position: trackedPosition } }; const selectionAsPosition = new Selection(trackedPosition.lineNumber, trackedPosition.column, trackedPosition.lineNumber, trackedPosition.column); const actionsAtMarker = await getCodeActions(this._registry, model, selectionAsPosition, newCodeActionTrigger, Progress.None, token); const currentActions = [...codeActionSet.validActions]; if (actionsAtMarker.validActions.length !== 0) { actionsAtMarker.validActions.forEach(action => { action.highlightRange = action.action.isPreferred; }); // Already filtered through to only get quickfixes, so no need to filter again. currentActions.push(...actionsAtMarker.validActions); } return { validActions: currentActions, allActions: codeActionSet.allActions, documentation: codeActionSet.documentation, hasAutoFix: codeActionSet.hasAutoFix, dispose: () => { codeActionSet.dispose(); } }; } </del> <ins> return { validActions: currentActions, allActions: codeActionSet.allActions, documentation: codeActionSet.documentation, hasAutoFix: codeActionSet.hasAutoFix, dispose: () => { codeActionSet.dispose(); } }; </ins> } } } // temporarilly hiding here as this is enabled/disabled behind a setting. return getCodeActions(this._registry, model, trigger.selection, trigger.trigger, Progress.None, token); }); if (trigger.trigger.type === CodeActionTriggerType.Invoke) { this._progressService?.showWhile(actions, 250); }