Skip to content

Commit 25748a4

Browse files
committed
feat: add click-to-apply hover links and code actions to VS Code extension
1 parent 22e3226 commit 25748a4

1 file changed

Lines changed: 79 additions & 3 deletions

File tree

vscode/src/extension.ts

Lines changed: 79 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -195,9 +195,22 @@ export function activate(context: vscode.ExtensionContext) {
195195
}
196196

197197
if (sugg.skeptic_blocked) {
198-
markdown.appendMarkdown(`---\n*Press **Alt+S** to apply Skeptic's improved version, or **Alt+D** to dismiss.*`);
198+
markdown.appendMarkdown(`---\n\n`);
199+
if (sugg.skeptic_fix) {
200+
markdown.appendMarkdown(`[⚡ Apply Skeptic Fix](command:ghostcoder.applySkepticSuggestion) | `);
201+
}
202+
markdown.appendMarkdown(`[❌ Dismiss](command:ghostcoder.dismissSuggestion)\n\n`);
203+
markdown.appendMarkdown(`*Press **Alt+S** to apply Skeptic's improved version, or **Alt+D** to dismiss.*`);
199204
} else {
200-
markdown.appendMarkdown(`---\n*Press **Alt+A** to apply original recommendation, **Alt+S** to apply Skeptic's version, or **Alt+D** to dismiss.*`);
205+
markdown.appendMarkdown(`---\n\n`);
206+
if (sugg.fix) {
207+
markdown.appendMarkdown(`[⚡ Apply Fix](command:ghostcoder.applySuggestion) | `);
208+
}
209+
if (sugg.skeptic_fix) {
210+
markdown.appendMarkdown(`[⚡ Apply Skeptic Fix](command:ghostcoder.applySkepticSuggestion) | `);
211+
}
212+
markdown.appendMarkdown(`[❌ Dismiss](command:ghostcoder.dismissSuggestion)\n\n`);
213+
markdown.appendMarkdown(`*Press **Alt+A** to apply original recommendation, **Alt+S** to apply Skeptic's version, or **Alt+D** to dismiss.*`);
201214
}
202215
return new vscode.Hover(markdown);
203216
}
@@ -206,7 +219,70 @@ export function activate(context: vscode.ExtensionContext) {
206219
}
207220
});
208221

209-
context.subscriptions.push(enableCmd, disableCmd, showHintCmd, applyCmd, applySkepticCmd, dismissCmd, hoverProvider);
222+
const codeActionProvider = vscode.languages.registerCodeActionsProvider({ scheme: 'file' }, new GhostCodeActionProvider(), {
223+
providedCodeActionKinds: [vscode.CodeActionKind.QuickFix]
224+
});
225+
226+
context.subscriptions.push(enableCmd, disableCmd, showHintCmd, applyCmd, applySkepticCmd, dismissCmd, hoverProvider, codeActionProvider);
227+
}
228+
229+
class GhostCodeActionProvider implements vscode.CodeActionProvider {
230+
public provideCodeActions(
231+
document: vscode.TextDocument,
232+
range: vscode.Range | vscode.Selection,
233+
context: vscode.CodeActionContext,
234+
token: vscode.CancellationToken
235+
): vscode.ProviderResult<(vscode.Command | vscode.CodeAction)[]> {
236+
const decManager = decorationManager;
237+
if (!decManager) return [];
238+
239+
const sugg = decManager.getActiveSuggestion();
240+
const activeLine = decManager.getActiveSuggestionLine();
241+
242+
if (sugg && activeLine !== null && (range.start.line === activeLine || range.end.line === activeLine)) {
243+
const actions: vscode.CodeAction[] = [];
244+
245+
if (sugg.skeptic_blocked) {
246+
if (sugg.skeptic_fix) {
247+
const action = new vscode.CodeAction('👻 Apply Skeptic Improved Fix', vscode.CodeActionKind.QuickFix);
248+
action.command = {
249+
command: 'ghostcoder.applySkepticSuggestion',
250+
title: 'Apply Skeptic Improved Fix'
251+
};
252+
action.isPreferred = true;
253+
actions.push(action);
254+
}
255+
} else {
256+
if (sugg.fix) {
257+
const action = new vscode.CodeAction('👻 Apply GhostCoder Fix', vscode.CodeActionKind.QuickFix);
258+
action.command = {
259+
command: 'ghostcoder.applySuggestion',
260+
title: 'Apply GhostCoder Fix'
261+
};
262+
action.isPreferred = true;
263+
actions.push(action);
264+
}
265+
if (sugg.skeptic_fix) {
266+
const action = new vscode.CodeAction('👻 Apply Skeptic Improved Fix', vscode.CodeActionKind.QuickFix);
267+
action.command = {
268+
command: 'ghostcoder.applySkepticSuggestion',
269+
title: 'Apply Skeptic Improved Fix'
270+
};
271+
actions.push(action);
272+
}
273+
}
274+
275+
const dismissAction = new vscode.CodeAction('👻 Dismiss Suggestion', vscode.CodeActionKind.QuickFix);
276+
dismissAction.command = {
277+
command: 'ghostcoder.dismissSuggestion',
278+
title: 'Dismiss Suggestion'
279+
};
280+
actions.push(dismissAction);
281+
282+
return actions;
283+
}
284+
return [];
285+
}
210286
}
211287

212288
function connectDaemon() {

0 commit comments

Comments
 (0)