in package/src/languageFeatures.ts [156:207]
private async getMonacoCodeActions(
model: monaco.editor.ITextModel,
startOffset: number,
endOffset: number,
enableQuickFix: boolean
): Promise<monaco.languages.CodeAction[]> {
const actions = [];
const worker = await this._worker(model.uri);
const resource = model.uri;
const codeActions = await worker.getResultActions(resource.toString(), startOffset, endOffset);
for (let i = 0; i < codeActions.length; i++) {
const codeAction = codeActions[i];
if (codeAction.kind.includes('Extract Function')) {
// Ignore extract function actions for now since they are buggy currently
continue;
}
const codeActionKind = this.defaults.languageSettings.quickFixCodeActions?.find((actionKind) =>
codeAction.kind.includes(actionKind)
)
? 'quickfix'
: 'custom';
if (codeActionKind === 'quickfix' && !enableQuickFix) {
return;
}
const changes = codeAction.changes;
const edits = changes.map((change) => {
const startPosition = model.getPositionAt(change.start);
const endPosition = model.getPositionAt(change.start + change.deleteLength);
return {
resource: model.uri,
textEdit: {
range: {
startLineNumber: startPosition.lineNumber,
startColumn: startPosition.column,
endLineNumber: endPosition.lineNumber,
endColumn: endPosition.column,
},
text: change.insertText ?? '',
},
};
});
actions.push({
title: codeAction.title,
diagnostics: [],
kind: codeActionKind,
edit: {
edits: [...edits],
},
});
}
return actions;
}