diff --git a/clients/vscode/src/InlineEditCodeActionProvider.ts b/clients/vscode/src/InlineEditCodeActionProvider.ts new file mode 100644 index 000000000000..bf164be44151 --- /dev/null +++ b/clients/vscode/src/InlineEditCodeActionProvider.ts @@ -0,0 +1,31 @@ +import { + CancellationToken, + CodeAction, + CodeActionContext, + CodeActionKind, + CodeActionProvider, + Range, + Selection, + TextDocument, +} from "vscode"; + +export class InlineEditCodeActionProvider implements CodeActionProvider { + provideCodeActions( + _document: TextDocument, + _range: Range | Selection, + _context: CodeActionContext, + token: CancellationToken, + ): CodeAction[] | undefined { + if (token.isCancellationRequested) { + return; + } + const quickFix = new CodeAction("Edit with Tabby", CodeActionKind.RefactorRewrite); + + quickFix.command = { + command: "tabby.chat.edit.start", + title: "Start Tabby Chat Edit", + }; + + return [quickFix]; + } +} diff --git a/clients/vscode/src/extension.ts b/clients/vscode/src/extension.ts index 52a99a6c7de0..e96c0eb7fc93 100644 --- a/clients/vscode/src/extension.ts +++ b/clients/vscode/src/extension.ts @@ -13,6 +13,7 @@ import { StatusBarItem } from "./StatusBarItem"; import { ChatViewProvider } from "./chat/ChatViewProvider"; import { Commands } from "./Commands"; import { Status } from "tabby-agent"; +import { InlineEditCodeActionProvider } from "./InlineEditCodeActionProvider"; const isBrowser = !!process.env["IS_BROWSER"]; const logger = getLogger(); @@ -55,6 +56,7 @@ export async function activate(context: ExtensionContext) { client.registerConfigManager(config); client.registerInlineCompletionProvider(inlineCompletionProvider); client.registerGitProvider(gitProvider); + client.registerCodeActionProvider(new InlineEditCodeActionProvider()); // Register config callback for past ServerConfig client.agent.addListener("didChangeStatus", async (status: Status) => { diff --git a/clients/vscode/src/lsp/Client.ts b/clients/vscode/src/lsp/Client.ts index 73227260d75d..6e44e6de54b9 100644 --- a/clients/vscode/src/lsp/Client.ts +++ b/clients/vscode/src/lsp/Client.ts @@ -1,4 +1,4 @@ -import { ExtensionContext } from "vscode"; +import { CodeActionProvider, ExtensionContext, languages } from "vscode"; import { BaseLanguageClient } from "vscode-languageclient"; import { AgentFeature } from "./AgentFeature"; import { ChatFeature } from "./ChatFeature"; @@ -74,4 +74,7 @@ export class Client { const feature = new GitProviderFeature(this.languageClient, provider); this.languageClient.registerFeature(feature); } + registerCodeActionProvider(provider: CodeActionProvider) { + this.context.subscriptions.push(languages.registerCodeActionsProvider("*", provider)); + } }