Module: Rubocop::Cop::StatementModifier
Overview
Common functionality for modifier cops.
Instance Method Summary
collapse
Methods included from IfNode
#elsif?, #if_else?, #modifier_if?, #ternary_op?
Instance Method Details
#body_has_comment?(body, comments) ⇒ Boolean
52
53
54
55
56
|
# File 'lib/rubocop/cop/mixin/statement_modifier.rb', line 52
def body_has_comment?(body, )
= .map(&:location).map(&:line)
body_line = body.loc.expression.line
.include?(body_line)
end
|
#body_length(body) ⇒ Object
44
45
46
47
48
49
50
|
# File 'lib/rubocop/cop/mixin/statement_modifier.rb', line 44
def body_length(body)
if body && body.loc.expression
body.loc.expression.size
else
0
end
end
|
#check(sexp, comments) ⇒ Object
TODO: Extremely ugly solution that needs lots of polish.
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
# File 'lib/rubocop/cop/mixin/statement_modifier.rb', line 10
def check(sexp, )
case sexp.loc.keyword.source
when 'if' then cond, body, _else = *sexp
when 'unless' then cond, _else, body = *sexp
else cond, body = *sexp
end
return false if length(sexp) > 3
body_length = body_length(body)
return false if body_length == 0
on_node(:lvasgn, cond) do
return false
end
indentation = sexp.loc.keyword.column
kw_length = sexp.loc.keyword.size
cond_length = cond.loc.expression.size
space = 1
total = indentation + body_length + space + kw_length + space +
cond_length
total <= max_line_length && !body_has_comment?(body, )
end
|
#length(sexp) ⇒ Object
40
41
42
|
# File 'lib/rubocop/cop/mixin/statement_modifier.rb', line 40
def length(sexp)
sexp.loc.expression.source.lines.to_a.size
end
|
#max_line_length ⇒ Object
36
37
38
|
# File 'lib/rubocop/cop/mixin/statement_modifier.rb', line 36
def max_line_length
config.for_cop('LineLength')['Max']
end
|