rubycop 0.5.1 → 1.0.1

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.
Files changed (71) hide show
  1. data/.gitignore +2 -0
  2. data/Gemfile +1 -1
  3. data/README.md +43 -2
  4. data/Rakefile +3 -1
  5. data/lib/ruby_cop.rb +10 -0
  6. data/lib/ruby_cop/gray_list.rb +26 -0
  7. data/lib/ruby_cop/node_builder.rb +521 -0
  8. data/lib/ruby_cop/policy.rb +354 -0
  9. data/lib/ruby_cop/ruby.rb +23 -0
  10. data/lib/ruby_cop/ruby/args.rb +26 -0
  11. data/lib/ruby_cop/ruby/array.rb +13 -0
  12. data/lib/ruby_cop/ruby/assignment.rb +43 -0
  13. data/lib/ruby_cop/ruby/assoc.rb +13 -0
  14. data/lib/ruby_cop/ruby/blocks.rb +21 -0
  15. data/lib/ruby_cop/ruby/call.rb +31 -0
  16. data/lib/ruby_cop/ruby/case.rb +22 -0
  17. data/lib/ruby_cop/ruby/constants.rb +47 -0
  18. data/lib/ruby_cop/ruby/definitions.rb +25 -0
  19. data/lib/ruby_cop/ruby/for.rb +15 -0
  20. data/lib/ruby_cop/ruby/hash.rb +11 -0
  21. data/lib/ruby_cop/ruby/if.rb +31 -0
  22. data/lib/ruby_cop/ruby/list.rb +15 -0
  23. data/lib/ruby_cop/ruby/node.rb +9 -0
  24. data/lib/ruby_cop/ruby/operators.rb +52 -0
  25. data/lib/ruby_cop/ruby/params.rb +21 -0
  26. data/lib/ruby_cop/ruby/position.rb +13 -0
  27. data/lib/ruby_cop/ruby/range.rb +15 -0
  28. data/lib/ruby_cop/ruby/statements.rb +32 -0
  29. data/lib/ruby_cop/ruby/string.rb +24 -0
  30. data/lib/ruby_cop/ruby/tokens.rb +44 -0
  31. data/lib/ruby_cop/ruby/variables.rb +24 -0
  32. data/lib/ruby_cop/ruby/while.rb +27 -0
  33. data/lib/ruby_cop/version.rb +3 -0
  34. data/ruby_cop.gemspec +25 -0
  35. data/spec/{node_builder_spec.rb → analyzer/node_builder_spec.rb} +3 -3
  36. data/spec/{policy_spec.rb → analyzer/policy_spec.rb} +6 -8
  37. data/spec/spec_helper.rb +13 -0
  38. data/tasks/rspec.rake +8 -0
  39. data/tasks/yard.rake +2 -0
  40. metadata +69 -44
  41. data/lib/rubycop.rb +0 -6
  42. data/lib/rubycop/analyzer.rb +0 -6
  43. data/lib/rubycop/analyzer/gray_list.rb +0 -28
  44. data/lib/rubycop/analyzer/node_builder.rb +0 -523
  45. data/lib/rubycop/analyzer/policy.rb +0 -356
  46. data/lib/rubycop/analyzer/ruby.rb +0 -24
  47. data/lib/rubycop/analyzer/ruby/args.rb +0 -28
  48. data/lib/rubycop/analyzer/ruby/array.rb +0 -11
  49. data/lib/rubycop/analyzer/ruby/assignment.rb +0 -45
  50. data/lib/rubycop/analyzer/ruby/assoc.rb +0 -15
  51. data/lib/rubycop/analyzer/ruby/blocks.rb +0 -23
  52. data/lib/rubycop/analyzer/ruby/call.rb +0 -33
  53. data/lib/rubycop/analyzer/ruby/case.rb +0 -24
  54. data/lib/rubycop/analyzer/ruby/constants.rb +0 -49
  55. data/lib/rubycop/analyzer/ruby/definitions.rb +0 -27
  56. data/lib/rubycop/analyzer/ruby/for.rb +0 -17
  57. data/lib/rubycop/analyzer/ruby/hash.rb +0 -13
  58. data/lib/rubycop/analyzer/ruby/if.rb +0 -33
  59. data/lib/rubycop/analyzer/ruby/list.rb +0 -17
  60. data/lib/rubycop/analyzer/ruby/node.rb +0 -11
  61. data/lib/rubycop/analyzer/ruby/operators.rb +0 -54
  62. data/lib/rubycop/analyzer/ruby/params.rb +0 -23
  63. data/lib/rubycop/analyzer/ruby/position.rb +0 -15
  64. data/lib/rubycop/analyzer/ruby/range.rb +0 -17
  65. data/lib/rubycop/analyzer/ruby/statements.rb +0 -34
  66. data/lib/rubycop/analyzer/ruby/string.rb +0 -26
  67. data/lib/rubycop/analyzer/ruby/tokens.rb +0 -46
  68. data/lib/rubycop/analyzer/ruby/variables.rb +0 -26
  69. data/lib/rubycop/analyzer/ruby/while.rb +0 -29
  70. data/lib/rubycop/version.rb +0 -3
  71. data/rubycop.gemspec +0 -25
