Module: RuboCop::Cop::Util
Overview
This module contains a collection of useful utility methods.
Constant Summary
collapse
- LITERAL_REGEX =
Match literal regex characters, not including anchors, character classes, alternatives, groups, repetitions, references, etc
/[\w\s\-,"'!#%&<>=;:`~]|\\[^AbBdDgGhHkpPRwWXsSzZ0-9]/.freeze
Class Method Summary
collapse
Methods included from PathUtil
absolute?, chdir, hidden_dir?, hidden_file_in_not_hidden_dir?, match_path?, pwd, relative_path, reset_pwd, smart_path
Class Method Details
.begins_its_line?(range) ⇒ Boolean
38
39
40
|
# File 'lib/rubocop/cop/util.rb', line 38
def begins_its_line?(range)
(range.source_line =~ /\S/) == range.column
end
|
16
17
18
|
# File 'lib/rubocop/cop/util.rb', line 16
def (line_source)
line_source =~ /^\s*#/
end
|
.double_quotes_required?(string) ⇒ Boolean
If converting a string to Ruby string literal source code, must double quotes be used?
62
63
64
65
66
67
68
69
70
|
# File 'lib/rubocop/cop/util.rb', line 62
def double_quotes_required?(string)
string =~ /'|(?<! \\) \\{2}* \\ (?![\\"])/x
end
|
.escape_string(string) ⇒ Object
76
77
78
|
# File 'lib/rubocop/cop/util.rb', line 76
def escape_string(string)
string.inspect[1..-2].tap { |s| s.gsub!(/\\"/, '"') }
end
|
.first_part_of_call_chain(node) ⇒ Object
Returns, for example, a bare if node if the given node is an if with calls chained to the end of it.
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
|
# File 'lib/rubocop/cop/util.rb', line 44
def first_part_of_call_chain(node)
while node
case node.type
when :send
receiver, _method_name, _args = *node
node = receiver
when :block
method, _args, _body = *node
node = method
else
break
end
end
node
end
|
.interpret_string_escapes(string) ⇒ Object
.line_range(node) ⇒ Object
20
21
22
|
# File 'lib/rubocop/cop/util.rb', line 20
def line_range(node)
node.first_line..node.last_line
end
|
.needs_escaping?(string) ⇒ Boolean
72
73
74
|
# File 'lib/rubocop/cop/util.rb', line 72
def needs_escaping?(string)
double_quotes_required?(escape_string(string))
end
|
.on_node(syms, sexp, excludes = []) {|sexp| ... } ⇒ Object
29
30
31
32
33
34
35
36
|
# File 'lib/rubocop/cop/util.rb', line 29
def on_node(syms, sexp, excludes = [], &block)
return to_enum(:on_node, syms, sexp, excludes) unless block_given?
yield sexp if Array(syms).include?(sexp.type)
return if Array(excludes).include?(sexp.type)
sexp.each_child_node { |elem| on_node(syms, elem, excludes, &block) }
end
|
.parentheses?(node) ⇒ Boolean
24
25
26
27
|
# File 'lib/rubocop/cop/util.rb', line 24
def parentheses?(node)
node.loc.respond_to?(:end) && node.loc.end &&
node.loc.end.is?(')'.freeze)
end
|
.same_line?(node1, node2) ⇒ Boolean
96
97
98
99
100
|
# File 'lib/rubocop/cop/util.rb', line 96
def same_line?(node1, node2)
node1.respond_to?(:loc) &&
node2.respond_to?(:loc) &&
node1.loc.line == node2.loc.line
end
|
.to_string_literal(string) ⇒ Object
80
81
82
83
84
85
86
|
# File 'lib/rubocop/cop/util.rb', line 80
def to_string_literal(string)
if needs_escaping?(string) && compatible_external_encoding_for?(string)
string.inspect
else
"'#{string.gsub('\\') { '\\\\' }}'"
end
end
|
.to_supported_styles(enforced_style) ⇒ Object
102
103
104
105
106
|
# File 'lib/rubocop/cop/util.rb', line 102
def to_supported_styles(enforced_style)
enforced_style
.sub(/^Enforced/, 'Supported')
.sub('Style', 'Styles')
end
|
.tokens(node) ⇒ Object
108
109
110
111
112
113
114
115
116
117
118
119
|
# File 'lib/rubocop/cop/util.rb', line 108
def tokens(node)
@tokens ||= {}
return @tokens[node.object_id] if @tokens[node.object_id]
source_range = node.source_range
begin_pos = source_range.begin_pos
end_pos = source_range.end_pos
@tokens[node.object_id] = processed_source.tokens.select do |token|
token.end_pos <= end_pos && token.begin_pos >= begin_pos
end
end
|
.trim_string_interporation_escape_character(str) ⇒ Object
88
89
90
|
# File 'lib/rubocop/cop/util.rb', line 88
def trim_string_interporation_escape_character(str)
str.gsub(/\\\#{(.*?)\}/) { "\#{#{Regexp.last_match(1)}}" }
end
|