Skip to content

Commit

Permalink
Merge pull request #18722 from markmurphydev/status_bar_settings
Browse files Browse the repository at this point in the history
Rename `rust-analyzer.statusBar.documentSelector` to `showStatusBar`, add "always" and "never" options.
  • Loading branch information
Veykril authored Dec 24, 2024
2 parents c679648 + ed0df30 commit 4c0569b
Show file tree
Hide file tree
Showing 3 changed files with 62 additions and 35 deletions.
73 changes: 44 additions & 29 deletions editors/code/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -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"
}
]
}
}
}
},
Expand Down
11 changes: 9 additions & 2 deletions editors/code/src/config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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() {
Expand Down
13 changes: 9 additions & 4 deletions editors/code/src/ctx.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand Down

0 comments on commit 4c0569b

Please sign in to comment.