diff --git a/package-lock.json b/package-lock.json index 1cee021..9c51b08 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "andreas-talon", - "version": "3.67.0", + "version": "3.68.0", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "andreas-talon", - "version": "3.67.0", + "version": "3.68.0", "license": "MIT", "dependencies": { "ignore": "^5.2.4", diff --git a/package.json b/package.json index 76ddfec..b70f66e 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "andreas-talon", "displayName": "Andreas Talon", "description": "VSCode extension used by Talon Voice", - "version": "3.67.0", + "version": "3.68.0", "publisher": "AndreasArvidsson", "license": "MIT", "main": "./out/extension.js", diff --git a/src/commands/formatComments/formatComments.ts b/src/commands/formatComments/formatComments.ts index 75fee79..a1c40af 100644 --- a/src/commands/formatComments/formatComments.ts +++ b/src/commands/formatComments/formatComments.ts @@ -1,6 +1,5 @@ import * as prettier from "prettier"; import * as vscode from "vscode"; -import { getConfiguration } from "../../util/configuration"; import { getActiveEditor } from "../../util/getActiveEditor"; import { isTesting } from "../../util/isTesting"; import { JavaFormatter } from "./JavaFormatter"; @@ -98,7 +97,7 @@ async function getLineWidth(document: vscode.TextDocument): Promise { return prettierConfig.printWidth; } - const defaultFormatter = getConfiguration(document, "editor", "defaultFormatter"); + const defaultFormatter = getConfiguration("editor", "defaultFormatter"); switch (defaultFormatter) { case "ms-python.black-formatter": @@ -108,3 +107,7 @@ async function getLineWidth(document: vscode.TextDocument): Promise { return 80; } + +function getConfiguration(section: string, key: string): T | undefined { + return vscode.workspace.getConfiguration(section).get(key); +} diff --git a/src/commands/formatComments/registerFormatCommentsOnSave.ts b/src/commands/formatComments/registerFormatCommentsOnSave.ts deleted file mode 100644 index 0c500fe..0000000 --- a/src/commands/formatComments/registerFormatCommentsOnSave.ts +++ /dev/null @@ -1,18 +0,0 @@ -import * as vscode from "vscode"; -import { configuration } from "../../util/configuration"; -import { formatCommentsRunner } from "./formatComments"; - -export function registerFormatCommentsOnSave(): vscode.Disposable { - // onWillSaveTextDocument does not tree ge on "Save without formatting" - return vscode.workspace.onWillSaveTextDocument(async (e) => { - if ( - e.reason === vscode.TextDocumentSaveReason.Manual && - configuration.formatCommentsOnSave(e.document) - ) { - const editor = vscode.window.visibleTextEditors.find((e) => e.document === e.document); - if (editor != null) { - await formatCommentsRunner({ editor, doSave: true }); - } - } - }); -} diff --git a/src/extension.ts b/src/extension.ts index e57a141..4e4e3ed 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -1,11 +1,9 @@ import * as vscode from "vscode"; -import { registerFormatCommentsOnSave } from "./commands/formatComments/registerFormatCommentsOnSave"; import { registerCommands } from "./commands/registerCommands"; import { registerLanguageCodeActions } from "./language/registerLanguageCodeActions"; import { registerLanguageCompletionProviders } from "./language/registerLanguageCompletionProviders"; import { registerLanguageDefinitions } from "./language/registerLanguageDefinitions"; import { registerLanguageFormatters } from "./language/registerLanguageFormatters"; -import { registerStateUpdater } from "./stateUpdater"; import { createTabView } from "./tabView"; import { TreeSitter } from "./treeSitter/TreeSitter"; import { getCommandServerExtension, getParseTreeExtension } from "./util/getExtension"; @@ -40,8 +38,6 @@ async function activateExtension(context: vscode.ExtensionContext): Promise (a.type === "header" && a.key === "list" ? -1 : 0)); const result: string[] = []; @@ -45,10 +43,10 @@ export const talonListFormatter: LanguageFormatterText = { } }; -function getColumnWidth(document: TextDocument, text: string) { +function getColumnWidth(text: string) { const match = text.match(/# fmt: columnWidth=(\d+)/); if (match != null) { return parseInt(match[1]); } - return configuration.talonListFormatter.columnWidth(document); + return configuration.talonListFormatter.columnWidth(); } diff --git a/src/language/TreeSitterFormatter.ts b/src/language/TreeSitterFormatter.ts index 9d0d2ad..f5e4d30 100644 --- a/src/language/TreeSitterFormatter.ts +++ b/src/language/TreeSitterFormatter.ts @@ -1,9 +1,8 @@ -import type { TextDocument } from "vscode"; import type { SyntaxNode } from "web-tree-sitter"; import type { LanguageFormatterTree } from "./registerLanguageFormatters"; export const treeSitterFormatter: LanguageFormatterTree = { - getText(document: TextDocument, node: SyntaxNode, indentation: string): string { + getText(node: SyntaxNode, indentation: string): string { const formatter = new TreeSitterFormatter(indentation); return formatter.getText(node); } diff --git a/src/language/registerLanguageFormatters.ts b/src/language/registerLanguageFormatters.ts index 6003641..84d5914 100644 --- a/src/language/registerLanguageFormatters.ts +++ b/src/language/registerLanguageFormatters.ts @@ -9,11 +9,11 @@ import { talonListFormatter } from "./TalonListFormatter"; import { treeSitterFormatter } from "./TreeSitterFormatter"; export interface LanguageFormatterTree { - getText(document: TextDocument, node: SyntaxNode, indentation: string): string; + getText(node: SyntaxNode, indentation: string): string; } export interface LanguageFormatterText { - getText(document: TextDocument, indentation: string): string; + getText(text: string, indentation: string): string; } function provideDocumentFormattingEditsForTree( @@ -33,7 +33,7 @@ function provideDocumentFormattingEditsForTree( } const { indentation } = await parseOptions(document, options); - const newText = formatter.getText(document, rootNode, indentation); + const newText = formatter.getText(rootNode, indentation); return createTextEdits(document, newText); } }; @@ -47,7 +47,7 @@ function provideDocumentFormattingEditsForText(formatter: LanguageFormatterText) ): Promise => { const { indentation } = await parseOptions(document, options); try { - const newText = formatter.getText(document, indentation); + const newText = formatter.getText(document.getText(), indentation); return createTextEdits(document, newText); } catch (error) { console.warn((error as Error).message); diff --git a/src/stateUpdater.ts b/src/stateUpdater.ts deleted file mode 100644 index 7a58e34..0000000 --- a/src/stateUpdater.ts +++ /dev/null @@ -1,90 +0,0 @@ -import * as vscode from "vscode"; -import * as os from "node:os"; -import * as path from "node:path"; - -const file = vscode.Uri.file(path.join(os.tmpdir(), "vscodeState.json")); - -interface State { - workspaceFolders: string[]; -} - -const settingSection = "andreas.private"; -const settingName = "trackState"; -const fullSettingName = `${settingSection}.${settingName}`; - -export function registerStateUpdater(): vscode.Disposable { - let disposable: vscode.Disposable | undefined = undefined; - - const evaluateSetting = async () => { - disposable?.dispose(); - - if (readSetting()) { - await updateState(); - - disposable = vscode.Disposable.from( - vscode.workspace.onDidChangeWorkspaceFolders(() => updateState()), - vscode.window.onDidChangeWindowState(async (states) => { - if (states.focused) { - await updateState(); - } - }) - ); - } else { - disposable = undefined; - await resetState(); - } - }; - - // Update state when extension initializes. This happens whenever you change a workspace/session. - void evaluateSetting(); - - return vscode.Disposable.from( - vscode.workspace.onDidChangeConfiguration(async ({ affectsConfiguration }) => { - if (affectsConfiguration(fullSettingName)) { - await evaluateSetting(); - } - }), - { - dispose: () => { - disposable?.dispose(); - } - } - ); -} - -function readSetting(): boolean { - return vscode.workspace.getConfiguration(settingSection).get(settingName) ?? false; -} - -async function updateState() { - const workspaceFolders = - vscode.workspace.workspaceFolders?.map((folder) => folder.uri.fsPath) ?? []; - - await updateStateFile({ - workspaceFolders - }); -} - -async function resetState() { - await updateStateFile({ - workspaceFolders: [] - }); -} - -async function getCurrentJson(): Promise { - try { - const buffer = await vscode.workspace.fs.readFile(file); - return buffer.toString(); - } catch (error) { - return undefined; - } -} - -async function updateStateFile(state: State) { - const currentJson = await getCurrentJson(); - const updatedJson = JSON.stringify(state, null, 4); - - if (currentJson !== updatedJson) { - await vscode.workspace.fs.writeFile(file, Buffer.from(updatedJson)); - } -} diff --git a/src/util/configuration.ts b/src/util/configuration.ts index d4b228f..9f74b71 100644 --- a/src/util/configuration.ts +++ b/src/util/configuration.ts @@ -1,21 +1,18 @@ -import type { TextDocument } from "vscode"; import { workspace } from "vscode"; import { isTesting } from "./isTesting"; interface Configuration { - formatCommentsOnSave: (document: TextDocument) => boolean; talonFormatter: { - columnWidth: (document: TextDocument) => number | undefined; + columnWidth: () => number | undefined; }; talonListFormatter: { - columnWidth: (document: TextDocument) => number | undefined; + columnWidth: () => number | undefined; }; } export const configuration: Configuration = (() => { if (isTesting) { return { - formatCommentsOnSave: () => false, talonFormatter: { columnWidth: () => 28 }, @@ -26,43 +23,19 @@ export const configuration: Configuration = (() => { } return { - formatCommentsOnSave: (document) => { - return getMyConfiguration(document, "formatCommentsOnSave") ?? false; - }, talonFormatter: { - columnWidth: (document) => { - return getMyConfiguration(document, "talonFormatter.columnWidth"); + columnWidth: () => { + return getConfiguration("talonFormatter.columnWidth"); } }, talonListFormatter: { - columnWidth: (document) => { - return getMyConfiguration(document, "talonListFormatter.columnWidth"); + columnWidth: () => { + return getConfiguration("talonListFormatter.columnWidth"); } } }; })(); -function getMyConfiguration(document: TextDocument, key: string): T | undefined { - return getConfiguration(document, "andreas", key); -} - -export function getConfiguration( - document: TextDocument, - section: string, - key: string -): T | undefined { - return ( - getLanguageConfiguration(document, section, key) ?? - workspace.getConfiguration(section).get(key) - ); -} - -function getLanguageConfiguration( - document: TextDocument, - section: string, - key: string -): T | undefined { - const langConfig = workspace.getConfiguration(`[${document.languageId}]`); - // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-return - return (langConfig as any)[`${section}.${key}`]; +function getConfiguration(key: string): T | undefined { + return workspace.getConfiguration("andreas").get(key); }