diff --git a/sdks/vscode/src/extension.ts b/sdks/vscode/src/extension.ts index 4d302fa4..77c70513 100644 --- a/sdks/vscode/src/extension.ts +++ b/sdks/vscode/src/extension.ts @@ -1,46 +1,46 @@ // This method is called when your extension is deactivated export function deactivate() {} -import * as vscode from "vscode" +import * as vscode from "vscode"; -const TERMINAL_NAME = "opencode" +const TERMINAL_NAME = "opencode"; export function activate(context: vscode.ExtensionContext) { let openNewTerminalDisposable = vscode.commands.registerCommand("opencode.openNewTerminal", async () => { - await openTerminal() - }) + await openTerminal(); + }); let openTerminalDisposable = vscode.commands.registerCommand("opencode.openTerminal", async () => { // An opencode terminal already exists => focus it - const existingTerminal = vscode.window.terminals.find((t) => t.name === TERMINAL_NAME) + const existingTerminal = vscode.window.terminals.find((t) => t.name === TERMINAL_NAME); if (existingTerminal) { - existingTerminal.show() - return + existingTerminal.show(); + return; } - await openTerminal() - }) + await openTerminal(); + }); let addFilepathDisposable = vscode.commands.registerCommand("opencode.addFilepathToTerminal", async () => { - const fileRef = getActiveFile() - if (!fileRef) return + const fileRef = getActiveFile(); + if (!fileRef) {return;} - const terminal = vscode.window.activeTerminal - if (!terminal) return + const terminal = vscode.window.activeTerminal; + if (!terminal) {return;} if (terminal.name === TERMINAL_NAME) { // @ts-ignore - const port = terminal.creationOptions.env?.["_EXTENSION_OPENCODE_PORT"] - port ? await appendPrompt(parseInt(port), fileRef) : terminal.sendText(fileRef) - terminal.show() + const port = terminal.creationOptions.env?.["_EXTENSION_OPENCODE_PORT"]; + port ? await appendPrompt(parseInt(port), fileRef) : terminal.sendText(fileRef); + terminal.show(); } - }) + }); - context.subscriptions.push(openTerminalDisposable, addFilepathDisposable) + context.subscriptions.push(openTerminalDisposable, addFilepathDisposable); async function openTerminal() { // Create a new terminal in split screen - const port = Math.floor(Math.random() * (65535 - 16384 + 1)) + 16384 + const port = Math.floor(Math.random() * (65535 - 16384 + 1)) + 16384; const terminal = vscode.window.createTerminal({ name: TERMINAL_NAME, iconPath: { @@ -55,32 +55,32 @@ export function activate(context: vscode.ExtensionContext) { _EXTENSION_OPENCODE_PORT: port.toString(), OPENCODE_CALLER: "vscode", }, - }) + }); - terminal.show() - terminal.sendText(`opencode --port ${port}`) + terminal.show(); + terminal.sendText(`opencode --port ${port}`); - const fileRef = getActiveFile() - if (!fileRef) return + const fileRef = getActiveFile(); + if (!fileRef) {return;} // Wait for the terminal to be ready - let tries = 10 - let connected = false + let tries = 10; + let connected = false; do { - await new Promise((resolve) => setTimeout(resolve, 200)) + await new Promise((resolve) => setTimeout(resolve, 200)); try { - await fetch(`http://localhost:${port}/app`) - connected = true - break + await fetch(`http://localhost:${port}/app`); + connected = true; + break; } catch (e) {} - tries-- - } while (tries > 0) + tries--; + } while (tries > 0); // If connected, append the prompt to the terminal if (connected) { - await appendPrompt(port, `In ${fileRef}`) - terminal.show() + await appendPrompt(port, `In ${fileRef}`); + terminal.show(); } } @@ -91,37 +91,37 @@ export function activate(context: vscode.ExtensionContext) { "Content-Type": "application/json", }, body: JSON.stringify({ text }), - }) + }); } function getActiveFile() { - const activeEditor = vscode.window.activeTextEditor - if (!activeEditor) return + const activeEditor = vscode.window.activeTextEditor; + if (!activeEditor) {return;} - const document = activeEditor.document - const workspaceFolder = vscode.workspace.getWorkspaceFolder(document.uri) - if (!workspaceFolder) return + const document = activeEditor.document; + const workspaceFolder = vscode.workspace.getWorkspaceFolder(document.uri); + if (!workspaceFolder) {return;} // Get the relative path from workspace root - const relativePath = vscode.workspace.asRelativePath(document.uri) - let filepathWithAt = `@${relativePath}` + const relativePath = vscode.workspace.asRelativePath(document.uri); + let filepathWithAt = `@${relativePath}`; // Check if there's a selection and add line numbers - const selection = activeEditor.selection + const selection = activeEditor.selection; if (!selection.isEmpty) { // Convert to 1-based line numbers - const startLine = selection.start.line + 1 - const endLine = selection.end.line + 1 + const startLine = selection.start.line + 1; + const endLine = selection.end.line + 1; if (startLine === endLine) { // Single line selection - filepathWithAt += `#L${startLine}` + filepathWithAt += `#L${startLine}`; } else { // Multi-line selection - filepathWithAt += `#L${startLine}-${endLine}` + filepathWithAt += `#L${startLine}-${endLine}`; } } - return filepathWithAt + return filepathWithAt; } }