示例#1
0
        public void AppendDiagnostics(IEnumerable <Diagnostic> diagnosticResults)
        {
            if (_exporters.Count == 0)
            {
                return;
            }

            foreach (var diagnostic in diagnosticResults)
            {
                var location          = diagnostic.Location;
                var lineNumber        = 0;
                var characterPosition = 0;
                var fileName          = string.Empty;

                if (location != Location.None)
                {
                    var locationSpan = location.SourceSpan;
                    var lineSpan     = location.SourceTree.GetLineSpan(locationSpan);
                    lineNumber        = lineSpan.StartLinePosition.Line;
                    characterPosition = lineSpan.StartLinePosition.Character;
                    fileName          = location.SourceTree?.FilePath;
                }

                var diagnosticInfo = new DiagnosticInfo
                {
                    Id                = diagnostic.Id,
                    Message           = diagnostic.GetMessage(),
                    FileName          = fileName,
                    LineNumber        = lineNumber,
                    CharacterPosition = characterPosition,
                    Severity          = (DiagnosticInfo.DiagnosticInfoSeverity)diagnostic.Severity,
                    VersionSpan       = DiagnosticDescriptors.GetVersion(diagnostic.Descriptor)
                };

                foreach (var exporter in _exporters)
                {
                    exporter.AppendDiagnostic(diagnosticInfo);
                }
            }
        }