private async getMonacoCodeActions()

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;
    }