mccabe 0.1.1 → 0.2.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: 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