mccabe 0.1.1 → 0.2.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: 72379d20b7c7ea824390cb61969e45cb5a9f505e
4
- data.tar.gz: 1001d47499a6d291601a23564f439b13d493d8bc
3
+ metadata.gz: 6fedee59e685c053624c54bbd801a2bdc85b9438
4
+ data.tar.gz: fb8618f85ca60eb054de2b28935a5cdd5f5ad92a
5
5
  SHA512:
6
- metadata.gz: 46f4510109cecbbf18c989bd796b5bf5f45526a5ad14c6943e23f5385462e02362dfbeb43f353843bc55b765195ad56b25a7912da102f6308ce64dfcdec49a5c
7
- data.tar.gz: 755647bd30d9dc774c9bb9990ab8fad5ee18a0ccffc1583a44aecef6c75b46db64477b5ba09212a6ec58834820766aaa2f88c695f5de7424c65b986f9974d5b4
6
+ metadata.gz: 0210e6c28d5c8343443a0b0adf3bfd846ef7e2e1558c3e18eacafa0e9d47ee50714a77ec1430346a388a3349c459c3de7d8bb3333bdb870d37e5000dd5780025
7
+ data.tar.gz: 5e8da4b81d6668b98e0655a81ac81a95a7094ec63b55efb32c18bfae5b314eb78cb0d6760c5b19157a2412d11e6cc302aa66f9a403e4f235decbd892028504b3
@@ -3,6 +3,7 @@ require 'mccabe/parser'
3
3
  module McCabe
4
4
  class Analyzer
5
5
  BRANCH_TYPES = [:if, :while, :until, :for, :when, :and, :or]
6
+ ENUMERABLE_METHODS = Enumerable.instance_methods + [:each]
6
7
 
7
8
  def self.analyze(ast)
8
9
  results = {}
@@ -16,10 +17,28 @@ module McCabe
16
17
  nodes, complexity = [ast], 0
17
18
  until nodes.empty?
18
19
  node = nodes.shift
19
- complexity += 1 if BRANCH_TYPES.include?(node.type)
20
+ if BRANCH_TYPES.include?(node.type)
21
+ complexity += 1
22
+ elsif node.type == :block
23
+ complexity += block_complexity node
24
+ elsif node.type == :send
25
+ complexity += send_complexity node
26
+ end
20
27
  nodes += node.children.select { |child| child.is_a? ::Parser::AST::Node }
21
28
  end
22
29
  complexity
23
30
  end
31
+
32
+ def self.block_complexity(block_node)
33
+ sent_method = block_node.children[0]
34
+ sent_method.children.length == 2 &&
35
+ ENUMERABLE_METHODS.include?(sent_method.children[1]) ? 1 : 0
36
+ end
37
+
38
+ def self.send_complexity(send_node)
39
+ send_node.children.length >= 3 &&
40
+ send_node.children[2].type == :block_pass &&
41
+ ENUMERABLE_METHODS.include?(send_node.children[1]) ? 1 : 0
42
+ end
24
43
  end
25
44
  end
@@ -1,3 +1,3 @@
1
1
  module McCabe
2
- VERSION = "0.1.1"
2
+ VERSION = "0.2.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.1.1
4
+ version: 0.2.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-17 00:00:00.000000000 Z
11
+ date: 2015-08-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: parser