-
Notifications
You must be signed in to change notification settings - Fork 11
Expand file tree
/
Copy pathoptimization.ts
More file actions
38 lines (33 loc) · 1.24 KB
/
optimization.ts
File metadata and controls
38 lines (33 loc) · 1.24 KB
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
import { CodeActionKind, Diagnostic, TextEdit } from 'vscode-languageserver';
import { CodeActionBuilder } from '../../builder';
/** The shape of data attached to molang optimization diagnostics */
interface OptimizationData {
replacement: string;
startOffset?: number;
endOffset?: number;
}
function isOptimizationData(data: unknown): data is OptimizationData {
return typeof data === 'object' && data !== null && typeof (data as OptimizationData).replacement === 'string';
}
export function onCodeAction(builder: CodeActionBuilder, diag: Diagnostic): void {
if (!isOptimizationData(diag.data)) return;
const { replacement, startOffset, endOffset } = diag.data;
const hasOffsetRange = typeof startOffset === 'number' && typeof endOffset === 'number' && endOffset >= startOffset;
const editRange = hasOffsetRange
? {
start: builder.context.document.positionAt(startOffset),
end: builder.context.document.positionAt(endOffset),
}
: diag.range;
builder.push({
title: `Rewrite to: ${replacement}`,
kind: CodeActionKind.QuickFix,
diagnostics: [diag],
isPreferred: true,
edit: {
changes: {
[builder.context.document.uri]: [TextEdit.replace(editRange, replacement)],
},
},
});
}