Ejemplo n.º 1
0
        private void AnalyzeSyntaxNode(SyntaxNodeAnalysisContext syntaxContext, SwifterSharpContext swifterSharpContext)
        {
            var invocation = (InvocationExpressionSyntax)syntaxContext.Node;

            var symbolInfo = syntaxContext.SemanticModel.GetSymbolInfo(invocation, syntaxContext.CancellationToken);

            if (symbolInfo.Symbol?.Kind != SymbolKind.Method)
            {
                return;
            }

            var methodSymbol     = (IMethodSymbol)symbolInfo.Symbol;
            var methodAttributes = methodSymbol.GetAttributes();

            if (!methodAttributes.ContainsAttributeType(swifterSharpContext.AttributesContext.ForceNamedArgumentsAttribute))
            {
                return;
            }

            if (invocation.ArgumentList.Arguments.All(x => x.IsNamed()))
            {
                return;
            }

            var diagnostic = Diagnostic.Create(_descriptor, invocation.GetLocation(), methodSymbol.Name,
                                               swifterSharpContext.AttributesContext.ForceNamedArgumentsAttribute.Name);

            syntaxContext.ReportDiagnostic(diagnostic);
        }
Ejemplo n.º 2
0
 private void AnalyzeCompilation(CompilationStartAnalysisContext compilationStartContext, SwifterSharpContext context)
 {
     compilationStartContext.RegisterSyntaxNodeAction(syntaxNodeContext => AnalyzeSyntaxNode(syntaxNodeContext, context), SyntaxKind.InvocationExpression);
 }