public void UseStaticCheck(Action <StaticCheckOption> option = null) { var staticCheckOption = new StaticCheckOption(); option?.Invoke(staticCheckOption); buildOption.StaticCheckOption = staticCheckOption; }
private async Task <string> StaticCheck(StaticCheckOption checker) { using (var sta = new Process { StartInfo = new ProcessStartInfo { Arguments = checker.Args, ErrorDialog = false, FileName = checker.Exec, RedirectStandardError = checker.ReadStdError, RedirectStandardOutput = checker.ReadStdOutput, UseShellExecute = false, WorkingDirectory = _workingdir } }) { try { sta.Start(); StringBuilder output = new StringBuilder(); if (!sta.WaitForExit(30 * 1000)) { try { sta.Kill(); } catch { /* ignored */ } } if (checker.ReadStdOutput) { var temp = (await sta.StandardOutput.ReadToEndAsync()).Trim(); if (!string.IsNullOrWhiteSpace(temp)) { output.AppendLine(temp); } } if (checker.ReadStdError) { var temp = (await sta.StandardError.ReadToEndAsync()).Trim(); if (!string.IsNullOrWhiteSpace(temp)) { output.AppendLine(temp); } } var log = MatchProblem(output.ToString(), checker.ProblemMatcher) .Replace(_workingdir, "...") .Replace(_workingdir.Replace("/", "\\"), "..."); try { sta.Kill(); } catch { /* ignored */ } return(sta.ExitCode == 0 ? log : null); } catch (Exception ex) { return(ex.Message); } } }