-
Notifications
You must be signed in to change notification settings - Fork 13
/
Copy pathcodeActionsRequest.ts
60 lines (53 loc) · 1.67 KB
/
codeActionsRequest.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
import { RequestHandler, RequestType } from 'vscode-languageserver';
import astService, { LanguageId } from './services/astService';
import codeModService from './services/codeModService';
import connectionService from './services/connectionService';
import * as vscode from './utils/vscodeExtra';
interface CodeActionsParams {
textDocumentUri: string;
selection: vscode.Selection;
}
interface CodeActionsResult {
textDocument: vscode.VersionedTextDocumentIdentifier;
codeMods: Array<{
id: string;
title: string;
tooltip?: string;
}>;
}
export const codeActionsRequestType = new RequestType<
CodeActionsParams,
CodeActionsResult,
void,
void
>('javascriptBooster/codeActions');
export const codeActionsRequestHandler: RequestHandler<
CodeActionsParams,
CodeActionsResult,
void
> = async (params) => {
let result: CodeActionsResult;
const document = connectionService.getDocument(params.textDocumentUri);
const source = document.getText();
const codeMods = await codeModService.getExecutableCodeModsUnderCursor({
languageId: document.languageId as LanguageId,
fileName: document.uri,
source,
selection: {
anchor: astService.offsetAt(source, params.selection.anchor),
active: astService.offsetAt(source, params.selection.active),
},
});
result = {
textDocument: {
uri: document.uri,
version: document.version,
},
codeMods: codeMods.map((mod) => ({
id: mod.id,
title: mod.name,
tooltip: mod.detail || mod.description,
})),
};
return result;
};