1

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 ?

0 Answers0