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.
- data/.gitignore +4 -0
- data/Gemfile +4 -0
- data/README.md +3 -0
- data/Rakefile +1 -0
- data/lib/rubycop.rb +6 -0
- data/lib/rubycop/analyzer.rb +6 -0
- data/lib/rubycop/analyzer/gray_list.rb +28 -0
- data/lib/rubycop/analyzer/node_builder.rb +523 -0
- data/lib/rubycop/analyzer/policy.rb +354 -0
- data/lib/rubycop/analyzer/ruby.rb +24 -0
- data/lib/rubycop/analyzer/ruby/args.rb +28 -0
- data/lib/rubycop/analyzer/ruby/array.rb +11 -0
- data/lib/rubycop/analyzer/ruby/assignment.rb +45 -0
- data/lib/rubycop/analyzer/ruby/assoc.rb +15 -0
- data/lib/rubycop/analyzer/ruby/blocks.rb +23 -0
- data/lib/rubycop/analyzer/ruby/call.rb +33 -0
- data/lib/rubycop/analyzer/ruby/case.rb +24 -0
- data/lib/rubycop/analyzer/ruby/constants.rb +49 -0
- data/lib/rubycop/analyzer/ruby/definitions.rb +27 -0
- data/lib/rubycop/analyzer/ruby/for.rb +17 -0
- data/lib/rubycop/analyzer/ruby/hash.rb +13 -0
- data/lib/rubycop/analyzer/ruby/if.rb +33 -0
- data/lib/rubycop/analyzer/ruby/list.rb +17 -0
- data/lib/rubycop/analyzer/ruby/node.rb +11 -0
- data/lib/rubycop/analyzer/ruby/operators.rb +54 -0
- data/lib/rubycop/analyzer/ruby/params.rb +23 -0
- data/lib/rubycop/analyzer/ruby/position.rb +15 -0
- data/lib/rubycop/analyzer/ruby/range.rb +17 -0
- data/lib/rubycop/analyzer/ruby/statements.rb +34 -0
- data/lib/rubycop/analyzer/ruby/string.rb +26 -0
- data/lib/rubycop/analyzer/ruby/tokens.rb +46 -0
- data/lib/rubycop/analyzer/ruby/variables.rb +26 -0
- data/lib/rubycop/analyzer/ruby/while.rb +29 -0
- data/lib/rubycop/version.rb +3 -0
- data/rubycop.gemspec +25 -0
- data/spec/node_builder_spec.rb +374 -0
- data/spec/policy_spec.rb +405 -0
- metadata +97 -0
@@ -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,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,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,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
|