From dde9b77754a9f907db762362719a2a711e1b33fc Mon Sep 17 00:00:00 2001 From: Nathan Totten Date: Wed, 14 Aug 2024 10:58:00 -0400 Subject: [PATCH] Added language status --- CHANGELOG.md | 1 + package.json | 4 ++-- src/PrettierEditService.ts | 4 ++++ src/StatusBar.ts | 40 +++++++++++++++++++++++++++++++++++--- src/extension.ts | 1 + yarn.lock | 8 ++++---- 6 files changed, 49 insertions(+), 9 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ede984da8..fb352a8fb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,7 @@ All notable changes to the "prettier-vscode" extension will be documented in thi ## [Unreleased] - [BREAKING CHANGE] Prevent `.editorconfig` from satisfying the `requireConfig` setting +- Added Language Status Item for Prettier - Fix issue where formatting multiple files in a workspace with multiple instances of Prettier could result in files being overwritten with the contents of other files (#3423, #3040) - Add support for `experimentalTernaries` option diff --git a/package.json b/package.json index 45a72e352..ffb8a8028 100644 --- a/package.json +++ b/package.json @@ -22,7 +22,7 @@ "url": "https://github.com/prettier/prettier-vscode/issues" }, "engines": { - "vscode": "^1.60.0" + "vscode": "^1.80.0" }, "keywords": [ "multi-root ready", @@ -100,7 +100,7 @@ "@types/semver": "^7.5.8", "@types/sinon": "^17.0.3", "@types/tmp": "^0.2.6", - "@types/vscode": "^1.60.0", + "@types/vscode": "^1.80.0", "@typescript-eslint/eslint-plugin": "^5.45.0", "@typescript-eslint/parser": "^5.45.0", "@vscode/test-electron": "^2.4.1", diff --git a/src/PrettierEditService.ts b/src/PrettierEditService.ts index 1ff7d0bf5..4e0d437c7 100644 --- a/src/PrettierEditService.ts +++ b/src/PrettierEditService.ts @@ -203,6 +203,10 @@ export default class PrettierEditService implements Disposable { workspaceFolder.uri ); + this.statusBar.updateConfig({ + selector: selectors.languageSelector, + }); + if (!isRegistered) { this.registerDocumentFormatEditorProviders(selectors); this.registeredWorkspaces.add(workspaceFolder.uri.fsPath); diff --git a/src/StatusBar.ts b/src/StatusBar.ts index 61c1aacca..1121790f4 100644 --- a/src/StatusBar.ts +++ b/src/StatusBar.ts @@ -1,4 +1,14 @@ -import { StatusBarAlignment, StatusBarItem, window, ThemeColor } from "vscode"; +import { + Disposable, + DocumentSelector, + languages, + LanguageStatusItem, + LanguageStatusSeverity, + StatusBarAlignment, + StatusBarItem, + ThemeColor, + window, +} from "vscode"; export enum FormatterStatus { Ready = "check-all", @@ -9,20 +19,36 @@ export enum FormatterStatus { Disabled = "circle-slash", } -export class StatusBar { +export class StatusBar implements Disposable { private statusBarItem: StatusBarItem; + private languageStatusItem: LanguageStatusItem; constructor() { - // Setup the statusBarItem this.statusBarItem = window.createStatusBarItem( "prettier.status", StatusBarAlignment.Right, -1 ); + this.languageStatusItem = languages.createLanguageStatusItem( + "prettier.status", + [] + ); + this.statusBarItem.name = "Prettier"; this.statusBarItem.text = "Prettier"; this.statusBarItem.command = "prettier.openOutput"; this.update(FormatterStatus.Ready); this.statusBarItem.show(); + + this.languageStatusItem.name = "Prettier"; + this.languageStatusItem.text = "Prettier"; + this.languageStatusItem.command = { + title: "View Logs", + command: "prettier.openOutput", + }; + } + + public updateConfig({ selector }: { selector: DocumentSelector }) { + this.languageStatusItem.selector = selector; } /** @@ -38,16 +64,19 @@ export class StatusBar { this.statusBarItem.backgroundColor = new ThemeColor( "statusBarItem.warningBackground" ); + this.languageStatusItem.severity = LanguageStatusSeverity.Warning; break; case FormatterStatus.Error: this.statusBarItem.backgroundColor = new ThemeColor( "statusBarItem.errorBackground" ); + this.languageStatusItem.severity = LanguageStatusSeverity.Error; break; default: this.statusBarItem.backgroundColor = new ThemeColor( "statusBarItem.fourgroundBackground" ); + this.languageStatusItem.severity = LanguageStatusSeverity.Information; break; } this.statusBarItem.show(); @@ -56,4 +85,9 @@ export class StatusBar { public hide() { this.statusBarItem.hide(); } + + public dispose(): void { + this.languageStatusItem.dispose(); + this.statusBarItem.dispose(); + } } diff --git a/src/extension.ts b/src/extension.ts index 26982071c..f283e4447 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -70,6 +70,7 @@ export function activate(context: ExtensionContext) { ); context.subscriptions.push( + statusBar, editService, createConfigFileCommand, openOutputCommand, diff --git a/yarn.lock b/yarn.lock index 37dca4054..9747b4e42 100644 --- a/yarn.lock +++ b/yarn.lock @@ -307,10 +307,10 @@ resolved "https://registry.yarnpkg.com/@types/tmp/-/tmp-0.2.6.tgz#d785ee90c52d7cc020e249c948c36f7b32d1e217" integrity sha512-chhaNf2oKHlRkDGt+tiKE2Z5aJ6qalm7Z9rlLdBwmOiAAf09YQvvoLXjWK4HWPF1xU/fqvMgfNfpVoBscA/tKA== -"@types/vscode@^1.60.0": - version "1.69.0" - resolved "https://registry.yarnpkg.com/@types/vscode/-/vscode-1.69.0.tgz#a472011af392fbcf82cbb82f60b4c239c21b921c" - integrity sha512-RlzDAnGqUoo9wS6d4tthNyAdZLxOIddLiX3djMoWk29jFfSA1yJbIwr0epBYqqYarWB6s2Z+4VaZCQ80Jaa3kA== +"@types/vscode@^1.80.0": + version "1.92.0" + resolved "https://registry.yarnpkg.com/@types/vscode/-/vscode-1.92.0.tgz#b4d6bc180e7206defe643a1a5f38a1367947d418" + integrity sha512-DcZoCj17RXlzB4XJ7IfKdPTcTGDLYvTOcTNkvtjXWF+K2TlKzHHkBEXNWQRpBIXixNEUgx39cQeTFunY0E2msw== "@typescript-eslint/eslint-plugin@^5.45.0": version "5.45.0"