Skip to content

Commit

Permalink
Add run task command
Browse files Browse the repository at this point in the history
  • Loading branch information
vinistock committed Jun 27, 2024
1 parent 7b23190 commit 7c860da
Show file tree
Hide file tree
Showing 3 changed files with 33 additions and 1 deletion.
1 change: 1 addition & 0 deletions vscode/src/common.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ export enum Command {
DebugTest = "rubyLsp.debugTest",
ShowSyntaxTree = "rubyLsp.showSyntaxTree",
DisplayAddons = "rubyLsp.displayAddons",
RunTask = "rubyLsp.runTask",
}

export interface RubyInterface {
Expand Down
24 changes: 24 additions & 0 deletions vscode/src/rubyLsp.ts
Original file line number Diff line number Diff line change
Expand Up @@ -370,6 +370,30 @@ export class RubyLsp {
Command.DebugTest,
this.testController.debugTest.bind(this.testController),
),
vscode.commands.registerCommand(
Command.RunTask,
async (command: string) => {
let workspace = this.currentActiveWorkspace();

if (!workspace) {
workspace = await this.showWorkspacePick();
}

if (!workspace) {
return;
}

workspace.outputChannel.show();
workspace.outputChannel.info(`Running task: ${command}`);
const { stdout, stderr } = await workspace.execute(command);

if (stderr.length > 0) {
workspace.outputChannel.error(stderr);
} else {
workspace.outputChannel.info(stdout);
}
},
),
);
}

Expand Down
9 changes: 8 additions & 1 deletion vscode/src/workspace.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,9 +18,9 @@ export class Workspace implements WorkspaceInterface {
public readonly ruby: Ruby;
public readonly createTestItems: (response: CodeLens[]) => void;
public readonly workspaceFolder: vscode.WorkspaceFolder;
public readonly outputChannel: WorkspaceChannel;
private readonly context: vscode.ExtensionContext;
private readonly telemetry: Telemetry;
private readonly outputChannel: WorkspaceChannel;
private readonly isMainWorkspace: boolean;
private needsRestart = false;
#rebaseInProgress = false;
Expand Down Expand Up @@ -263,6 +263,13 @@ export class Workspace implements WorkspaceInterface {
return this.#rebaseInProgress;
}

async execute(command: string) {
return asyncExec(command, {
env: this.ruby.env,
cwd: this.workspaceFolder.uri.fsPath,
});
}

private registerRestarts(context: vscode.ExtensionContext) {
this.createRestartWatcher(context, "Gemfile.lock");
this.createRestartWatcher(context, "gems.locked");
Expand Down

0 comments on commit 7c860da

Please sign in to comment.