@@ -66,14 +66,32 @@ internal static StyleCopSettings GetStyleCopSettings(this AnalyzerOptions option
6666 return GetStyleCopSettings ( options != null ? options . AdditionalFiles : ImmutableArray . Create < AdditionalText > ( ) , failureBehavior , cancellationToken ) ;
6767 }
6868
69+ /// <summary>
70+ /// Gets a value indicating whether the specified path points to a StyleCop settings file (stylecop.json or .stylecop.json).
71+ /// </summary>
72+ /// <param name="path">The path to test.</param>
73+ /// <returns><c>true</c> if <paramref name="path"/> points to a StyleCop settings file; otherwise, <c>false</c>.</returns>
74+ internal static bool IsStyleCopSettingsFile ( string path )
75+ {
76+ var fileName = Path . GetFileName ( path ) . ToLowerInvariant ( ) ;
77+
78+ if ( fileName . StartsWith ( "." ) )
79+ {
80+ fileName = fileName . Substring ( 1 ) ;
81+ }
82+
83+ return fileName == SettingsFileName ;
84+ }
85+
6986 internal static StyleCopSettings GetStyleCopSettings ( this AnalysisContext context , AnalyzerOptions options , CancellationToken cancellationToken )
7087 {
7188 return GetStyleCopSettings ( context , options , DeserializationFailureBehavior . ReturnDefaultSettings , cancellationToken ) ;
7289 }
7390
7491 internal static StyleCopSettings GetStyleCopSettings ( this AnalysisContext context , AnalyzerOptions options , DeserializationFailureBehavior failureBehavior , CancellationToken cancellationToken )
7592 {
76- SourceText text = TryGetStyleCopSettingsText ( options , cancellationToken ) ;
93+ string settingsFileName ;
94+ SourceText text = TryGetStyleCopSettingsText ( options , cancellationToken , out settingsFileName ) ;
7795 if ( text == null )
7896 {
7997 return new StyleCopSettings ( ) ;
@@ -90,7 +108,7 @@ internal static StyleCopSettings GetStyleCopSettings(this AnalysisContext contex
90108 return settings ;
91109 }
92110
93- return GetStyleCopSettings ( SettingsFileName , text , failureBehavior ) ;
111+ return GetStyleCopSettings ( settingsFileName , text , failureBehavior ) ;
94112 }
95113
96114 internal static StyleCopSettings GetStyleCopSettings ( this CompilationStartAnalysisContext context , AnalyzerOptions options , CancellationToken cancellationToken )
@@ -102,7 +120,8 @@ internal static StyleCopSettings GetStyleCopSettings(this CompilationStartAnalys
102120 internal static StyleCopSettings GetStyleCopSettings ( this CompilationStartAnalysisContext context , AnalyzerOptions options , DeserializationFailureBehavior failureBehavior , CancellationToken cancellationToken )
103121#pragma warning restore RS1012 // Start action has no registered actions.
104122 {
105- SourceText text = TryGetStyleCopSettingsText ( options , cancellationToken ) ;
123+ string settingsFileName ;
124+ SourceText text = TryGetStyleCopSettingsText ( options , cancellationToken , out settingsFileName ) ;
106125 if ( text == null )
107126 {
108127 return new StyleCopSettings ( ) ;
@@ -119,7 +138,7 @@ internal static StyleCopSettings GetStyleCopSettings(this CompilationStartAnalys
119138 return settings ;
120139 }
121140
122- return GetStyleCopSettings ( SettingsFileName , text , failureBehavior ) ;
141+ return GetStyleCopSettings ( settingsFileName , text , failureBehavior ) ;
123142 }
124143
125144 private static StyleCopSettings GetStyleCopSettings ( string path , SourceText text , DeserializationFailureBehavior failureBehavior )
@@ -159,24 +178,28 @@ private static StyleCopSettings GetStyleCopSettings(string path, SourceText text
159178 return new StyleCopSettings ( ) ;
160179 }
161180
162- private static SourceText TryGetStyleCopSettingsText ( this AnalyzerOptions options , CancellationToken cancellationToken )
181+ private static SourceText TryGetStyleCopSettingsText ( this AnalyzerOptions options , CancellationToken cancellationToken , out string settingsFileName )
163182 {
164183 foreach ( var additionalFile in options . AdditionalFiles )
165184 {
166- if ( Path . GetFileName ( additionalFile . Path ) . ToLowerInvariant ( ) == SettingsFileName )
185+ if ( IsStyleCopSettingsFile ( additionalFile . Path ) )
167186 {
187+ settingsFileName = additionalFile . Path ;
188+
168189 return additionalFile . GetText ( cancellationToken ) ;
169190 }
170191 }
171192
193+ settingsFileName = null ;
194+
172195 return null ;
173196 }
174197
175198 private static StyleCopSettings GetStyleCopSettings ( ImmutableArray < AdditionalText > additionalFiles , DeserializationFailureBehavior failureBehavior , CancellationToken cancellationToken )
176199 {
177200 foreach ( var additionalFile in additionalFiles )
178201 {
179- if ( Path . GetFileName ( additionalFile . Path ) . ToLowerInvariant ( ) == SettingsFileName )
202+ if ( IsStyleCopSettingsFile ( additionalFile . Path ) )
180203 {
181204 SourceText additionalTextContent = additionalFile . GetText ( cancellationToken ) ;
182205 return GetStyleCopSettings ( additionalFile . Path , additionalTextContent , failureBehavior ) ;
0 commit comments