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