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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 6fedee59e685c053624c54bbd801a2bdc85b9438
4
- data.tar.gz: fb8618f85ca60eb054de2b28935a5cdd5f5ad92a
3
+ metadata.gz: 4b4261f514ab469d8844d7bbee617a65e14073c5
4
+ data.tar.gz: 4d7d947c352831abfcb7973b22dd2e22804ed2c9
5
5
  SHA512:
6
- metadata.gz: 0210e6c28d5c8343443a0b0adf3bfd846ef7e2e1558c3e18eacafa0e9d47ee50714a77ec1430346a388a3349c459c3de7d8bb3333bdb870d37e5000dd5780025
7
- data.tar.gz: 5e8da4b81d6668b98e0655a81ac81a95a7094ec63b55efb32c18bfae5b314eb78cb0d6760c5b19157a2412d11e6cc302aa66f9a403e4f235decbd892028504b3
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
- file_results = McCabe::Analyzer.analyze(McCabe::Parser.parse(File.read(file)))
16
- file_results.keep_if { |method, info| info[:complexity] > options[:threshold] }
17
- unless options[:quiet]
18
- McCabe::CLI.display_results(file_results) unless file_results.empty?
19
- end
20
- file_results
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?
@@ -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(ast)
9
+ def self.analyze(file)
10
+ ast = McCabe::Parser.parse(File.read(file))
9
11
  results = {}
10
- McCabe::Parser.collect_methods(ast).each do |name, method|
11
- results[name] = {line: method[:line], complexity: complexity(method[:body])}
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 do |method, info|
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
@@ -1,3 +1,3 @@
1
1
  module McCabe
2
- VERSION = "0.2.0"
2
+ VERSION = "0.3.0"
3
3
  end
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.2.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-19 00:00:00.000000000 Z
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