From b868d88a850e96e80ce5185f3ec5d6e2bc8598e0 Mon Sep 17 00:00:00 2001 From: Vitalii Elenhaupt Date: Fri, 12 Jul 2019 23:33:08 +0300 Subject: [PATCH] CyclomaticCompexity: report onle def name --- .../rule/metrics/cyclomatic_complexity_spec.cr | 4 ++-- src/ameba/rule/metrics/cyclomatic_complexity.cr | 14 ++++++++++++-- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/spec/ameba/rule/metrics/cyclomatic_complexity_spec.cr b/spec/ameba/rule/metrics/cyclomatic_complexity_spec.cr index 3d771127..bc81fc7d 100644 --- a/spec/ameba/rule/metrics/cyclomatic_complexity_spec.cr +++ b/spec/ameba/rule/metrics/cyclomatic_complexity_spec.cr @@ -33,8 +33,8 @@ module Ameba::Rule::Metrics issue = source.issues.first issue.rule.should eq subject - issue.location.to_s.should eq "source.cr:1:1" - issue.end_location.to_s.should eq "source.cr:12:3" + issue.location.to_s.should eq "source.cr:1:5" + issue.end_location.to_s.should eq "source.cr:1:10" issue.message.should eq "Cyclomatic complexity too high [8/5]" end diff --git a/src/ameba/rule/metrics/cyclomatic_complexity.cr b/src/ameba/rule/metrics/cyclomatic_complexity.cr index 9c1e0f89..138e4d5e 100644 --- a/src/ameba/rule/metrics/cyclomatic_complexity.cr +++ b/src/ameba/rule/metrics/cyclomatic_complexity.cr @@ -24,9 +24,19 @@ module Ameba::Rule::Metrics def test(source, node : Crystal::Def) complexity = AST::CountingVisitor.new(node).count - if complexity > max_complexity - issue_for(node, MSG % {complexity, max_complexity}) + if complexity > max_complexity && (location = node.name_location) + issue_for( + location, + def_name_end_location(node), + MSG % {complexity, max_complexity} + ) end end + + private def def_name_end_location(node) + return unless location = node.name_location + line_number, column_number = location.line_number, location.column_number + Crystal::Location.new(location.filename, line_number, column_number + node.name.size) + end end end