mccabe 0.2.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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