import { injectable } from "inversify"; import { PackageDependencies } from "./_base/Dependence"; import { goVersionParser } from "./go/GoVersionParser"; import { BaseBuildToolProvider } from "./_base/BaseBuildToolProvider"; import { GoModDependencyInspector } from "./go/GoModDependencyInspector"; @injectable() export class GoBuildToolProvider extends BaseBuildToolProvider { moduleTarget: string[] = ["go.mod"]; getToolingName(): string { return "Go Mod"; } /** * Execute `go version`, then parse results, and return the version of the Go tooling. * * the return example: `go version go1.16.3 darwin/amd64` * */ getToolingVersion(): Promise { let versionInfo: Promise = new Promise((resolve, reject) => { const exec = require("child_process").exec; exec("go version", (error: any, stdout: any, stderr: any) => { if (error) { reject(error); } resolve(stdout); }); }); // Parse the version info use regex return versionInfo.then((stdout) => { return goVersionParser(stdout); }); } async getDependencies(): Promise { const source = await this.getTargetContent(this.moduleTarget[0]); return new GoModDependencyInspector().parseDependency(source)[0] || { dependencies: [] }; } getTasks(): Promise { throw new Error("Method not implemented."); } }