rubocop 0.83.0 → 0.84.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (138) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +2 -2
  3. data/config/default.yml +20 -3
  4. data/lib/rubocop.rb +6 -59
  5. data/lib/rubocop/ast_aliases.rb +8 -0
  6. data/lib/rubocop/cli/command/show_cops.rb +2 -6
  7. data/lib/rubocop/config.rb +1 -3
  8. data/lib/rubocop/config_loader.rb +3 -9
  9. data/lib/rubocop/config_loader_resolver.rb +2 -6
  10. data/lib/rubocop/cop/autocorrect_logic.rb +1 -2
  11. data/lib/rubocop/cop/corrector.rb +1 -3
  12. data/lib/rubocop/cop/correctors/alignment_corrector.rb +2 -6
  13. data/lib/rubocop/cop/correctors/parentheses_corrector.rb +1 -3
  14. data/lib/rubocop/cop/correctors/space_corrector.rb +1 -3
  15. data/lib/rubocop/cop/gemspec/ordered_dependencies.rb +1 -3
  16. data/lib/rubocop/cop/generator.rb +1 -1
  17. data/lib/rubocop/cop/ignored_node.rb +1 -3
  18. data/lib/rubocop/cop/layout/empty_lines_around_access_modifier.rb +2 -6
  19. data/lib/rubocop/cop/layout/empty_lines_around_attribute_accessor.rb +62 -4
  20. data/lib/rubocop/cop/layout/first_argument_indentation.rb +0 -2
  21. data/lib/rubocop/cop/layout/first_array_element_indentation.rb +1 -3
  22. data/lib/rubocop/cop/layout/first_method_argument_line_break.rb +1 -3
  23. data/lib/rubocop/cop/layout/heredoc_argument_closing_parenthesis.rb +2 -6
  24. data/lib/rubocop/cop/layout/indentation_width.rb +1 -3
  25. data/lib/rubocop/cop/layout/multiline_block_layout.rb +1 -3
  26. data/lib/rubocop/cop/layout/multiline_method_argument_line_breaks.rb +1 -3
  27. data/lib/rubocop/cop/layout/space_around_method_call_operator.rb +2 -6
  28. data/lib/rubocop/cop/layout/space_before_comment.rb +1 -3
  29. data/lib/rubocop/cop/layout/space_inside_array_literal_brackets.rb +1 -3
  30. data/lib/rubocop/cop/layout/space_inside_reference_brackets.rb +2 -6
  31. data/lib/rubocop/cop/lint/ambiguous_operator.rb +4 -2
  32. data/lib/rubocop/cop/lint/deprecated_open_ssl_constant.rb +133 -0
  33. data/lib/rubocop/cop/lint/erb_new_arguments.rb +2 -6
  34. data/lib/rubocop/cop/lint/parentheses_as_grouped_expression.rb +11 -3
  35. data/lib/rubocop/cop/lint/percent_string_array.rb +1 -3
  36. data/lib/rubocop/cop/lint/suppressed_exception.rb +12 -1
  37. data/lib/rubocop/cop/lint/syntax.rb +1 -3
  38. data/lib/rubocop/cop/lint/useless_access_modifier.rb +1 -3
  39. data/lib/rubocop/cop/migration/department_name.rb +5 -9
  40. data/lib/rubocop/cop/mixin/alignment.rb +1 -3
  41. data/lib/rubocop/cop/mixin/array_min_size.rb +2 -6
  42. data/lib/rubocop/cop/mixin/check_line_breakable.rb +4 -12
  43. data/lib/rubocop/cop/mixin/configurable_enforced_style.rb +1 -3
  44. data/lib/rubocop/cop/mixin/configurable_formatting.rb +1 -3
  45. data/lib/rubocop/cop/mixin/multiline_element_indentation.rb +1 -3
  46. data/lib/rubocop/cop/mixin/surrounding_space.rb +1 -3
  47. data/lib/rubocop/cop/mixin/trailing_comma.rb +1 -3
  48. data/lib/rubocop/cop/naming/file_name.rb +1 -3
  49. data/lib/rubocop/cop/registry.rb +2 -6
  50. data/lib/rubocop/cop/severity.rb +1 -3
  51. data/lib/rubocop/cop/style/and_or.rb +2 -2
  52. data/lib/rubocop/cop/style/attr.rb +1 -3
  53. data/lib/rubocop/cop/style/block_delimiters.rb +2 -8
  54. data/lib/rubocop/cop/style/conditional_assignment.rb +1 -3
  55. data/lib/rubocop/cop/style/double_negation.rb +41 -4
  56. data/lib/rubocop/cop/style/empty_literal.rb +1 -3
  57. data/lib/rubocop/cop/style/frozen_string_literal_comment.rb +2 -4
  58. data/lib/rubocop/cop/style/hash_syntax.rb +12 -5
  59. data/lib/rubocop/cop/style/method_call_with_args_parentheses/require_parentheses.rb +1 -3
  60. data/lib/rubocop/cop/style/method_call_without_args_parentheses.rb +1 -3
  61. data/lib/rubocop/cop/style/one_line_conditional.rb +2 -6
  62. data/lib/rubocop/cop/style/redundant_parentheses.rb +2 -6
  63. data/lib/rubocop/cop/style/safe_navigation.rb +2 -6
  64. data/lib/rubocop/cop/style/slicing_with_range.rb +1 -1
  65. data/lib/rubocop/cop/style/special_global_vars.rb +2 -6
  66. data/lib/rubocop/cop/style/ternary_parentheses.rb +1 -3
  67. data/lib/rubocop/cop/style/trailing_underscore_variable.rb +2 -6
  68. data/lib/rubocop/cop/variable_force.rb +3 -9
  69. data/lib/rubocop/cop/variable_force/branch.rb +2 -6
  70. data/lib/rubocop/cop/variable_force/variable.rb +2 -6
  71. data/lib/rubocop/ext/processed_source.rb +18 -0
  72. data/lib/rubocop/formatter/base_formatter.rb +0 -4
  73. data/lib/rubocop/formatter/disabled_config_formatter.rb +4 -12
  74. data/lib/rubocop/formatter/formatter_set.rb +1 -3
  75. data/lib/rubocop/options.rb +2 -8
  76. data/lib/rubocop/remote_config.rb +1 -3
  77. data/lib/rubocop/result_cache.rb +1 -3
  78. data/lib/rubocop/rspec/cop_helper.rb +1 -3
  79. data/lib/rubocop/rspec/expect_offense.rb +3 -9
  80. data/lib/rubocop/rspec/shared_contexts.rb +54 -16
  81. data/lib/rubocop/runner.rb +8 -10
  82. data/lib/rubocop/target_finder.rb +2 -6
  83. data/lib/rubocop/version.rb +5 -3
  84. metadata +19 -56
  85. data/lib/rubocop/ast/builder.rb +0 -85
  86. data/lib/rubocop/ast/node.rb +0 -637
  87. data/lib/rubocop/ast/node/alias_node.rb +0 -24
  88. data/lib/rubocop/ast/node/and_node.rb +0 -29
  89. data/lib/rubocop/ast/node/args_node.rb +0 -29
  90. data/lib/rubocop/ast/node/array_node.rb +0 -70
  91. data/lib/rubocop/ast/node/block_node.rb +0 -121
  92. data/lib/rubocop/ast/node/break_node.rb +0 -17
  93. data/lib/rubocop/ast/node/case_match_node.rb +0 -56
  94. data/lib/rubocop/ast/node/case_node.rb +0 -56
  95. data/lib/rubocop/ast/node/class_node.rb +0 -31
  96. data/lib/rubocop/ast/node/def_node.rb +0 -82
  97. data/lib/rubocop/ast/node/defined_node.rb +0 -17
  98. data/lib/rubocop/ast/node/ensure_node.rb +0 -17
  99. data/lib/rubocop/ast/node/float_node.rb +0 -12
  100. data/lib/rubocop/ast/node/for_node.rb +0 -53
  101. data/lib/rubocop/ast/node/forward_args_node.rb +0 -18
  102. data/lib/rubocop/ast/node/hash_node.rb +0 -109
  103. data/lib/rubocop/ast/node/if_node.rb +0 -175
  104. data/lib/rubocop/ast/node/int_node.rb +0 -12
  105. data/lib/rubocop/ast/node/keyword_splat_node.rb +0 -45
  106. data/lib/rubocop/ast/node/mixin/basic_literal_node.rb +0 -16
  107. data/lib/rubocop/ast/node/mixin/binary_operator_node.rb +0 -43
  108. data/lib/rubocop/ast/node/mixin/collection_node.rb +0 -15
  109. data/lib/rubocop/ast/node/mixin/conditional_node.rb +0 -45
  110. data/lib/rubocop/ast/node/mixin/hash_element_node.rb +0 -125
  111. data/lib/rubocop/ast/node/mixin/method_dispatch_node.rb +0 -269
  112. data/lib/rubocop/ast/node/mixin/method_identifier_predicates.rb +0 -114
  113. data/lib/rubocop/ast/node/mixin/modifier_node.rb +0 -17
  114. data/lib/rubocop/ast/node/mixin/numeric_node.rb +0 -21
  115. data/lib/rubocop/ast/node/mixin/parameterized_node.rb +0 -61
  116. data/lib/rubocop/ast/node/mixin/predicate_operator_node.rb +0 -35
  117. data/lib/rubocop/ast/node/module_node.rb +0 -24
  118. data/lib/rubocop/ast/node/or_node.rb +0 -29
  119. data/lib/rubocop/ast/node/pair_node.rb +0 -63
  120. data/lib/rubocop/ast/node/range_node.rb +0 -18
  121. data/lib/rubocop/ast/node/regexp_node.rb +0 -33
  122. data/lib/rubocop/ast/node/resbody_node.rb +0 -24
  123. data/lib/rubocop/ast/node/retry_node.rb +0 -17
  124. data/lib/rubocop/ast/node/return_node.rb +0 -24
  125. data/lib/rubocop/ast/node/self_class_node.rb +0 -24
  126. data/lib/rubocop/ast/node/send_node.rb +0 -17
  127. data/lib/rubocop/ast/node/str_node.rb +0 -16
  128. data/lib/rubocop/ast/node/super_node.rb +0 -21
  129. data/lib/rubocop/ast/node/symbol_node.rb +0 -12
  130. data/lib/rubocop/ast/node/until_node.rb +0 -35
  131. data/lib/rubocop/ast/node/when_node.rb +0 -53
  132. data/lib/rubocop/ast/node/while_node.rb +0 -35
  133. data/lib/rubocop/ast/node/yield_node.rb +0 -21
  134. data/lib/rubocop/ast/sexp.rb +0 -16
  135. data/lib/rubocop/ast/traversal.rb +0 -202
  136. data/lib/rubocop/node_pattern.rb +0 -887
  137. data/lib/rubocop/processed_source.rb +0 -213
  138. data/lib/rubocop/token.rb +0 -114
