-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathonsaverunner.ts
33 lines (25 loc) · 1.07 KB
/
onsaverunner.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
import * as vscode from 'vscode'
import { LanguageConfig, alloglot } from './config'
import { AsyncProcess, Disposal } from './utils'
export function makeOnSaveRunner(output: vscode.OutputChannel, config: LanguageConfig): vscode.Disposable {
const { languageId, onSaveCommand } = config
if (!languageId || !onSaveCommand) return vscode.Disposable.from()
const disposal = Disposal.make()
const basedir = vscode.workspace.workspaceFolders?.[0].uri
output.appendLine(alloglot.ui.registeringOnSaveCommand)
const onSaveWatcher = (() => {
if (!onSaveCommand) return vscode.Disposable.from()
const refreshTags = (doc: vscode.TextDocument) => {
if (doc.languageId === languageId) {
const command = onSaveCommand.replace('${file}', doc.fileName)
disposal.insert(AsyncProcess.exec({ output, command, basedir }, () => undefined).disposable)
}
}
return vscode.workspace.onDidSaveTextDocument(refreshTags)
})()
output.appendLine(alloglot.ui.registeredOnSaveCommand)
return vscode.Disposable.from(
disposal,
onSaveWatcher
)
}