Unnamed repository; edit this file 'description' to name the repository.
-rw-r--r--editors/code/package.json73
-rw-r--r--editors/code/src/config.ts11
-rw-r--r--editors/code/src/ctx.ts13
3 files changed, 62 insertions, 35 deletions
diff --git a/editors/code/package.json b/editors/code/package.json
index df97efaae7..fc3bc73b70 100644
--- a/editors/code/package.json
+++ b/editors/code/package.json
@@ -426,40 +426,55 @@
"default": "openLogs",
"markdownDescription": "Action to run when clicking the extension status bar item."
},
- "rust-analyzer.statusBar.documentSelector": {
- "type": [
- "array",
- "null"
- ],
- "items": {
- "type": "object",
- "properties": {
- "language": {
- "type": [
- "string",
- "null"
- ]
- },
- "pattern": {
- "type": [
- "string",
- "null"
- ]
- }
- }
- },
- "default": [
- {
- "language": "rust"
- },
+ "rust-analyzer.statusBar.showStatusBar": {
+ "markdownDescription": "When to show the extension status bar.\n\n`\"always\"` Always show the status bar.\n\n`\"never\"` Never show the status bar.\n\n`{ documentSelector: <DocumentSelector>[] }` Show the status bar if the open file matches any of the given document selectors.\n\nSee [VS Code -- DocumentSelector](https://code.visualstudio.com/api/references/document-selector) for more information.",
+ "anyOf": [
{
- "pattern": "**/Cargo.toml"
+ "type": "string",
+ "enum": [
+ "always",
+ "never"
+ ]
},
{
- "pattern": "**/Cargo.lock"
+ "type": "object",
+ "properties": {
+ "documentSelector": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "language": {
+ "type": "string"
+ },
+ "notebookType": {
+ "type": "string"
+ },
+ "scheme": {
+ "type": "string"
+ },
+ "pattern": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ }
}
],
- "markdownDescription": "Determines when to show the extension status bar item based on the currently open file. Use `{ \"pattern\": \"**\" }` to always show. Use `null` to never show."
+ "default": {
+ "documentSelector": [
+ {
+ "language": "rust"
+ },
+ {
+ "pattern": "**/Cargo.toml"
+ },
+ {
+ "pattern": "**/Cargo.lock"
+ }
+ ]
+ }
}
}
},
diff --git a/editors/code/src/config.ts b/editors/code/src/config.ts
index f7ef80df2b..a97d4beab5 100644
--- a/editors/code/src/config.ts
+++ b/editors/code/src/config.ts
@@ -13,6 +13,13 @@ export type RunnableEnvCfgItem = {
};
export type RunnableEnvCfg = Record<string, string> | RunnableEnvCfgItem[];
+type ShowStatusBar =
+ | "always"
+ | "never"
+ | {
+ documentSelector: vscode.DocumentSelector;
+ };
+
export class Config {
readonly extensionId = "rust-lang.rust-analyzer";
configureLang: vscode.Disposable | undefined;
@@ -348,8 +355,8 @@ export class Config {
return this.get<string>("statusBar.clickAction");
}
- get statusBarDocumentSelector() {
- return this.get<vscode.DocumentSelector>("statusBar.documentSelector");
+ get statusBarShowStatusBar() {
+ return this.get<ShowStatusBar>("statusBar.showStatusBar");
}
get initializeStopped() {
diff --git a/editors/code/src/ctx.ts b/editors/code/src/ctx.ts
index 459754b1d1..37a54abf71 100644
--- a/editors/code/src/ctx.ts
+++ b/editors/code/src/ctx.ts
@@ -480,14 +480,19 @@ export class Ctx implements RustAnalyzerExtensionApi {
}
private updateStatusBarVisibility(editor: vscode.TextEditor | undefined) {
- const documentSelector = this.config.statusBarDocumentSelector;
- if (documentSelector != null) {
+ const showStatusBar = this.config.statusBarShowStatusBar;
+ if (showStatusBar == null || showStatusBar === "never") {
+ this.statusBar.hide();
+ } else if (showStatusBar === "always") {
+ this.statusBar.show();
+ } else {
+ const documentSelector = showStatusBar.documentSelector;
if (editor != null && vscode.languages.match(documentSelector, editor.document) > 0) {
this.statusBar.show();
- return;
+ } else {
+ this.statusBar.hide();
}
}
- this.statusBar.hide();
}
pushExtCleanup(d: Disposable) {