-
Notifications
You must be signed in to change notification settings - Fork 488
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
6d77b01
commit be66ce3
Showing
3 changed files
with
64 additions
and
45 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,53 +1,71 @@ | ||
import type { Context } from "./context"; | ||
import * as vscode from "vscode"; | ||
import { Context } from "./context"; | ||
import { Scarb } from "./scarb"; | ||
import * as lc from "vscode-languageclient/node"; | ||
import { Scarb } from "./scarb"; | ||
|
||
const CAIRO_STATUS_BAR_COMMAND = "cairo1.statusBar.clicked"; | ||
|
||
export async function setupStatusBar(ctx: Context, client?: lc.LanguageClient) { | ||
ctx.extension.subscriptions.push( | ||
vscode.workspace.onDidChangeConfiguration((e) => { | ||
if (e.affectsConfiguration("cairo1.showInStatusBar")) { | ||
updateStatusBar(ctx); | ||
} | ||
}), | ||
); | ||
|
||
ctx.extension.subscriptions.push( | ||
vscode.commands.registerCommand(CAIRO_STATUS_BAR_COMMAND, () => { | ||
if (client) { | ||
client.outputChannel.show(); | ||
} else { | ||
vscode.window.showWarningMessage("Cairo Language Server is not active"); | ||
} | ||
}), | ||
); | ||
ctx.statusBarItem.command = CAIRO_STATUS_BAR_COMMAND; | ||
export class StatusBar { | ||
private statusBarItem: vscode.StatusBarItem; | ||
|
||
updateStatusBar(ctx); | ||
} | ||
constructor(private readonly context: Context) { | ||
this.statusBarItem = vscode.window.createStatusBarItem(vscode.StatusBarAlignment.Left, 100); | ||
this.context.extension.subscriptions.push(this.statusBarItem); | ||
} | ||
|
||
public setupStatusBar(client?: lc.LanguageClient): void { | ||
this.context.extension.subscriptions.push( | ||
vscode.workspace.onDidChangeConfiguration((e) => { | ||
if (e.affectsConfiguration("cairo1.showInStatusBar")) { | ||
this.updateStatusBar(); | ||
} | ||
}), | ||
); | ||
|
||
async function updateStatusBar(ctx: Context) { | ||
const config = vscode.workspace.getConfiguration("cairo1"); | ||
const showInStatusBar = config.get<boolean>("showInStatusBar", true); | ||
this.context.extension.subscriptions.push( | ||
vscode.commands.registerCommand(CAIRO_STATUS_BAR_COMMAND, () => { | ||
if (client) { | ||
client.outputChannel.show(); | ||
} else { | ||
vscode.window.showWarningMessage("Cairo Language Server is not active"); | ||
} | ||
}), | ||
); | ||
this.statusBarItem.command = CAIRO_STATUS_BAR_COMMAND; | ||
|
||
if (showInStatusBar) { | ||
ctx.statusBarItem.text = "Cairo"; | ||
ctx.statusBarItem.tooltip = "Cairo Language"; | ||
this.updateStatusBar(); | ||
} | ||
|
||
public async updateStatusBar(): Promise<void> { | ||
const config = vscode.workspace.getConfiguration("cairo1"); | ||
const showInStatusBar = config.get<boolean>("showInStatusBar", true); | ||
|
||
try { | ||
const scarb = await Scarb.find(vscode.workspace.workspaceFolders?.[0], ctx); | ||
if (scarb) { | ||
const version = await scarb.getVersion(ctx); | ||
ctx.statusBarItem.tooltip = `Cairo Language\n${version}`; | ||
if (showInStatusBar) { | ||
this.statusBarItem.text = "Cairo"; | ||
this.statusBarItem.tooltip = "Cairo Language"; | ||
|
||
try { | ||
// TODO(mkaput): Support multi-root workspaces. | ||
const scarb = await Scarb.find(vscode.workspace.workspaceFolders?.[0], this.context); | ||
if (scarb) { | ||
const version = await scarb.getVersion(this.context); | ||
this.statusBarItem.tooltip = `Cairo Language\n${version}`; | ||
} | ||
} catch (error) { | ||
this.context.log.error(`Error getting Scarb version: ${error}`); | ||
} | ||
} catch (error) { | ||
ctx.log.error(`Error getting Scarb version: ${error}`); | ||
|
||
this.statusBarItem.show(); | ||
} else { | ||
this.statusBarItem.hide(); | ||
} | ||
} | ||
|
||
public showStatusBarItem(): void { | ||
this.statusBarItem.show(); | ||
} | ||
|
||
ctx.statusBarItem.show(); | ||
} else { | ||
ctx.statusBarItem.hide(); | ||
public hideStatusBarItem(): void { | ||
this.statusBarItem.hide(); | ||
} | ||
} |