@@ -33,16 +33,28 @@ public ImmutableDictionary<ProjectId, AnalyzersAndFixers> GetAnalyzersAndFixers(
33
33
. Select ( path => new AnalyzerFileReference ( path , analyzerAssemblyLoader ) ) ;
34
34
35
35
var analyzersByLanguage = new Dictionary < string , AnalyzersAndFixers > ( ) ;
36
+
37
+ // We need AnalyzerReferenceInformationProvider to load all local project suppressors
38
+ var referenceProvider = new AnalyzerReferenceInformationProvider ( ) ;
39
+ var projectsReferenceAnalyzersAndFixers = referenceProvider . GetAnalyzersAndFixers ( workspace , solution , formatOptions , logger ) ;
40
+
36
41
return solution . Projects
37
42
. ToImmutableDictionary (
38
43
project => project . Id ,
39
44
project =>
40
45
{
41
46
if ( ! analyzersByLanguage . TryGetValue ( project . Language , out var analyzersAndFixers ) )
42
47
{
43
- var analyzers = references . SelectMany ( reference => reference . GetAnalyzers ( project . Language ) ) . ToImmutableArray ( ) ;
48
+ var analyzers = references . SelectMany ( reference => reference . GetAnalyzers ( project . Language ) ) ;
44
49
var codeFixes = AnalyzerFinderHelpers . LoadFixers ( references . Select ( reference => reference . GetAssembly ( ) ) , project . Language ) ;
45
- analyzersAndFixers = new AnalyzersAndFixers ( analyzers , codeFixes ) ;
50
+
51
+ // Add local project suppressors to global analyzers
52
+ if ( projectsReferenceAnalyzersAndFixers . TryGetValue ( project . Id , out var referenceAnalyzersAndFixers ) )
53
+ {
54
+ analyzers = referenceAnalyzersAndFixers . Analyzers . OfType < DiagnosticSuppressor > ( ) . Aggregate ( analyzers , ( current , suppressor ) => current . Append ( suppressor ) ) ;
55
+ }
56
+
57
+ analyzersAndFixers = new AnalyzersAndFixers ( analyzers . ToImmutableArray ( ) , codeFixes ) ;
46
58
analyzersByLanguage . Add ( project . Language , analyzersAndFixers ) ;
47
59
}
48
60
0 commit comments