mccabe 0.2.0 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bin/mccabe +6 -8
- data/lib/mccabe/analyzer.rb +10 -4
- data/lib/mccabe/analyzer/method_info.rb +18 -0
- data/lib/mccabe/cli.rb +7 -4
- data/lib/mccabe/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4b4261f514ab469d8844d7bbee617a65e14073c5
|
4
|
+
data.tar.gz: 4d7d947c352831abfcb7973b22dd2e22804ed2c9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1d78cafa498665ed5b4278f14cbf1da9b9df48726a4ab08e063ad199b06c17778b76568879d4489f52d34c8ac1f140481d289eb59197e2b22a995853e70151b3
|
7
|
+
data.tar.gz: 157508b3503e9025421226c8de04dbdd5fff0ae57cd9eedbd584aea636807123c901a8a309157916d0484230554b28b1ba466c448bed045bb1b2511aacd1d82c
|
data/bin/mccabe
CHANGED
@@ -2,7 +2,6 @@
|
|
2
2
|
|
3
3
|
require 'mccabe/analyzer'
|
4
4
|
require 'mccabe/cli'
|
5
|
-
require 'mccabe/parser'
|
6
5
|
|
7
6
|
options = McCabe::CLI.new.parse!(ARGV)
|
8
7
|
|
@@ -12,12 +11,11 @@ if ARGV.empty?
|
|
12
11
|
end
|
13
12
|
|
14
13
|
results = McCabe::CLI.get_all_files(ARGV).map do |file|
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
end
|
14
|
+
methods = McCabe::Analyzer.analyze(file)
|
15
|
+
methods.keep_if { |m| m.complexity > options[:threshold] }
|
16
|
+
end.flatten
|
17
|
+
|
18
|
+
options[:sort] && results.sort_by! { |m| -m.complexity }
|
19
|
+
options[:quiet] || McCabe::CLI.display_results(results)
|
22
20
|
|
23
21
|
exit 1 unless results.flatten.empty?
|
data/lib/mccabe/analyzer.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
require 'mccabe/analyzer/method_info'
|
1
2
|
require 'mccabe/parser'
|
2
3
|
|
3
4
|
module McCabe
|
@@ -5,12 +6,17 @@ module McCabe
|
|
5
6
|
BRANCH_TYPES = [:if, :while, :until, :for, :when, :and, :or]
|
6
7
|
ENUMERABLE_METHODS = Enumerable.instance_methods + [:each]
|
7
8
|
|
8
|
-
def self.analyze(
|
9
|
+
def self.analyze(file)
|
10
|
+
ast = McCabe::Parser.parse(File.read(file))
|
9
11
|
results = {}
|
10
|
-
McCabe::Parser.collect_methods(ast).
|
11
|
-
|
12
|
+
McCabe::Parser.collect_methods(ast).map do |name, method_ast|
|
13
|
+
MethodInfo.new(
|
14
|
+
name,
|
15
|
+
complexity(method_ast[:body]),
|
16
|
+
file,
|
17
|
+
method_ast[:line]
|
18
|
+
)
|
12
19
|
end
|
13
|
-
results
|
14
20
|
end
|
15
21
|
|
16
22
|
def self.complexity(ast)
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module McCabe
|
2
|
+
class Analyzer
|
3
|
+
class MethodInfo
|
4
|
+
attr_reader :complexity
|
5
|
+
|
6
|
+
def initialize(name, complexity, file, line)
|
7
|
+
@name = name
|
8
|
+
@complexity = complexity
|
9
|
+
@file = file
|
10
|
+
@line = line
|
11
|
+
end
|
12
|
+
|
13
|
+
def to_s
|
14
|
+
"#{@name} (#{@file}:#{@line}) #{@complexity}"
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
data/lib/mccabe/cli.rb
CHANGED
@@ -6,14 +6,13 @@ module McCabe
|
|
6
6
|
class CLI
|
7
7
|
DEFAULT_OPTIONS = {
|
8
8
|
threshold: 4,
|
9
|
-
quiet: false
|
9
|
+
quiet: false,
|
10
|
+
sort: false,
|
10
11
|
}
|
11
12
|
|
12
13
|
# Print out the results of a file to the console.
|
13
14
|
def self.display_results(file_results)
|
14
|
-
file_results.each
|
15
|
-
puts "\t#{method} (line #{info[:line]}) had a complexity of #{info[:complexity]}"
|
16
|
-
end
|
15
|
+
file_results.each { |method_info| puts method_info.to_s }
|
17
16
|
end
|
18
17
|
|
19
18
|
# Get all files recursively.
|
@@ -53,6 +52,10 @@ module McCabe
|
|
53
52
|
options[:threshold] = t.to_i
|
54
53
|
end
|
55
54
|
|
55
|
+
option_parser.on '--sort' do |s|
|
56
|
+
options[:sort] = s
|
57
|
+
end
|
58
|
+
|
56
59
|
option_parser.on '--quiet', "No output to stdout. Exit code only (1 for failure)." do |q|
|
57
60
|
options[:quiet] = q
|
58
61
|
end
|
data/lib/mccabe/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mccabe
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andrew Mason
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-08-
|
11
|
+
date: 2015-08-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: parser
|
@@ -71,6 +71,7 @@ files:
|
|
71
71
|
- bin/setup
|
72
72
|
- lib/mccabe.rb
|
73
73
|
- lib/mccabe/analyzer.rb
|
74
|
+
- lib/mccabe/analyzer/method_info.rb
|
74
75
|
- lib/mccabe/cli.rb
|
75
76
|
- lib/mccabe/parser.rb
|
76
77
|
- lib/mccabe/version.rb
|