rust/editors/code/src/config.ts

158 lines
5.0 KiB
TypeScript
Raw Normal View History

2018-10-07 15:59:02 -05:00
import * as vscode from 'vscode';
2019-06-24 05:33:37 -05:00
import { Server } from './server';
2018-10-07 15:59:02 -05:00
const RA_LSP_DEBUG = process.env.__RA_LSP_SERVER_DEBUG;
2019-04-02 00:07:40 -05:00
export type CargoWatchStartupOptions = 'ask' | 'enabled' | 'disabled';
export type CargoWatchTraceOptions = 'off' | 'error' | 'verbose';
export interface CargoWatchOptions {
2019-04-02 01:43:02 -05:00
enableOnStartup: CargoWatchStartupOptions;
arguments: string;
command: string;
2019-04-02 01:43:02 -05:00
trace: CargoWatchTraceOptions;
ignore: string[];
2019-04-02 01:43:02 -05:00
}
2018-10-07 15:59:02 -05:00
export class Config {
2018-10-08 16:38:33 -05:00
public highlightingOn = true;
2019-05-27 04:26:15 -05:00
public rainbowHighlightingOn = false;
public enableEnhancedTyping = true;
public raLspServerPath = RA_LSP_DEBUG || 'ra_lsp_server';
2019-06-07 12:49:29 -05:00
public lruCapacity: null | number = null;
2019-07-23 08:38:21 -05:00
public displayInlayHints = true;
2019-10-18 06:40:03 -05:00
public maxInlayHintLength: null | number = null;
public excludeGlobs = [];
2019-09-06 08:25:24 -05:00
public useClientWatching = false;
2019-08-22 06:44:16 -05:00
public featureFlags = {};
// for internal use
public withSysroot: null | boolean = null;
2019-04-02 01:43:02 -05:00
public cargoWatchOptions: CargoWatchOptions = {
enableOnStartup: 'ask',
trace: 'off',
2019-06-24 05:50:34 -05:00
arguments: '',
command: '',
2019-12-09 12:57:55 -06:00
ignore: [],
2019-04-02 01:43:02 -05:00
};
2018-10-07 15:59:02 -05:00
private prevEnhancedTyping: null | boolean = null;
2018-10-08 16:38:33 -05:00
constructor() {
vscode.workspace.onDidChangeConfiguration(_ =>
2019-12-09 12:57:55 -06:00
this.userConfigChanged(),
2018-10-08 16:38:33 -05:00
);
this.userConfigChanged();
2018-10-08 16:36:47 -05:00
}
2018-10-07 15:59:02 -05:00
2018-10-08 16:38:33 -05:00
public userConfigChanged() {
2019-01-28 05:43:07 -06:00
const config = vscode.workspace.getConfiguration('rust-analyzer');
2018-10-08 16:38:33 -05:00
if (config.has('highlightingOn')) {
this.highlightingOn = config.get('highlightingOn') as boolean;
}
2019-05-27 04:26:15 -05:00
if (config.has('rainbowHighlightingOn')) {
this.rainbowHighlightingOn = config.get(
2019-12-09 12:57:55 -06:00
'rainbowHighlightingOn',
2019-05-27 04:26:15 -05:00
) as boolean;
}
2018-10-08 16:38:33 -05:00
if (!this.highlightingOn && Server) {
Server.highlighter.removeHighlights();
}
if (config.has('enableEnhancedTyping')) {
2019-02-07 04:54:41 -06:00
this.enableEnhancedTyping = config.get(
2019-12-09 12:57:55 -06:00
'enableEnhancedTyping',
2019-02-07 04:54:41 -06:00
) 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';
2019-02-07 04:54:41 -06:00
vscode.window
.showInformationMessage(
'Changing enhanced typing setting requires a reload',
2019-12-09 12:57:55 -06:00
reloadAction,
2019-02-07 04:54:41 -06:00
)
.then(selectedAction => {
if (selectedAction === reloadAction) {
2019-02-07 04:54:41 -06:00
vscode.commands.executeCommand(
2019-12-09 12:57:55 -06:00
'workbench.action.reloadWindow',
2019-02-07 04:54:41 -06:00
);
}
});
this.prevEnhancedTyping = this.enableEnhancedTyping;
}
if (config.has('raLspServerPath')) {
this.raLspServerPath =
RA_LSP_DEBUG || (config.get('raLspServerPath') as string);
}
if (config.has('enableCargoWatchOnStartup')) {
2019-04-02 01:43:02 -05:00
this.cargoWatchOptions.enableOnStartup = config.get<
CargoWatchStartupOptions
>('enableCargoWatchOnStartup', 'ask');
}
if (config.has('trace.cargo-watch')) {
this.cargoWatchOptions.trace = config.get<CargoWatchTraceOptions>(
'trace.cargo-watch',
2019-12-09 12:57:55 -06:00
'off',
2019-04-02 01:43:02 -05:00
);
}
2019-04-02 00:07:40 -05:00
2019-06-24 05:50:34 -05:00
if (config.has('cargo-watch.arguments')) {
this.cargoWatchOptions.arguments = config.get<string>(
'cargo-watch.arguments',
2019-12-09 12:57:55 -06:00
'',
2019-04-02 01:43:02 -05:00
);
}
2019-06-24 05:02:20 -05:00
2019-06-24 05:50:34 -05:00
if (config.has('cargo-watch.command')) {
this.cargoWatchOptions.command = config.get<string>(
'cargo-watch.command',
2019-12-09 12:57:55 -06:00
'',
2019-06-24 05:02:20 -05:00
);
}
if (config.has('cargo-watch.ignore')) {
this.cargoWatchOptions.ignore = config.get<string[]>(
'cargo-watch.ignore',
2019-12-09 12:57:55 -06:00
[],
);
}
2019-06-07 12:49:29 -05:00
if (config.has('lruCapacity')) {
this.lruCapacity = config.get('lruCapacity') as number;
}
2019-07-23 08:38:21 -05:00
if (config.has('displayInlayHints')) {
this.displayInlayHints = config.get('displayInlayHints') as boolean;
}
2019-10-18 06:40:03 -05:00
if (config.has('maxInlayHintLength')) {
this.maxInlayHintLength = config.get(
2019-12-09 12:57:55 -06:00
'maxInlayHintLength',
2019-10-18 06:40:03 -05:00
) as number;
}
if (config.has('excludeGlobs')) {
this.excludeGlobs = config.get('excludeGlobs') || [];
}
2019-09-06 08:25:24 -05:00
if (config.has('useClientWatching')) {
this.useClientWatching = config.get('useClientWatching') || false;
}
2019-08-22 06:44:16 -05:00
if (config.has('featureFlags')) {
this.featureFlags = config.get('featureFlags') || {};
}
if (config.has('withSysroot')) {
this.withSysroot = config.get('withSysroot') || false;
}
2018-10-07 15:59:02 -05:00
}
}