import * as vscode from 'vscode'; import { strict } from 'assert'; import { Server } from './server'; const RA_LSP_DEBUG = process.env.__RA_LSP_SERVER_DEBUG; export type CargoWatchStartupOptions = 'ask' | 'enabled' | 'disabled'; export type CargoWatchTraceOptions = 'off' | 'error' | 'verbose'; export interface CargoWatchOptions { enableOnStartup: CargoWatchStartupOptions; arguments: string; command: string; trace: CargoWatchTraceOptions; } export class Config { public highlightingOn = true; public rainbowHighlightingOn = false; public enableEnhancedTyping = true; public raLspServerPath = RA_LSP_DEBUG || 'ra_lsp_server'; public showWorkspaceLoadedNotification = true; public lruCapacity: null | number = null; public cargoWatchOptions: CargoWatchOptions = { enableOnStartup: 'ask', trace: 'off', checkArguments: '', checkCommand: '' }; private prevEnhancedTyping: null | boolean = null; constructor() { vscode.workspace.onDidChangeConfiguration(_ => this.userConfigChanged() ); this.userConfigChanged(); } public userConfigChanged() { const config = vscode.workspace.getConfiguration('rust-analyzer'); if (config.has('highlightingOn')) { this.highlightingOn = config.get('highlightingOn') as boolean; } if (config.has('rainbowHighlightingOn')) { this.rainbowHighlightingOn = config.get( 'rainbowHighlightingOn' ) as boolean; } if (config.has('showWorkspaceLoadedNotification')) { this.showWorkspaceLoadedNotification = config.get( 'showWorkspaceLoadedNotification' ) as boolean; } if (!this.highlightingOn && Server) { Server.highlighter.removeHighlights(); } if (config.has('enableEnhancedTyping')) { this.enableEnhancedTyping = config.get( 'enableEnhancedTyping' ) as boolean; if (this.prevEnhancedTyping === null) { this.prevEnhancedTyping = this.enableEnhancedTyping; } } else if (this.prevEnhancedTyping === null) { this.prevEnhancedTyping = this.enableEnhancedTyping; } if (this.prevEnhancedTyping !== this.enableEnhancedTyping) { const reloadAction = 'Reload now'; vscode.window .showInformationMessage( 'Changing enhanced typing setting requires a reload', reloadAction ) .then(selectedAction => { if (selectedAction === reloadAction) { vscode.commands.executeCommand( 'workbench.action.reloadWindow' ); } }); this.prevEnhancedTyping = this.enableEnhancedTyping; } if (config.has('raLspServerPath')) { this.raLspServerPath = RA_LSP_DEBUG || (config.get('raLspServerPath') as string); } if (config.has('enableCargoWatchOnStartup')) { this.cargoWatchOptions.enableOnStartup = config.get< CargoWatchStartupOptions >('enableCargoWatchOnStartup', 'ask'); } if (config.has('trace.cargo-watch')) { this.cargoWatchOptions.trace = config.get( 'trace.cargo-watch', 'off' ); } if (config.has('cargo-watch.check-arguments')) { this.cargoWatchOptions.checkArguments = config.get( 'cargo-watch.check-arguments', '' ); } if (config.has('cargo-watch.check-command')) { this.cargoWatchOptions.checkCommand = config.get( 'cargo-watch.check-command', '' ); } if (config.has('lruCapacity')) { this.lruCapacity = config.get('lruCapacity') as number; } } }