/// <summary> /// 指定の<see cref="DiagnosticAnalyzer"/>でドキュメントを診断した結果を取得します。 /// </summary> /// <param name="analyzer">テスト対象の<see cref="DiagnosticAnalyzer"/></param> /// <param name="documents">解析対象のドキュメント一覧</param> /// <returns>ソースコードの位置でソートされた診断結果の一覧</returns> protected static Diagnostic[] GetSortedDiagnosticsFromDocuments(DiagnosticAnalyzer analyzer, Document[] documents) { return documents .Select(document => document.Project) .Distinct() .SelectMany(project => project.GetCompilationAsync().Result.WithAnalyzers(ImmutableArray.Create(analyzer)).GetAnalyzerDiagnosticsAsync().Result) .Where(diag => { if (diag.Location == Location.None || diag.Location.IsInMetadata) { return true; } return documents .Select(document => document.GetSyntaxTreeAsync().Result) .Any(tree => tree == diag.Location.SourceTree); }) .OrderBy(diag => diag.Location.SourceSpan.Start) .ToArray(); }