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?
60
61
62
63
64
65
66
67
68
|
# File 'lib/rubocop/cop/util.rb', line 60
def double_quotes_required?(string)
string =~ /'|(?<! \\) \\{2}* \\ (?![\\"])/x
end
|
.escape_string(string) ⇒ Object
74
75
76
|
# File 'lib/rubocop/cop/util.rb', line 74
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
|
# File 'lib/rubocop/cop/util.rb', line 44
def first_part_of_call_chain(node)
while node
case node.type
when :send
node = node.receiver
when :block
node = node.send_node
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
70
71
72
|
# File 'lib/rubocop/cop/util.rb', line 70
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?(')')
end
|
.same_line?(node1, node2) ⇒ Boolean
94
95
96
97
98
|
# File 'lib/rubocop/cop/util.rb', line 94
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
78
79
80
81
82
83
84
|
# File 'lib/rubocop/cop/util.rb', line 78
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
100
101
102
103
104
|
# File 'lib/rubocop/cop/util.rb', line 100
def to_supported_styles(enforced_style)
enforced_style
.sub(/^Enforced/, 'Supported')
.sub('Style', 'Styles')
end
|
.tokens(node) ⇒ Object
106
107
108
109
110
111
112
113
114
115
116
117
|
# File 'lib/rubocop/cop/util.rb', line 106
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
86
87
88
|
# File 'lib/rubocop/cop/util.rb', line 86
def trim_string_interporation_escape_character(str)
str.gsub(/\\\#{(.*?)\}/) { "\#{#{Regexp.last_match(1)}}" }
end
|