diff options
| author | Dax Raad <[email protected]> | 2025-11-06 13:03:02 -0500 |
|---|---|---|
| committer | Dax Raad <[email protected]> | 2025-11-06 13:03:12 -0500 |
| commit | 1ea3a8eb9beeb7d510fd29164ea741acec1ee04d (patch) | |
| tree | 22c35a0003c6c2cfb998431f8e5180879cbab9d3 /sdks | |
| parent | 8729edc5e059a9a29346044b016a6e05d9aca835 (diff) | |
| download | opencode-1ea3a8eb9beeb7d510fd29164ea741acec1ee04d.tar.gz opencode-1ea3a8eb9beeb7d510fd29164ea741acec1ee04d.zip | |
big format
Diffstat (limited to 'sdks')
| -rw-r--r-- | sdks/vscode/src/extension.ts | 135 | ||||
| -rw-r--r-- | sdks/vscode/sst-env.d.ts | 2 |
2 files changed, 78 insertions, 59 deletions
diff --git a/sdks/vscode/src/extension.ts b/sdks/vscode/src/extension.ts index 77c70513f..2f90229d5 100644 --- a/sdks/vscode/src/extension.ts +++ b/sdks/vscode/src/extension.ts @@ -1,46 +1,59 @@ // 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(); - }); - - 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); - if (existingTerminal) { - existingTerminal.show(); - return; - } + let openNewTerminalDisposable = vscode.commands.registerCommand( + "opencode.openNewTerminal", + async () => { + 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) + if (existingTerminal) { + existingTerminal.show() + return + } - await openTerminal(); - }); + await openTerminal() + }, + ) - let addFilepathDisposable = vscode.commands.registerCommand("opencode.addFilepathToTerminal", async () => { - const fileRef = getActiveFile(); - if (!fileRef) {return;} + let addFilepathDisposable = vscode.commands.registerCommand( + "opencode.addFilepathToTerminal", + async () => { + 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(); - } - }); + 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() + } + }, + ) - 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 +68,34 @@ 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 +106,41 @@ 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 } } diff --git a/sdks/vscode/sst-env.d.ts b/sdks/vscode/sst-env.d.ts index b6a7e9066..0397645b5 100644 --- a/sdks/vscode/sst-env.d.ts +++ b/sdks/vscode/sst-env.d.ts @@ -6,4 +6,4 @@ /// <reference path="../../sst-env.d.ts" /> import "sst" -export {}
\ No newline at end of file +export {} |
