@@ -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
212288function connectDaemon ( ) {
0 commit comments