Support setting cargo features

This commit is contained in:
oxalica 2019-12-13 18:16:34 +08:00
parent 5eb5e80de9
commit af4eb26645
No known key found for this signature in database
GPG key ID: CED392DE0C483D00
8 changed files with 118 additions and 21 deletions

View file

@ -15,6 +15,12 @@ export interface CargoWatchOptions {
ignore: string[];
}
export interface CargoFeatures {
noDefaultFeatures: boolean;
allFeatures: boolean;
features: string[];
}
export class Config {
public highlightingOn = true;
public rainbowHighlightingOn = false;
@ -35,8 +41,14 @@ export class Config {
command: '',
ignore: [],
};
public cargoFeatures: CargoFeatures = {
noDefaultFeatures: false,
allFeatures: false,
features: [],
};
private prevEnhancedTyping: null | boolean = null;
private prevCargoFeatures: null | CargoFeatures = null;
constructor() {
vscode.workspace.onDidChangeConfiguration(_ =>
@ -47,6 +59,8 @@ export class Config {
public userConfigChanged() {
const config = vscode.workspace.getConfiguration('rust-analyzer');
let requireReloadMessage = null;
if (config.has('highlightingOn')) {
this.highlightingOn = config.get('highlightingOn') as boolean;
}
@ -74,19 +88,7 @@ export class Config {
}
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',
);
}
});
requireReloadMessage = 'Changing enhanced typing setting requires a reload';
this.prevEnhancedTyping = this.enableEnhancedTyping;
}
@ -153,5 +155,47 @@ export class Config {
if (config.has('withSysroot')) {
this.withSysroot = config.get('withSysroot') || false;
}
if (config.has('cargoFeatures.noDefaultFeatures')) {
this.cargoFeatures.noDefaultFeatures = config.get(
'cargoFeatures.noDefaultFeatures',
false,
);
}
if (config.has('cargoFeatures.allFeatures')) {
this.cargoFeatures.allFeatures = config.get(
'cargoFeatures.allFeatures',
false,
);
}
if (config.has('cargoFeatures.features')) {
this.cargoFeatures.features = config.get(
'cargoFeatures.features',
[],
);
}
if (this.prevCargoFeatures !== null && (
this.cargoFeatures.allFeatures !== this.prevCargoFeatures.allFeatures ||
this.cargoFeatures.noDefaultFeatures !== this.prevCargoFeatures.noDefaultFeatures ||
this.cargoFeatures.features.length !== this.prevCargoFeatures.features.length ||
this.cargoFeatures.features.some((v, i) => v !== this.prevCargoFeatures!.features[i])
)) {
requireReloadMessage = 'Changing cargo features requires a reload';
}
this.prevCargoFeatures = { ...this.cargoFeatures };
if (requireReloadMessage !== null) {
const reloadAction = 'Reload now';
vscode.window
.showInformationMessage(requireReloadMessage, reloadAction)
.then(selectedAction => {
if (selectedAction === reloadAction) {
vscode.commands.executeCommand(
'workbench.action.reloadWindow',
);
}
});
}
}
}