@@ -0,0 +1,13 @@
1
+ module RubyCop
2
+ module Ruby
3
+ class Assoc < Node
4
+ def initialize(key, value)
5
+ @key = key
6
+ @value = value
7
+ end
8
+
9
+ attr_reader :key
10
+ attr_reader :value
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,21 @@
1
+ module RubyCop
2
+ module Ruby
3
+ class Block < Statements
4
+ def initialize(statements, params=nil)
5
+ @params = params
6
+ super(statements)
7
+ end
8
+
9
+ attr_reader :params
10
+ end
11
+
12
+ class ChainedBlock < Block
13
+ def initialize(blocks, statements, params=nil)
14
+ @blocks = Array(blocks).compact
15
+ super(statements, params)
16
+ end
17
+
18
+ attr_reader :blocks
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,31 @@
1
+ module RubyCop
2
+ module Ruby
3
+ class Call < Node
4
+ def initialize(target, identifier, arguments=nil, block=nil)
5
+ @target = target
6
+ @identifier = identifier
7
+ @arguments = arguments
8
+ @block = block
9
+ end
10
+
11
+ attr_reader :target
12
+ attr_reader :identifier
13
+ attr_accessor :arguments
14
+ attr_accessor :block
15
+
16
+ def assignment(rvalue, operator)
17
+ self.class.new(@target, Identifier.new("#{@identifier.token}=", @identifier.position), @arguments, @block)
18
+ end
19
+ end
20
+
21
+ class Alias < Node
22
+ def initialize(new_name, old_name)
23
+ @new_name = new_name
24
+ @old_name = old_name
25
+ end
26
+
27
+ attr_reader :new_name
28
+ attr_reader :old_name
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,22 @@
1
+ module RubyCop
2
+ module Ruby
3
+ class Case < Node
4
+ def initialize(expression, block)
5
+ @expression = expression
6
+ @block = block
7
+ end
8
+
9
+ attr_reader :expression
10
+ attr_reader :block
11
+ end
12
+
13
+ class When < ChainedBlock
14
+ def initialize(expression, statements, block=nil)
15
+ @expression = expression
16
+ super([block], statements)
17
+ end
18
+
19
+ attr_reader :expression
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,47 @@
1
+ module RubyCop
2
+ module Ruby
3
+ class Constant < Identifier
4
+ attr_accessor :namespace
5
+
6
+ def assignment(rvalue, operator)
7
+ ConstantAssignment.new(self, rvalue, operator)
8
+ end
9
+
10
+ # def inspect
11
+ # @namespace ? "#{@namespace.inspect}::#{@token}" : @token
12
+ # end
13
+ end
14
+
15
+ class Module < Node
16
+ def initialize(const, body)
17
+ @const = const
18
+ @body = body
19
+ end
20
+
21
+ attr_reader :const
22
+ attr_reader :body
23
+ end
24
+
25
+ class Class < Node
26
+ def initialize(const, superclass, body)
27
+ @const = const
28
+ @superclass = superclass
29
+ @body = body
30
+ end
31
+
32
+ attr_reader :const
33
+ attr_reader :superclass
34
+ attr_reader :body
35
+ end
36
+
37
+ class SingletonClass < Node
38
+ def initialize(superclass, body)
39
+ @superclass = superclass
40
+ @body = body
41
+ end
42
+
43
+ attr_reader :superclass
44
+ attr_reader :body
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,25 @@
1
+ module RubyCop
2
+ module Ruby
3
+ class Method < Node
4
+ def initialize(target, identifier, params, body)
5
+ @target = target
6
+ @identifier = identifier
7
+ @params = params
8
+ @body = body
9
+ end
10
+
11
+ attr_reader :target
12
+ attr_reader :identifier
13
+ attr_reader :params
14
+ attr_reader :body
15
+ end
16
+
17
+ class Defined < Node
18
+ def initialize(expression)
19
+ @expression = expression
20
+ end
21
+
22
+ attr_reader :expression
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,15 @@
1
+ module RubyCop
2
+ module Ruby
3
+ class For < Block
4
+ def initialize(variable, range, statements)
5
+ @variable = variable
6
+ @range = range
7
+ @statements = statements
8
+ end
9
+
10
+ attr_reader :variable
11
+ attr_reader :range
12
+ attr_reader :statements
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,11 @@
1
+ module RubyCop
2
+ module Ruby
3
+ class Hash < Node
4
+ def initialize(assocs)
5
+ @assocs = assocs
6
+ end
7
+
8
+ attr_reader :assocs
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,31 @@
1
+ module RubyCop
2
+ module Ruby
3
+ class If < ChainedBlock
4
+ def initialize(expression, statements=nil, else_block=nil)
5
+ @expression = expression
6
+ super([else_block], statements, nil)
7
+ end
8
+ attr_reader :expression
9
+ end
10
+
11
+ class Unless < If
12
+ end
13
+
14
+ class Else < Block
15
+ end
16
+
17
+ class IfMod < Block
18
+ def initialize(expression, statements)
19
+ @expression = expression
20
+ super(statements)
21
+ end
22
+ attr_reader :expression
23
+ end
24
+
25
+ class UnlessMod < IfMod
26
+ end
27
+
28
+ class RescueMod < IfMod
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,15 @@
1
+ module RubyCop
2
+ module Ruby
3
+ class List < Node
4
+ def initialize(elements=nil)
5
+ @elements = Array(elements).compact # TODO: compact might cause problems here
6
+ end
7
+
8
+ attr_reader :elements
9
+
10
+ def add(element)
11
+ @elements.push(element)
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,9 @@
1
+ module RubyCop
2
+ module Ruby
3
+ class Node
4
+ def accept(visitor)
5
+ visitor.visit(self)
6
+ end
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,52 @@
1
+ module RubyCop
2
+ module Ruby
3
+ class Operator < Node
4
+ end
5
+
6
+ class Unary < Operator
7
+ def initialize(operator, operand)
8
+ @operator = operator
9
+ @operand = operand
10
+ end
11
+
12
+ attr_reader :operator
13
+ attr_reader :operand
14
+
15
+ # def inspect
16
+ # "#{@operator}(#{@operand.inspect})"
17
+ # end
18
+ end
19
+
20
+ class Binary < Operator
21
+ def initialize(lvalue, rvalue, operator)
22
+ @lvalue = lvalue
23
+ @rvalue = rvalue
24
+ @operator = operator
25
+ end
26
+
27
+ attr_reader :lvalue
28
+ attr_reader :rvalue
29
+ attr_reader :operator
30
+
31
+ # def inspect
32
+ # "#{@lvalue.inspect} #{@operator} #{@rvalue.inspect}"
33
+ # end
34
+ end
35
+
36
+ class IfOp < Operator
37
+ def initialize(condition, then_part, else_part)
38
+ @condition = condition
39
+ @then_part = then_part
40
+ @else_part = else_part
41
+ end
42
+
43
+ attr_reader :condition
44
+ attr_reader :then_part
45
+ attr_reader :else_part
46
+
47
+ # def inspect
48
+ # "#{@condition.inspect} ? #{@then_part.inspect} : #{@else_part.inspect}"
49
+ # end
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,21 @@
1
+ module RubyCop
2
+ module Ruby
3
+ class Params < List
4
+ def initialize(params, optionals, rest, block)
5
+ super((Array(params) + Array(optionals) << rest << block).flatten.compact)
6
+ end
7
+ end
8
+
9
+ class RescueParams < List
10
+ def initialize(types, var)
11
+ if types
12
+ errors = Ruby::Array.new(types)
13
+ errors = Ruby::Assoc.new(errors, var) if var
14
+ super(errors)
15
+ else
16
+ super()
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,13 @@
1
+ module RubyCop
2
+ module Ruby
3
+ class Position
4
+ def initialize(lineno, column)
5
+ @lineno = lineno
6
+ @column = column
7
+ end
8
+
9
+ attr_reader :lineno
10
+ attr_reader :column
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,15 @@
1
+ module RubyCop
2
+ module Ruby
3
+ class Range < Node
4
+ def initialize(min, max, exclude_end)
5
+ @min = min
6
+ @max = max
7
+ @exclude_end = exclude_end
8
+ end
9
+
10
+ attr_reader :min
11
+ attr_reader :max
12
+ attr_reader :exclude_end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,32 @@
1
+ module RubyCop
2
+ module Ruby
3
+ class Statements < List
4
+ # def inspect
5
+ # @elements.collect { |e| e.inspect }.join
6
+ # end
7
+
8
+ def to_block(params)
9
+ Block.new(@elements, params)
10
+ end
11
+
12
+ def to_chained_block(blocks=nil, params=nil)
13
+ ChainedBlock.new(blocks, @elements, params)
14
+ end
15
+
16
+ def to_program(src, filename)
17
+ Program.new(src, filename, @elements)
18
+ end
19
+ end
20
+
21
+ class Program < Statements
22
+ def initialize(src, filename, statements)
23
+ @src = src
24
+ @filename = filename
25
+ super(statements)
26
+ end
27
+
28
+ attr_reader :src
29
+ attr_reader :filename
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,24 @@
1
+ module RubyCop
2
+ module Ruby
3
+ class StringConcat < List
4
+ end
5
+
6
+ class String < List
7
+ # def inspect
8
+ # @elements.join.inspect
9
+ # end
10
+ end
11
+
12
+ class DynaSymbol < String
13
+ end
14
+
15
+ class ExecutableString < String
16
+ def to_dyna_symbol
17
+ DynaSymbol.new(@elements)
18
+ end
19
+ end
20
+
21
+ class Regexp < String
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,44 @@
1
+ module RubyCop
2
+ module Ruby
3
+ class Token < Node
4
+ def initialize(token, position)
5
+ @token = token
6
+ @position = position
7
+ end
8
+
9
+ attr_reader :token
10
+ attr_reader :position
11
+
12
+ # def inspect
13
+ # "#{@token}<t>"
14
+ # end
15
+ end
16
+
17
+ class Integer < Token
18
+ end
19
+
20
+ class Float < Token
21
+ end
22
+
23
+ class Char < Token
24
+ end
25
+
26
+ class Label < Token
27
+ end
28
+
29
+ class Symbol < Token
30
+ # def inspect
31
+ # ":#{@token.inspect}"
32
+ # end
33
+ end
34
+
35
+ class Keyword < Token
36
+ end
37
+
38
+ class Identifier < Token
39
+ def assignment(rvalue, operator)
40
+ LocalVariableAssignment.new(self, rvalue, operator)
41
+ end
42
+ end
43
+ end
44
+ end