private List<TestComplexityComponent> components(String functionBody) throws Exception { FunctionTree tree = parse("function f() { " + functionBody + " }", PHPLexicalGrammar.FUNCTION_DECLARATION); CognitiveComplexity complexity = CognitiveComplexityVisitor.complexity(tree); return complexity.getComplexityComponents().stream().map(TestComplexityComponent::create).collect(Collectors.toList()); }
private int complexity(String functionBody) throws Exception { FunctionTree tree = parse("function f() { " + functionBody + " }", PHPLexicalGrammar.FUNCTION_DECLARATION); CognitiveComplexity complexity = CognitiveComplexityVisitor.complexity(tree); return complexity.getValue(); }
@Test public void file_complexity_is_sum_of_functions() throws Exception { File file = new File("src/test/resources/metrics/file_cognitive_complexity.php"); ActionParser<Tree> p = PHPParserBuilder.createParser(PHPLexicalGrammar.COMPILATION_UNIT); CompilationUnitTree cut = (CompilationUnitTree) p.parse(file); int complexity = CognitiveComplexityVisitor.complexity(cut); assertThat(complexity).isEqualTo( 1 // foo + 3 // bar (incl. qix) + 2 // gul (incl. function expression) + 1 // dom + 1 // $func function expression + 4 // rest of the script ); }
private void checkFunctionComplexity(FunctionTree functionTree) { CognitiveComplexity complexity = CognitiveComplexityVisitor.complexity(functionTree); if (complexity.getValue() > threshold) { String message = String.format(MESSAGE, complexity.getValue(), threshold); int cost = complexity.getValue() - threshold; PreciseIssue issue = context().newIssue(this, (functionTree).functionToken(), message).cost(cost); complexity.getComplexityComponents().forEach(complexityComponent -> issue.secondary( complexityComponent.tree(), secondaryMessage(complexityComponent.addedComplexity()))); } }
private void checkFunctionComplexity(FunctionTree functionTree) { CognitiveComplexity complexity = CognitiveComplexityVisitor.complexity(functionTree); if (complexity.getValue() > threshold) { String message = String.format(MESSAGE, complexity.getValue(), threshold); int cost = complexity.getValue() - threshold; PreciseIssue issue = context().newIssue(this, (functionTree).functionToken(), message).cost(cost); complexity.getComplexityComponents().forEach(complexityComponent -> issue.secondary( complexityComponent.tree(), secondaryMessage(complexityComponent.addedComplexity()))); } }
@Override public void visitNode(Tree tree) { if (tree.is(Kind.COMPILATION_UNIT)) { fileMeasures.setFileComplexity(ComplexityVisitor.complexity(tree)); fileMeasures.setFileCognitiveComplexity(CognitiveComplexityVisitor.complexity((CompilationUnitTree) tree)); } else if (tree.is(CLASS_NODES)) { fileMeasures.addClassComplexity(ComplexityVisitor.complexity(tree)); } else if (tree.is(FUNCTION_NODES)) { fileMeasures.addFunctionComplexity(ComplexityVisitor.complexity(tree)); } }
@Override public void visitNode(Tree tree) { if (tree.is(Kind.COMPILATION_UNIT)) { fileMeasures.setFileComplexity(ComplexityVisitor.complexity(tree)); fileMeasures.setFileCognitiveComplexity(CognitiveComplexityVisitor.complexity((CompilationUnitTree) tree)); } else if (tree.is(CLASS_NODES)) { fileMeasures.addClassComplexity(ComplexityVisitor.complexity(tree)); } else if (tree.is(FUNCTION_NODES)) { fileMeasures.addFunctionComplexity(ComplexityVisitor.complexity(tree)); } }