in client/src/common/client.ts [2233:2293]
protected registerLanguageProvider(options: CodeActionRegistrationOptions): [Disposable, CodeActionProvider] {
const selector = options.documentSelector!;
const provider: CodeActionProvider = {
provideCodeActions: (document, range, context, token) => {
if ($DocumentSelector.skipCellTextDocument(selector, document)) {
return undefined;
}
const client = this._client;
const _provideCodeActions: ProvideCodeActionsSignature = (document, range, context, token) => {
const params: CodeActionParams = {
textDocument: client.code2ProtocolConverter.asTextDocumentIdentifier(document),
range: client.code2ProtocolConverter.asRange(range),
context: client.code2ProtocolConverter.asCodeActionContext(context)
};
return client.sendRequest(CodeActionRequest.type, params, token).then((values) => {
if (values === null) {
return undefined;
}
const result: (VCommand | VCodeAction)[] = [];
for (let item of values) {
if (Command.is(item)) {
result.push(client.protocol2CodeConverter.asCommand(item));
} else {
result.push(client.protocol2CodeConverter.asCodeAction(item));
}
}
return result;
},
(error) => {
return client.handleFailedRequest(CodeActionRequest.type, token, error, null);
}
);
};
const middleware = client.clientOptions.middleware!;
return middleware.provideCodeActions
? middleware.provideCodeActions(document, range, context, token, _provideCodeActions)
: _provideCodeActions(document, range, context, token);
},
resolveCodeAction: options.resolveProvider
? (item: VCodeAction, token: CancellationToken) => {
const client = this._client;
const middleware = this._client.clientOptions.middleware!;
const resolveCodeAction: ResolveCodeActionSignature = (item, token) => {
return client.sendRequest(CodeActionResolveRequest.type, client.code2ProtocolConverter.asCodeAction(item), token).then(
client.protocol2CodeConverter.asCodeAction,
(error) => {
return client.handleFailedRequest(CodeActionResolveRequest.type, token, error, item);
}
);
};
return middleware.resolveCodeAction
? middleware.resolveCodeAction(item, token, resolveCodeAction)
: resolveCodeAction(item, token);
}
: undefined
};
return [Languages.registerCodeActionsProvider($DocumentSelector.asTextDocumentFilters(selector), provider,
(options.codeActionKinds
? { providedCodeActionKinds: this._client.protocol2CodeConverter.asCodeActionKinds(options.codeActionKinds) }
: undefined)), provider];
}