@@ -10,8 +10,9 @@ namespace StyleCop.Analyzers.ReadabilityRules
1010 using Microsoft . CodeAnalysis . CSharp ;
1111 using Microsoft . CodeAnalysis . CSharp . Syntax ;
1212 using Microsoft . CodeAnalysis . Diagnostics ;
13- using SpacingRules ;
1413 using StyleCop . Analyzers . Helpers ;
14+ using StyleCop . Analyzers . Lightup ;
15+ using StyleCop . Analyzers . SpacingRules ;
1516
1617 /// <summary>
1718 /// The opening parenthesis or brace in a call to a C# method or indexer, or the declaration of a method or
@@ -51,6 +52,7 @@ internal class SA1110OpeningParenthesisMustBeOnDeclarationLine : DiagnosticAnaly
5152 new DiagnosticDescriptor ( DiagnosticId , Title , MessageFormat , AnalyzerCategory . ReadabilityRules , DiagnosticSeverity . Warning , AnalyzerConstants . EnabledByDefault , Description , HelpLink ) ;
5253
5354 private static readonly Action < SyntaxNodeAnalysisContext > MethodDeclarationAction = HandleMethodDeclaration ;
55+ private static readonly Action < SyntaxNodeAnalysisContext > LocalFunctionStatementAction = HandleLocalFunctionStatement ;
5456 private static readonly Action < SyntaxNodeAnalysisContext > ConstructorDeclarationAction = HandleConstructorDeclaration ;
5557 private static readonly Action < SyntaxNodeAnalysisContext > InvocationExpressionAction = HandleInvocationExpression ;
5658 private static readonly Action < SyntaxNodeAnalysisContext > ObjectCreationExpressionAction = HandleObjectCreationExpression ;
@@ -74,6 +76,7 @@ public override void Initialize(AnalysisContext context)
7476 context . EnableConcurrentExecution ( ) ;
7577
7678 context . RegisterSyntaxNodeAction ( MethodDeclarationAction , SyntaxKind . MethodDeclaration ) ;
79+ context . RegisterSyntaxNodeAction ( LocalFunctionStatementAction , SyntaxKindEx . LocalFunctionStatement ) ;
7780 context . RegisterSyntaxNodeAction ( ConstructorDeclarationAction , SyntaxKind . ConstructorDeclaration ) ;
7881 context . RegisterSyntaxNodeAction ( InvocationExpressionAction , SyntaxKind . InvocationExpression ) ;
7982 context . RegisterSyntaxNodeAction ( ObjectCreationExpressionAction , SyntaxKind . ObjectCreationExpression ) ;
@@ -313,6 +316,18 @@ private static void HandleMethodDeclaration(SyntaxNodeAnalysisContext context)
313316 }
314317 }
315318
319+ private static void HandleLocalFunctionStatement ( SyntaxNodeAnalysisContext context )
320+ {
321+ var localFunctionStatement = ( LocalFunctionStatementSyntaxWrapper ) context . Node ;
322+ if ( localFunctionStatement . ParameterList != null
323+ && ! localFunctionStatement . ParameterList . OpenParenToken . IsMissing
324+ && ! localFunctionStatement . Identifier . IsMissing )
325+ {
326+ bool preserveLayout = localFunctionStatement . ParameterList . Parameters . Any ( ) ;
327+ CheckIfLocationOfPreviousTokenAndOpenTokenAreTheSame ( context , localFunctionStatement . ParameterList . OpenParenToken , preserveLayout ) ;
328+ }
329+ }
330+
316331 private static void CheckIfLocationOfPreviousTokenAndOpenTokenAreTheSame ( SyntaxNodeAnalysisContext context , SyntaxToken openToken , bool preserveLayout )
317332 {
318333 var previousToken = openToken . GetPreviousToken ( ) ;
0 commit comments