| import * as vscode from 'vscode'; |
| import * as fs from 'fs'; |
| |
| interface LITTaskDefinition extends vscode.TaskDefinition { |
| /** |
| * The task name |
| */ |
| task: string; |
| } |
| |
| export class LITTaskProvider implements vscode.TaskProvider { |
| static LITType: string = 'llvm-lit'; |
| private cmd: string; |
| private args: string[] = []; |
| private litPromise: Thenable<vscode.Task[]> | undefined = undefined; |
| |
| constructor() { |
| const isWindows = process.platform === 'win32'; |
| if (isWindows) { |
| this.cmd = "py" |
| this.args = ["-3", "${config:cmake.buildDirectory}\\bin\\llvm-lit.py", "-vv"] |
| } else { |
| this.cmd = "python3" |
| this.args = ["${config:cmake.buildDirectory}/bin/llvm-lit", "-vv"] |
| } |
| } |
| |
| public provideTasks(): Thenable<vscode.Task[]> | undefined { |
| if (!this.litPromise) { |
| this.litPromise = this.getLITTasks(); |
| } |
| return this.litPromise; |
| } |
| |
| public resolveTask(_task: vscode.Task): vscode.Task | undefined { |
| const task = _task.definition.task; |
| if (task) { |
| let args: string[] = this.args; |
| const definition: LITTaskDefinition = <any>_task.definition; |
| if (definition.task === 'llvm-lit file') { |
| args.push("${file}") |
| } else if (definition.task === 'llvm-lit directory') { |
| args.push("${fileDirname}") |
| } |
| |
| return new vscode.Task( |
| definition, |
| definition.task, |
| 'llvm', |
| new vscode.ShellExecution(this.cmd, args), |
| ["$llvm-lit", "$llvm-filecheck"] |
| ); |
| } |
| return undefined; |
| } |
| |
| private async getLITTasks(): Promise<vscode.Task[]> { |
| let result: vscode.Task[] = []; |
| |
| let bld_dir: string | undefined = vscode.workspace.getConfiguration().get("cmake.buildDirectory"); |
| if (bld_dir == undefined || !fs.existsSync(bld_dir)) { |
| return result; |
| } |
| |
| let taskName = 'llvm-lit file'; |
| result.push(new vscode.Task({ type: 'llvm-lit', task: taskName }, |
| taskName, 'llvm', |
| new vscode.ShellExecution(this.cmd, this.args.concat(["${file}"])), |
| ["$llvm-lit", "$llvm-filecheck"])); |
| |
| taskName = 'llvm-lit directory'; |
| result.push(new vscode.Task({ type: 'llvm-lit', task: taskName }, |
| taskName, 'llvm', |
| new vscode.ShellExecution(this.cmd, this.args.concat(["${fileDirname}"])), |
| ["$llvm-lit", "$llvm-filecheck"]) |
| ); |
| return result; |
| } |
| } |