@@ -1,213 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'digest/sha1'
4
-
5
- module RuboCop
6
- # ProcessedSource contains objects which are generated by Parser
7
- # and other information such as disabled lines for cops.
8
- # It also provides a convenient way to access source lines.
9
- class ProcessedSource
10
- STRING_SOURCE_NAME = '(string)'
11
-
12
- attr_reader :path, :buffer, :ast, :comments, :tokens, :diagnostics,
13
- :parser_error, :raw_source, :ruby_version
14
-
15
- def self.from_file(path, ruby_version)
16
- file = File.read(path, mode: 'rb')
17
- new(file, ruby_version, path)
18
- rescue Errno::ENOENT
19
- raise RuboCop::Error, "No such file or directory: #{path}"
20
- end
21
-
22
- def initialize(source, ruby_version, path = nil)
23
- # Defaults source encoding to UTF-8, regardless of the encoding it has
24
- # been read with, which could be non-utf8 depending on the default
25
- # external encoding.
26
- unless source.encoding == Encoding::UTF_8
27
- source.force_encoding(Encoding::UTF_8)
28
- end
29
-
30
- @raw_source = source
31
- @path = path
32
- @diagnostics = []
33
- @ruby_version = ruby_version
34
- @parser_error = nil
35
-
36
- parse(source, ruby_version)
37
- end
38
-
39
- def comment_config
40
- @comment_config ||= CommentConfig.new(self)
41
- end
42
-
43
- def disabled_line_ranges
44
- comment_config.cop_disabled_line_ranges
45
- end
46
-
47
- def ast_with_comments
48
- return if !ast || !comments
49
-
50
- @ast_with_comments ||= Parser::Source::Comment.associate(ast, comments)
51
- end
52
-
53
- # Returns the source lines, line break characters removed, excluding a
54
- # possible __END__ and everything that comes after.
55
- def lines
56
- @lines ||= begin
57
- all_lines = @buffer.source_lines
58
- last_token_line = tokens.any? ? tokens.last.line : all_lines.size
59
- result = []
60
- all_lines.each_with_index do |line, ix|
61
- break if ix >= last_token_line && line == '__END__'
62
-
63
- result << line
64
- end
65
- result
66
- end
67
- end
68
-
69
- def [](*args)
70
- lines[*args]
71
- end
72
-
73
- def valid_syntax?
74
- return false if @parser_error
75
-
76
- @diagnostics.none? { |d| %i[error fatal].include?(d.level) }
77
- end
78
-
79
- # Raw source checksum for tracking infinite loops.
80
- def checksum
81
- Digest::SHA1.hexdigest(@raw_source)
82
- end
83
-
84
- def each_comment
85
- comments.each { |comment| yield comment }
86
- end
87
-
88
- def find_comment
89
- comments.find { |comment| yield comment }
90
- end
91
-
92
- def each_token
93
- tokens.each { |token| yield token }
94
- end
95
-
96
- def find_token
97
- tokens.find { |token| yield token }
98
- end
99
-
100
- def file_path
101
- buffer.name
102
- end
103
-
104
- def blank?
105
- ast.nil?
106
- end
107
-
108
- def commented?(source_range)
109
- comment_lines.include?(source_range.line)
110
- end
111
-
112
- def comments_before_line(line)
113
- comments.select { |c| c.location.line <= line }
114
- end
115
-
116
- def start_with?(string)
117
- return false if self[0].nil?
118
-
119
- self[0].start_with?(string)
120
- end
121
-
122
- def preceding_line(token)
123
- lines[token.line - 2]
124
- end
125
-
126
- def current_line(token)
127
- lines[token.line - 1]
128
- end
129
-
130
- def following_line(token)
131
- lines[token.line]
132
- end
133
-
134
- def line_indentation(line_number)
135
- lines[line_number - 1]
136
- .match(/^(\s*)/)[1]
137
- .to_s
138
- .length
139
- end
140
-
141
- private
142
-
143
- def comment_lines
144
- @comment_lines ||= comments.map { |c| c.location.line }
145
- end
146
-
147
- def parse(source, ruby_version)
148
- buffer_name = @path || STRING_SOURCE_NAME
149
- @buffer = Parser::Source::Buffer.new(buffer_name, 1)
150
-
151
- begin
152
- @buffer.source = source
153
- rescue EncodingError => e
154
- @parser_error = e
155
- return
156
- end
157
-
158
- @ast, @comments, @tokens = tokenize(create_parser(ruby_version))
159
- end
160
-
161
- def tokenize(parser)
162
- begin
163
- ast, comments, tokens = parser.tokenize(@buffer)
164
-
165
- ast.respond_to?(:complete!) && ast.complete!
166
- rescue Parser::SyntaxError
167
- # All errors are in diagnostics. No need to handle exception.
168
- end
169
-
170
- tokens = tokens.map { |t| Token.from_parser_token(t) } if tokens
171
-
172
- [ast, comments, tokens]
173
- end
174
-
175
- # rubocop:disable Metrics/MethodLength
176
- def parser_class(ruby_version)
177
- case ruby_version
178
- when 2.4
179
- require 'parser/ruby24'
180
- Parser::Ruby24
181
- when 2.5
182
- require 'parser/ruby25'
183
- Parser::Ruby25
184
- when 2.6
185
- require 'parser/ruby26'
186
- Parser::Ruby26
187
- when 2.7
188
- require 'parser/ruby27'
189
- Parser::Ruby27
190
- else
191
- raise ArgumentError,
192
- "RuboCop found unknown Ruby version: #{ruby_version.inspect}"
193
- end
194
- end
195
- # rubocop:enable Metrics/MethodLength
196
-
197
- def create_parser(ruby_version)
198
- builder = RuboCop::AST::Builder.new
199
-
200
- parser_class(ruby_version).new(builder).tap do |parser|
201
- # On JRuby there's a risk that we hang in tokenize() if we
202
- # don't set the all errors as fatal flag. The problem is caused by a bug
203
- # in Racc that is discussed in issue #93 of the whitequark/parser
204
- # project on GitHub.
205
- parser.diagnostics.all_errors_are_fatal = (RUBY_ENGINE != 'ruby')
206
- parser.diagnostics.ignore_warnings = false
207
- parser.diagnostics.consumer = lambda do |diagnostic|
208
- @diagnostics << diagnostic
209
- end
210
- end
211
- end
212
- end
213
- end
@@ -1,114 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module RuboCop
4
- # A basic wrapper around Parser's tokens.
5
- class Token
6
- attr_reader :pos, :type, :text
7
-
8
- def self.from_parser_token(parser_token)
9
- type, details = parser_token
10
- text, range = details
11
- new(range, type, text)
12
- end
13
-
14
- def initialize(pos, type, text)
15
- @pos = pos
16
- @type = type
17
- # Parser token "text" may be an Integer
18
- @text = text.to_s
19
- end
20
-
21
- def line
22
- @pos.line
23
- end
24
-
25
- def column
26
- @pos.column
27
- end
28
-
29
- def begin_pos
30
- @pos.begin_pos
31
- end
32
-
33
- def end_pos
34
- @pos.end_pos
35
- end
36
-
37
- def to_s
38
- "[[#{line}, #{column}], #{type}, #{text.inspect}]"
39
- end
40
-
41
- # Checks if there is whitespace after token
42
- def space_after?
43
- pos.source_buffer.source.match(/\G\s/, end_pos)
44
- end
45
-
46
- # Checks if there is whitespace before token
47
- def space_before?
48
- position = begin_pos.zero? ? begin_pos : begin_pos - 1
49
- pos.source_buffer.source.match(/\G\s/, position)
50
- end
51
-
52
- ## Type Predicates
53
-
54
- def comment?
55
- type == :tCOMMENT
56
- end
57
-
58
- def semicolon?
59
- type == :tSEMI
60
- end
61
-
62
- def left_array_bracket?
63
- type == :tLBRACK
64
- end
65
-
66
- def left_ref_bracket?
67
- type == :tLBRACK2
68
- end
69
-
70
- def left_bracket?
71
- %i[tLBRACK tLBRACK2].include?(type)
72
- end
73
-
74
- def right_bracket?
75
- type == :tRBRACK
76
- end
77
-
78
- def left_brace?
79
- type == :tLBRACE
80
- end
81
-
82
- def left_curly_brace?
83
- type == :tLCURLY
84
- end
85
-
86
- def right_curly_brace?
87
- type == :tRCURLY
88
- end
89
-
90
- def left_parens?
91
- %i[tLPAREN tLPAREN2].include?(type)
92
- end
93
-
94
- def right_parens?
95
- type == :tRPAREN
96
- end
97
-
98
- def comma?
99
- type == :tCOMMA
100
- end
101
-
102
- def rescue_modifier?
103
- type == :kRESCUE_MOD
104
- end
105
-
106
- def end?
107
- type == :kEND
108
- end
109
-
110
- def equal_sign?
111
- %i[tEQL tOP_ASGN].include?(type)
112
- end
113
- end
114
- end