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.
- data/.gitignore +2 -0
- data/Gemfile +1 -1
- data/README.md +43 -2
- data/Rakefile +3 -1
- data/lib/ruby_cop.rb +10 -0
- data/lib/ruby_cop/gray_list.rb +26 -0
- data/lib/ruby_cop/node_builder.rb +521 -0
- data/lib/ruby_cop/policy.rb +354 -0
- data/lib/ruby_cop/ruby.rb +23 -0
- data/lib/ruby_cop/ruby/args.rb +26 -0
- data/lib/ruby_cop/ruby/array.rb +13 -0
- data/lib/ruby_cop/ruby/assignment.rb +43 -0
- data/lib/ruby_cop/ruby/assoc.rb +13 -0
- data/lib/ruby_cop/ruby/blocks.rb +21 -0
- data/lib/ruby_cop/ruby/call.rb +31 -0
- data/lib/ruby_cop/ruby/case.rb +22 -0
- data/lib/ruby_cop/ruby/constants.rb +47 -0
- data/lib/ruby_cop/ruby/definitions.rb +25 -0
- data/lib/ruby_cop/ruby/for.rb +15 -0
- data/lib/ruby_cop/ruby/hash.rb +11 -0
- data/lib/ruby_cop/ruby/if.rb +31 -0
- data/lib/ruby_cop/ruby/list.rb +15 -0
- data/lib/ruby_cop/ruby/node.rb +9 -0
- data/lib/ruby_cop/ruby/operators.rb +52 -0
- data/lib/ruby_cop/ruby/params.rb +21 -0
- data/lib/ruby_cop/ruby/position.rb +13 -0
- data/lib/ruby_cop/ruby/range.rb +15 -0
- data/lib/ruby_cop/ruby/statements.rb +32 -0
- data/lib/ruby_cop/ruby/string.rb +24 -0
- data/lib/ruby_cop/ruby/tokens.rb +44 -0
- data/lib/ruby_cop/ruby/variables.rb +24 -0
- data/lib/ruby_cop/ruby/while.rb +27 -0
- data/lib/ruby_cop/version.rb +3 -0
- data/ruby_cop.gemspec +25 -0
- data/spec/{node_builder_spec.rb → analyzer/node_builder_spec.rb} +3 -3
- data/spec/{policy_spec.rb → analyzer/policy_spec.rb} +6 -8
- data/spec/spec_helper.rb +13 -0
- data/tasks/rspec.rake +8 -0
- data/tasks/yard.rake +2 -0
- metadata +69 -44
- data/lib/rubycop.rb +0 -6
- data/lib/rubycop/analyzer.rb +0 -6
- data/lib/rubycop/analyzer/gray_list.rb +0 -28
- data/lib/rubycop/analyzer/node_builder.rb +0 -523
- data/lib/rubycop/analyzer/policy.rb +0 -356
- data/lib/rubycop/analyzer/ruby.rb +0 -24
- data/lib/rubycop/analyzer/ruby/args.rb +0 -28
- data/lib/rubycop/analyzer/ruby/array.rb +0 -11
- data/lib/rubycop/analyzer/ruby/assignment.rb +0 -45
- data/lib/rubycop/analyzer/ruby/assoc.rb +0 -15
- data/lib/rubycop/analyzer/ruby/blocks.rb +0 -23
- data/lib/rubycop/analyzer/ruby/call.rb +0 -33
- data/lib/rubycop/analyzer/ruby/case.rb +0 -24
- data/lib/rubycop/analyzer/ruby/constants.rb +0 -49
- data/lib/rubycop/analyzer/ruby/definitions.rb +0 -27
- data/lib/rubycop/analyzer/ruby/for.rb +0 -17
- data/lib/rubycop/analyzer/ruby/hash.rb +0 -13
- data/lib/rubycop/analyzer/ruby/if.rb +0 -33
- data/lib/rubycop/analyzer/ruby/list.rb +0 -17
- data/lib/rubycop/analyzer/ruby/node.rb +0 -11
- data/lib/rubycop/analyzer/ruby/operators.rb +0 -54
- data/lib/rubycop/analyzer/ruby/params.rb +0 -23
- data/lib/rubycop/analyzer/ruby/position.rb +0 -15
- data/lib/rubycop/analyzer/ruby/range.rb +0 -17
- data/lib/rubycop/analyzer/ruby/statements.rb +0 -34
- data/lib/rubycop/analyzer/ruby/string.rb +0 -26
- data/lib/rubycop/analyzer/ruby/tokens.rb +0 -46
- data/lib/rubycop/analyzer/ruby/variables.rb +0 -26
- data/lib/rubycop/analyzer/ruby/while.rb +0 -29
- data/lib/rubycop/version.rb +0 -3
- data/rubycop.gemspec +0 -25
@@ -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,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,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,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
|