Move all commands to ctx

This commit is contained in:
Aleksey Kladov 2019-12-30 20:07:04 +01:00
parent da80b6c1e1
commit 3d008a78d0
3 changed files with 26 additions and 22 deletions

View file

@ -1,3 +1,6 @@
import * as vscode from 'vscode';
import * as lc from 'vscode-languageclient';
import { Ctx, Cmd } from '../ctx'; import { Ctx, Cmd } from '../ctx';
import { analyzerStatus } from './analyzer_status'; import { analyzerStatus } from './analyzer_status';
@ -16,6 +19,17 @@ function collectGarbage(ctx: Ctx): Cmd {
}; };
} }
function showReferences(ctx: Ctx): Cmd {
return (uri: string, position: lc.Position, locations: lc.Location[]) => {
vscode.commands.executeCommand(
'editor.action.showReferences',
vscode.Uri.parse(uri),
ctx.client.protocol2CodeConverter.asPosition(position),
locations.map(ctx.client.protocol2CodeConverter.asLocation),
);
};
}
export { export {
analyzerStatus, analyzerStatus,
expandMacro, expandMacro,
@ -27,5 +41,6 @@ export {
inlayHints, inlayHints,
collectGarbage, collectGarbage,
run, run,
runSingle runSingle,
showReferences,
}; };

View file

@ -8,7 +8,7 @@ export function run(ctx: Ctx): Cmd {
return async () => { return async () => {
const editor = ctx.activeRustEditor; const editor = ctx.activeRustEditor;
if (!editor) return if (!editor) return;
const textDocument: lc.TextDocumentIdentifier = { const textDocument: lc.TextDocumentIdentifier = {
uri: editor.document.uri.toString(), uri: editor.document.uri.toString(),
@ -43,13 +43,13 @@ export function run(ctx: Ctx): Cmd {
prevRunnable = item; prevRunnable = item;
const task = createTask(item.runnable); const task = createTask(item.runnable);
return await vscode.tasks.executeTask(task); return await vscode.tasks.executeTask(task);
} };
} }
export function runSingle(ctx: Ctx): Cmd { export function runSingle(ctx: Ctx): Cmd {
return async (runnable: Runnable) => { return async (runnable: Runnable) => {
const editor = ctx.activeRustEditor; const editor = ctx.activeRustEditor;
if (!editor) return if (!editor) return;
const task = createTask(runnable); const task = createTask(runnable);
task.group = vscode.TaskGroup.Build; task.group = vscode.TaskGroup.Build;
@ -60,7 +60,7 @@ export function runSingle(ctx: Ctx): Cmd {
}; };
return vscode.tasks.executeTask(task); return vscode.tasks.executeTask(task);
} };
} }
interface RunnablesParams { interface RunnablesParams {

View file

@ -13,6 +13,8 @@ let ctx!: Ctx;
export async function activate(context: vscode.ExtensionContext) { export async function activate(context: vscode.ExtensionContext) {
ctx = new Ctx(context); ctx = new Ctx(context);
// Commands which invokes manually via command pallet, shortcut, etc.
ctx.registerCommand('analyzerStatus', commands.analyzerStatus); ctx.registerCommand('analyzerStatus', commands.analyzerStatus);
ctx.registerCommand('collectGarbage', commands.collectGarbage); ctx.registerCommand('collectGarbage', commands.collectGarbage);
ctx.registerCommand('matchingBrace', commands.matchingBrace); ctx.registerCommand('matchingBrace', commands.matchingBrace);
@ -21,28 +23,15 @@ export async function activate(context: vscode.ExtensionContext) {
ctx.registerCommand('syntaxTree', commands.syntaxTree); ctx.registerCommand('syntaxTree', commands.syntaxTree);
ctx.registerCommand('expandMacro', commands.expandMacro); ctx.registerCommand('expandMacro', commands.expandMacro);
ctx.registerCommand('run', commands.run); ctx.registerCommand('run', commands.run);
ctx.registerCommand('runSingle', commands.runSingle); // Internal action for lenses
// Internal commands which are invoked by the server.
ctx.registerCommand('runSingle', commands.runSingle);
ctx.registerCommand('showReferences', commands.showReferences);
function disposeOnDeactivation(disposable: vscode.Disposable) { function disposeOnDeactivation(disposable: vscode.Disposable) {
context.subscriptions.push(disposable); context.subscriptions.push(disposable);
} }
function registerCommand(name: string, f: any) {
disposeOnDeactivation(vscode.commands.registerCommand(name, f));
}
registerCommand(
'rust-analyzer.showReferences',
(uri: string, position: lc.Position, locations: lc.Location[]) => {
vscode.commands.executeCommand(
'editor.action.showReferences',
vscode.Uri.parse(uri),
Server.client.protocol2CodeConverter.asPosition(position),
locations.map(Server.client.protocol2CodeConverter.asLocation),
);
},
);
if (Server.config.enableEnhancedTyping) { if (Server.config.enableEnhancedTyping) {
ctx.overrideCommand('type', commands.onEnter); ctx.overrideCommand('type', commands.onEnter);
} }