Config to switch to semantic tokens

This commit is contained in:
Aleksey Kladov 2020-02-26 16:03:30 +01:00
parent 8c0d0894b6
commit 225ef6dea2
4 changed files with 15 additions and 3 deletions

View file

@ -168,6 +168,11 @@
"type": "object", "type": "object",
"title": "Rust Analyzer", "title": "Rust Analyzer",
"properties": { "properties": {
"rust-analyzer.highlighting.semanticTokens": {
"type": "boolean",
"default": false,
"description": "Use proposed semantic tokens API for syntax highlighting"
},
"rust-analyzer.highlightingOn": { "rust-analyzer.highlightingOn": {
"type": "boolean", "type": "boolean",
"default": false, "default": false,

View file

@ -27,7 +27,7 @@ export async function createClient(config: Config, serverPath: string): Promise<
const clientOptions: lc.LanguageClientOptions = { const clientOptions: lc.LanguageClientOptions = {
documentSelector: [{ scheme: 'file', language: 'rust' }], documentSelector: [{ scheme: 'file', language: 'rust' }],
initializationOptions: { initializationOptions: {
publishDecorations: true, publishDecorations: !config.highlightingSemanticTokens,
lruCapacity: config.lruCapacity, lruCapacity: config.lruCapacity,
maxInlayHintLength: config.maxInlayHintLength, maxInlayHintLength: config.maxInlayHintLength,
cargoWatchEnable: cargoWatchOpts.enable, cargoWatchEnable: cargoWatchOpts.enable,
@ -84,7 +84,10 @@ export async function createClient(config: Config, serverPath: string): Promise<
// Here we want to just enable CallHierarchyFeature since it is available on stable. // Here we want to just enable CallHierarchyFeature since it is available on stable.
// Note that while the CallHierarchyFeature is stable the LSP protocol is not. // Note that while the CallHierarchyFeature is stable the LSP protocol is not.
res.registerFeature(new CallHierarchyFeature(res)); res.registerFeature(new CallHierarchyFeature(res));
res.registerFeature(new SemanticTokensFeature(res));
if (config.highlightingSemanticTokens) {
res.registerFeature(new SemanticTokensFeature(res));
}
return res; return res;
} }

View file

@ -22,6 +22,7 @@ export class Config {
private static readonly requiresReloadOpts = [ private static readonly requiresReloadOpts = [
"cargoFeatures", "cargoFeatures",
"cargo-watch", "cargo-watch",
"highlighting.semanticTokens"
] ]
.map(opt => `${Config.rootSection}.${opt}`); .map(opt => `${Config.rootSection}.${opt}`);
@ -143,6 +144,7 @@ export class Config {
// We don't do runtime config validation here for simplicity. More on stackoverflow: // We don't do runtime config validation here for simplicity. More on stackoverflow:
// https://stackoverflow.com/questions/60135780/what-is-the-best-way-to-type-check-the-configuration-for-vscode-extension // https://stackoverflow.com/questions/60135780/what-is-the-best-way-to-type-check-the-configuration-for-vscode-extension
get highlightingSemanticTokens() { return this.cfg.get("highlighting.semanticTokens") as boolean; }
get highlightingOn() { return this.cfg.get("highlightingOn") as boolean; } get highlightingOn() { return this.cfg.get("highlightingOn") as boolean; }
get rainbowHighlightingOn() { return this.cfg.get("rainbowHighlightingOn") as boolean; } get rainbowHighlightingOn() { return this.cfg.get("rainbowHighlightingOn") as boolean; }
get lruCapacity() { return this.cfg.get("lruCapacity") as null | number; } get lruCapacity() { return this.cfg.get("lruCapacity") as null | number; }

View file

@ -89,7 +89,9 @@ export async function activate(context: vscode.ExtensionContext) {
activateStatusDisplay(ctx); activateStatusDisplay(ctx);
activateHighlighting(ctx); if (!ctx.config.highlightingSemanticTokens) {
activateHighlighting(ctx);
}
activateInlayHints(ctx); activateInlayHints(ctx);
} }