protected void CheckComplexity <TSyntax>(SyntaxNodeAnalysisContext context, Func <TSyntax, Location> getLocation, Func <TSyntax, SyntaxNode> getNodeToCheck, string declarationType)
            where TSyntax : SyntaxNode
        {
            var node = (TSyntax)context.Node;

            var nodeToCheck = getNodeToCheck(node);

            if (nodeToCheck == null)
            {
                return;
            }

            var complexityMetric = CSharpCyclomaticComplexityMetric.GetComplexity(nodeToCheck);

            if (complexityMetric.Complexity > Maximum)
            {
                context.ReportDiagnosticWhenActive(
                    Diagnostic.Create(
                        rule,
                        getLocation(node),
                        complexityMetric.Locations.ToAdditionalLocations(),
                        complexityMetric.Locations.ToProperties(),
                        new object[] { Maximum, complexityMetric.Complexity, declarationType }));
            }
        }
Exemple #2
0
        static void Main(string[] args)
        {
            using (var reader = new StreamReader(args[0]))
            {
                var tree = CSharpSyntaxTree.ParseText(reader.ReadToEnd());
                var root = tree.GetCompilationUnitRoot();

                var methods = root.DescendantNodes()
                              .OfType <MethodDeclarationSyntax>();

                foreach (var m in methods)
                {
                    var c = CSharpCyclomaticComplexityMetric.GetComplexity(m);

                    Console.WriteLine("{0},{1}", m.Identifier, c.Complexity);
                }
            }
        }