-
Notifications
You must be signed in to change notification settings - Fork 29k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Support multiple SemanticTokensProvider
per document selector
#212650
Comments
This feature request is now a candidate for our backlog. The community has 60 days to upvote the issue. If it receives 20 upvotes we will move it to our backlog. If not, we will close it. To learn more about how we handle feature requests, please see our documentation. Happy Coding! |
🙂 This feature request received a sufficient number of community upvotes and we moved it to our backlog. To learn more about how we handle feature requests, please see our documentation. Happy Coding! |
I have noticed that a few semantic token providers for the same language where only one provides non-null results isn't working so not sure if this #135602 works as expected or maybe I misunderstood something... I took semantic-tokens-sample from https:/BoykoAlex/vscode-extension-samples. Added: In the context.subscriptions.push(vscode.languages.registerDocumentSemanticTokensProvider({ language: "java" }, new JavaSemanticTokensProvider(), legend)); Where the import {CancellationToken, DocumentSemanticTokensProvider, ProviderResult, SemanticTokens, TextDocument} from "vscode";
export class JavaSemanticTokensProvider implements DocumentSemanticTokensProvider {
provideDocumentSemanticTokens(document: TextDocument, token: CancellationToken): ProviderResult<SemanticTokens> {
return Promise.resolve(null);
}
} Also changed activation on event in "activationEvents": [
"onStartupFinished"
], After all this i see that JDT LS provided semantic tokens are not present. (See https:/BoykoAlex/vscode-extension-samples/tree/multi-semantic-token-providers and don't forget to install Java extension pack or RedHat Java extension) |
Currently there is very basic support for multiple semantic tokens provider for the same language. The first provider that computed some tokens is used. (See #135580). This feature was also requested in #135599 but didn't look like anything got pushed to fix it...
However, in reality, tokens from multiple semantic token providers need to be taken into account. For example Java annotations in the case of Spring can have JPQL, HQL or native SQL queries depending on annotation parameters and JARs on the classpath. Seems that best approach for such use case in Semantic Tokens. However, since JDT LS also has
SemanticTokensProvider
any Spring specificSemanticTokenProvider
would conflict with the JDT LS provider.Looking at https:/microsoft/vscode/blob/main/src/vs/editor/common/services/semanticTokensProviderStyling.ts#L142 i have a feeling that the restriction of effectively having one token provider giving tokens can be lifted if switched to
SemanticTokens[]
(cc: @martinlippert)
The text was updated successfully, but these errors were encountered: