diff --git a/src/extension.ts b/src/extension.ts index 9e25734..a3e00ab 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -6,7 +6,7 @@ import * as micromatch from 'micromatch'; import StylesProvider from './providers/styles'; import EmbeddedProvider from './providers/embedded'; -import { IPluginSettings } from './types'; +import { IPluginSettings, IStyleBlock } from './types'; let output: vscode.OutputChannel; @@ -24,6 +24,19 @@ function showOutput(msg: string): void { output.show(); } +function formatEditor(editor:vscode.TextEditor, provider:EmbeddedProvider|StylesProvider):Promise { + return provider.format().then((blocks) => { + editor.edit((builder) => { + blocks.forEach((block) => { + if (block.error) { + showOutput(block.error.toString()); + } + builder.replace(block.range, block.content); + }); + }); + }).catch((err: Error) => showOutput(err.stack)); +} + function getProvider(document: vscode.TextDocument, selection: vscode.Selection, workspace: string, filepath: string, settings: IPluginSettings) { const stylesProvider = new StylesProvider(document, selection, document.languageId, workspace, filepath, settings); const embeddedProvider = new EmbeddedProvider(document, document.languageId, workspace, filepath, settings); @@ -59,17 +72,7 @@ export function activate(context: vscode.ExtensionContext) { return showOutput(`We do not support "${document.languageId}" syntax.`); } - provider.format().then((blocks) => { - textEditor.edit((builder) => { - blocks.forEach((block) => { - if (block.error) { - showOutput(block.error.toString()); - } - - builder.replace(block.range, block.content); - }); - }); - }).catch((err: Error) => showOutput(err.stack)); + formatEditor(textEditor, provider); }); const onSave = vscode.workspace.onWillSaveTextDocument((event) => { @@ -109,16 +112,22 @@ export function activate(context: vscode.ExtensionContext) { } } - const actions = provider.format().then((blocks) => { - return blocks.map((block) => { - if (block.error) { - showOutput(block.error.toString()); - } - - return vscode.TextEdit.replace(block.range, block.content); - }); - }).catch((err: Error) => showOutput(err.stack)); + let actions; + const editor:vscode.TextEditor = vscode.window.visibleTextEditors.find( editor => editor.document == document); + if ( editor ) { + actions = formatEditor(editor, provider); + } + else { + actions = provider.format().then((blocks: IStyleBlock[]) => { + return blocks.map((block) => { + if (block.error) { + showOutput(block.error.toString()); + } + return vscode.TextEdit.replace(block.range, block.content); + }); + }).catch((err: Error) => showOutput(err.stack)); + } event.waitUntil(actions); });