public override IEnumerable <IIssue> ReadIssues( MsBuildIssuesProvider issueProvider, IRepositorySettings repositorySettings, MsBuildIssuesSettings issueProviderSettings) { throw new NotImplementedException(); }
public MsBuildIssuesProvider Create() { var provider = new MsBuildIssuesProvider(this.Log, this.MsBuildIssuesSettings); provider.Initialize(this.RepositorySettings); return(provider); }
public MsBuildIssuesProvider Create() { var provider = new MsBuildIssuesProvider(this.Log, this.Settings); provider.Initialize(this.PrcaSettings); return(provider); }
/// <inheritdoc/> public override IEnumerable <IIssue> ReadIssues( MsBuildIssuesProvider issueProvider, IssueCommentFormat format, RepositorySettings repositorySettings, MsBuildIssuesSettings issueProviderSettings) { #pragma warning disable SA1123 // Do not place regions within elements #region DupFinder Exclusion #pragma warning restore SA1123 // Do not place regions within elements issueProvider.NotNull(nameof(issueProvider)); repositorySettings.NotNull(nameof(repositorySettings)); issueProviderSettings.NotNull(nameof(issueProviderSettings)); #endregion var result = new List <IIssue>(); var binLogReader = new BinLogReader(); foreach (var record in binLogReader.ReadRecords(issueProviderSettings.LogFileContent)) { var buildEventArgs = record.Args; if (buildEventArgs is BuildWarningEventArgs buildWarning) { var projectFileRelativePath = this.GetProject(buildWarning, repositorySettings); // Read affected file from the warning. if (!this.TryGetFile(buildWarning, repositorySettings, out string fileName)) { continue; } var line = GetLine(buildWarning); var rule = buildWarning.Code; // Determine rule URL. Uri ruleUrl = null; if (!string.IsNullOrWhiteSpace(rule)) { ruleUrl = MsBuildRuleUrlResolver.Instance.ResolveRuleUrl(rule); } // Build issue. result.Add( IssueBuilder .NewIssue(buildWarning.Message, issueProvider) .WithPriority(IssuePriority.Warning) .InProject(projectFileRelativePath, System.IO.Path.GetFileNameWithoutExtension(projectFileRelativePath)) .InFile(fileName, line) .OfRule(rule, ruleUrl) .Create()); } } return(result); }
/// <summary> /// Returns an issue for values from an MsBuild log. /// </summary> /// <param name="priority">Priority of the issue.</param> /// <param name="message">Raw value from the MsBuild log containing the message.</param> /// <param name="projectFile">Raw value from the MsBuild log containing the project file.</param> /// <param name="file">Raw value from the MsBuild log containing the file.</param> /// <param name="lineNumber">Raw value from the MsBuild log containing the line number.</param> /// <param name="endLineNumber">Raw value from the MsBuild log containing the end of the line range.</param> /// <param name="columnNumber">Raw value from the MsBuild log containing the column.</param> /// <param name="endColumnNumber">Raw value from the MsBuild log containing the end of the column range.</param> /// <param name="code">Raw value from the MsBuild log containing the rule.</param> /// <param name="issueProvider">Issue provider instance.</param> /// <param name="repositorySettings">Repository settings to use.</param> /// <returns>Issue instance or null, if the values could not be parsed.</returns> private IIssue GetIssue( IssuePriority priority, string message, string projectFile, string file, int lineNumber, int endLineNumber, int columnNumber, int endColumnNumber, string code, MsBuildIssuesProvider issueProvider, IRepositorySettings repositorySettings) { // Ignore warnings or errors without a message. if (string.IsNullOrWhiteSpace(message)) { this.Log.Verbose("Skip element since it doesn't contain a message"); return(null); } var projectFileRelativePath = this.GetProject(projectFile, repositorySettings); // Read affected file from the warning or error. var(result, fileName) = this.TryGetFile(file, projectFile, repositorySettings); if (!result) { this.Log.Information("Skip element since file path could not be parsed"); return(null); } var line = GetLine(lineNumber); var endLine = GetLine(endLineNumber); var column = GetColumn(columnNumber); var endColumn = GetColumn(endColumnNumber); var rule = code; // Determine rule URL. Uri ruleUrl = null; if (!string.IsNullOrWhiteSpace(rule)) { ruleUrl = MsBuildRuleUrlResolver.Instance.ResolveRuleUrl(rule); } // Build issue. return (IssueBuilder .NewIssue(message, issueProvider) .WithPriority(priority) .InProject(projectFileRelativePath, System.IO.Path.GetFileNameWithoutExtension(projectFileRelativePath)) .InFile(fileName, line, endLine, column, endColumn) .OfRule(rule, ruleUrl) .Create()); }
/// <summary> /// Returns an issue for a build warning. /// </summary> /// <param name="buildWarning">Warning for which the issue should be returned.</param> /// <param name="issueProvider">Issue provider instance.</param> /// <param name="repositorySettings">Repository settings to use.</param> /// <returns>Issue instance or null, if the <paramref name="buildWarning"/> could not be parsed.</returns> private IIssue GetIssue( BuildWarningEventArgs buildWarning, MsBuildIssuesProvider issueProvider, IRepositorySettings repositorySettings) { return (this.GetIssue( IssuePriority.Warning, buildWarning.Message, buildWarning.ProjectFile, buildWarning.File, buildWarning.LineNumber, buildWarning.EndLineNumber, buildWarning.ColumnNumber, buildWarning.EndColumnNumber, buildWarning.Code, issueProvider, repositorySettings)); }
/// <inheritdoc/> public override IEnumerable <IIssue> ReadIssues( MsBuildIssuesProvider issueProvider, IRepositorySettings repositorySettings, MsBuildIssuesSettings issueProviderSettings) { #pragma warning disable SA1123 // Do not place regions within elements #region DupFinder Exclusion #pragma warning restore SA1123 // Do not place regions within elements issueProvider.NotNull(nameof(issueProvider)); repositorySettings.NotNull(nameof(repositorySettings)); issueProviderSettings.NotNull(nameof(issueProviderSettings)); #endregion var result = new List <IIssue>(); var binLogReader = new BinLogReader(); foreach (var record in binLogReader.ReadRecords(issueProviderSettings.LogFileContent)) { var buildEventArgs = record.Args; IIssue issue = null; if (buildEventArgs is BuildErrorEventArgs buildError) { issue = this.GetIssue(buildError, issueProvider, repositorySettings); } else if (buildEventArgs is BuildWarningEventArgs buildWarning) { issue = this.GetIssue(buildWarning, issueProvider, repositorySettings); } if (issue == null) { continue; } result.Add(issue); } return(result); }
/// <summary> /// Returns an issue for a build error. /// </summary> /// <param name="buildError">Error for which the issue should be returned.</param> /// <param name="issueProvider">Issue provider instance.</param> /// <param name="repositorySettings">Repository settings to use.</param> /// <returns>Issue instance or null, if the <paramref name="buildError"/> could not be parsed.</returns> private IIssue GetIssue( BuildErrorEventArgs buildError, MsBuildIssuesProvider issueProvider, IRepositorySettings repositorySettings) { this.Log.Verbose("Process error '{0}'...", buildError.Message); return (this.GetIssue( IssuePriority.Error, buildError.Message, buildError.ProjectFile, buildError.File, buildError.LineNumber, buildError.EndLineNumber, buildError.ColumnNumber, buildError.EndColumnNumber, buildError.Code, issueProvider, repositorySettings)); }
/// <inheritdoc/> public override IEnumerable <IIssue> ReadIssues( MsBuildIssuesProvider issueProvider, IRepositorySettings repositorySettings, MsBuildIssuesSettings issueProviderSettings) { #pragma warning disable SA1123 // Do not place regions within elements #region DupFinder Exclusion #pragma warning restore SA1123 // Do not place regions within elements issueProvider.NotNull(nameof(issueProvider)); repositorySettings.NotNull(nameof(repositorySettings)); issueProviderSettings.NotNull(nameof(issueProviderSettings)); #endregion var result = new List <IIssue>(); // Read log file. var raw = issueProviderSettings.LogFileContent.ToStringUsingEncoding(true); var filtered = string.Concat(raw.Where(c => !char.IsControl(c))); var logDocument = XDocument.Parse(filtered); // Loop through all warning and error tags. var elements = new List <XElement>(logDocument.Descendants("warning")); elements.AddRange(logDocument.Descendants("error")); foreach (var element in elements) { // Ignore warnings or errors without a message. if (string.IsNullOrWhiteSpace(element.Value)) { continue; } // Read affected project from the warning or error. if (!this.TryGetProject(element, repositorySettings, out string projectFileRelativePath)) { continue; } // Read affected file from the warning or error. if (!this.TryGetFile(element, repositorySettings, out string fileName)) { continue; } // Read affected line from the warning or error. if (!TryGetLine(element, out var line)) { continue; } // Read affected column from the warning or error. if (!TryGetColumn(element, out var column)) { continue; } // Read rule code from the warning or error. if (!TryGetRule(element, out string rule)) { continue; } // Determine rule URL. Uri ruleUrl = null; if (!string.IsNullOrWhiteSpace(rule)) { ruleUrl = MsBuildRuleUrlResolver.Instance.ResolveRuleUrl(rule); } var priority = element.Name.LocalName == "error" ? IssuePriority.Error : IssuePriority.Warning; // Build issue. result.Add( IssueBuilder .NewIssue(element.Value, issueProvider) .WithPriority(priority) .InProject(projectFileRelativePath, System.IO.Path.GetFileNameWithoutExtension(projectFileRelativePath)) .InFile(fileName, line, column) .OfRule(rule, ruleUrl) .Create()); } return(result); }
/// <inheritdoc/> public override IEnumerable <IIssue> ReadIssues( MsBuildIssuesProvider issueProvider, IssueCommentFormat format, RepositorySettings repositorySettings, MsBuildIssuesSettings issueProviderSettings) { #pragma warning disable SA1123 // Do not place regions within elements #region DupFinder Exclusion #pragma warning restore SA1123 // Do not place regions within elements issueProvider.NotNull(nameof(issueProvider)); repositorySettings.NotNull(nameof(repositorySettings)); issueProviderSettings.NotNull(nameof(issueProviderSettings)); #endregion var result = new List <IIssue>(); // Read log file. var logDocument = XDocument.Parse(issueProviderSettings.LogFileContent.ToStringUsingEncoding(true)); // Loop through all warning tags. foreach (var warning in logDocument.Descendants("warning")) { // Read affected project from the warning. if (!this.TryGetProject(warning, repositorySettings, out string projectFileRelativePath)) { continue; } // Read affected file from the warning. if (!this.TryGetFile(warning, repositorySettings, out string fileName)) { continue; } // Read affected line from the warning. if (!TryGetLine(warning, out var line)) { continue; } // Read rule code from the warning. if (!TryGetRule(warning, out string rule)) { continue; } // Determine rule URL. Uri ruleUrl = null; if (!string.IsNullOrWhiteSpace(rule)) { ruleUrl = MsBuildRuleUrlResolver.Instance.ResolveRuleUrl(rule); } // Build issue. result.Add( IssueBuilder .NewIssue(warning.Value, issueProvider) .WithPriority(IssuePriority.Warning) .InProject(projectFileRelativePath, System.IO.Path.GetFileNameWithoutExtension(projectFileRelativePath)) .InFile(fileName, line) .OfRule(rule, ruleUrl) .Create()); } return(result); }