@@ -33,16 +33,28 @@ public ImmutableDictionary<ProjectId, AnalyzersAndFixers> GetAnalyzersAndFixers(
3333 . Select ( path => new AnalyzerFileReference ( path , analyzerAssemblyLoader ) ) ;
3434
3535 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+
3641 return solution . Projects
3742 . ToImmutableDictionary (
3843 project => project . Id ,
3944 project =>
4045 {
4146 if ( ! analyzersByLanguage . TryGetValue ( project . Language , out var analyzersAndFixers ) )
4247 {
43- var analyzers = references . SelectMany ( reference => reference . GetAnalyzers ( project . Language ) ) . ToImmutableArray ( ) ;
48+ var analyzers = references . SelectMany ( reference => reference . GetAnalyzers ( project . Language ) ) ;
4449 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 ) ;
4658 analyzersByLanguage . Add ( project . Language , analyzersAndFixers ) ;
4759 }
4860
0 commit comments