rubycop 0.5.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|