I am trying to implement embedded language support for SQL
in vscode extension using request forwarding mechanism.
According to the documentation we can hijack the completion using middleware
option and provide the sub-language completion using an existing language server. As an example user can get CSS
language support inside HTML
using this mechanism.
In my scenario, I want get SQL Language
support inside another language (new language) when writing a SQL query.
Sample Code
let clientOptions: LanguageClientOptions = {
documentSelector: [{ scheme: 'file', language: '.mylang' }],
middleware: {
provideCompletionItem: async (document, position, context, token, next) => {
if (
!isInsideSQLRegion(
myLanguageService,
document.getText(),
document.offsetAt(position)
)
) {
return await next(document, position, context, token);
}
const originalUri = document.uri.toString();
virtualDocumentContents.set(
originalUri,
getSQLVirtualContent(myLanguageService, document.getText())
);
const vdocUriString = `embedded-content://sql/${encodeURIComponent(originalUri)}.sql`;
const vdocUri = Uri.parse(vdocUriString);
return await commands.executeCommand<CompletionList>(
'vscode.executeCompletionItemProvider',
vdocUri,
position,
context.triggerCharacter
);
}
}
};
Here the provideCompletionItem
get triggered each time we write a new character in the editor but it seems that it is not getting triggered when user writes "
or single quote.
Is there a way to get provideCompletionItem
when single or double quotes is being entered ?