rubocop 0.58.2 → 0.59.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (211) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +1 -1
  3. data/config/default.yml +22 -7
  4. data/config/disabled.yml +33 -4
  5. data/config/enabled.yml +4 -11
  6. data/lib/rubocop.rb +5 -0
  7. data/lib/rubocop/ast/builder.rb +1 -0
  8. data/lib/rubocop/ast/node.rb +11 -33
  9. data/lib/rubocop/ast/node/block_node.rb +8 -1
  10. data/lib/rubocop/ast/node/defined_node.rb +13 -0
  11. data/lib/rubocop/ast/node/mixin/method_dispatch_node.rb +16 -5
  12. data/lib/rubocop/ast/node/mixin/method_identifier_predicates.rb +21 -0
  13. data/lib/rubocop/ast/node/send_node.rb +3 -12
  14. data/lib/rubocop/ast/traversal.rb +10 -0
  15. data/lib/rubocop/cli.rb +4 -1
  16. data/lib/rubocop/config.rb +21 -5
  17. data/lib/rubocop/config_loader.rb +2 -0
  18. data/lib/rubocop/config_loader_resolver.rb +3 -1
  19. data/lib/rubocop/cop/autocorrect_logic.rb +1 -0
  20. data/lib/rubocop/cop/bundler/gem_comment.rb +64 -0
  21. data/lib/rubocop/cop/bundler/ordered_gems.rb +2 -0
  22. data/lib/rubocop/cop/commissioner.rb +2 -0
  23. data/lib/rubocop/cop/cop.rb +3 -0
  24. data/lib/rubocop/cop/corrector.rb +2 -0
  25. data/lib/rubocop/cop/correctors/alignment_corrector.rb +1 -0
  26. data/lib/rubocop/cop/correctors/line_break_corrector.rb +2 -0
  27. data/lib/rubocop/cop/correctors/space_corrector.rb +2 -0
  28. data/lib/rubocop/cop/force.rb +1 -0
  29. data/lib/rubocop/cop/gemspec/ordered_dependencies.rb +1 -0
  30. data/lib/rubocop/cop/generator.rb +1 -0
  31. data/lib/rubocop/cop/layout/access_modifier_indentation.rb +1 -0
  32. data/lib/rubocop/cop/layout/class_structure.rb +4 -0
  33. data/lib/rubocop/cop/layout/closing_heredoc_indentation.rb +5 -4
  34. data/lib/rubocop/cop/layout/closing_parenthesis_indentation.rb +35 -0
  35. data/lib/rubocop/cop/layout/else_alignment.rb +1 -0
  36. data/lib/rubocop/cop/layout/empty_line_between_defs.rb +2 -0
  37. data/lib/rubocop/cop/layout/empty_lines_around_arguments.rb +1 -0
  38. data/lib/rubocop/cop/layout/empty_lines_around_class_body.rb +5 -2
  39. data/lib/rubocop/cop/layout/empty_lines_around_exception_handling_keywords.rb +1 -0
  40. data/lib/rubocop/cop/layout/end_of_line.rb +1 -0
  41. data/lib/rubocop/cop/layout/extra_spacing.rb +1 -0
  42. data/lib/rubocop/cop/layout/indent_array.rb +1 -0
  43. data/lib/rubocop/cop/layout/indent_heredoc.rb +3 -0
  44. data/lib/rubocop/cop/layout/indentation_width.rb +2 -0
  45. data/lib/rubocop/cop/layout/multiline_method_call_indentation.rb +1 -0
  46. data/lib/rubocop/cop/layout/multiline_operation_indentation.rb +2 -1
  47. data/lib/rubocop/cop/layout/rescue_ensure_alignment.rb +34 -11
  48. data/lib/rubocop/cop/layout/space_after_method_name.rb +1 -0
  49. data/lib/rubocop/cop/layout/space_after_not.rb +1 -1
  50. data/lib/rubocop/cop/layout/space_around_keyword.rb +3 -1
  51. data/lib/rubocop/cop/layout/space_around_operators.rb +1 -0
  52. data/lib/rubocop/cop/layout/space_before_comment.rb +1 -0
  53. data/lib/rubocop/cop/layout/space_in_lambda_literal.rb +16 -8
  54. data/lib/rubocop/cop/layout/space_inside_array_literal_brackets.rb +2 -0
  55. data/lib/rubocop/cop/layout/space_inside_hash_literal_braces.rb +1 -1
  56. data/lib/rubocop/cop/layout/space_inside_reference_brackets.rb +2 -0
  57. data/lib/rubocop/cop/layout/tab.rb +1 -0
  58. data/lib/rubocop/cop/layout/trailing_whitespace.rb +1 -0
  59. data/lib/rubocop/cop/lint/deprecated_class_methods.rb +1 -0
  60. data/lib/rubocop/cop/lint/duplicate_methods.rb +9 -1
  61. data/lib/rubocop/cop/lint/format_parameter_mismatch.rb +1 -0
  62. data/lib/rubocop/cop/lint/ineffective_access_modifier.rb +1 -0
  63. data/lib/rubocop/cop/lint/interpolation_check.rb +2 -0
  64. data/lib/rubocop/cop/lint/literal_as_condition.rb +3 -6
  65. data/lib/rubocop/cop/lint/missing_cop_enable_directive.rb +1 -0
  66. data/lib/rubocop/cop/lint/nested_method_definition.rb +1 -0
  67. data/lib/rubocop/cop/lint/rescue_exception.rb +1 -0
  68. data/lib/rubocop/cop/lint/rescue_type.rb +1 -0
  69. data/lib/rubocop/cop/lint/safe_navigation_chain.rb +2 -2
  70. data/lib/rubocop/cop/lint/safe_navigation_consistency.rb +2 -0
  71. data/lib/rubocop/cop/lint/script_permission.rb +1 -0
  72. data/lib/rubocop/cop/lint/shadowed_argument.rb +3 -0
  73. data/lib/rubocop/cop/lint/shadowed_exception.rb +2 -0
  74. data/lib/rubocop/cop/lint/unneeded_cop_disable_directive.rb +1 -0
  75. data/lib/rubocop/cop/lint/unneeded_cop_enable_directive.rb +1 -0
  76. data/lib/rubocop/cop/lint/unneeded_require_statement.rb +1 -0
  77. data/lib/rubocop/cop/lint/unneeded_splat_expansion.rb +1 -1
  78. data/lib/rubocop/cop/lint/unreachable_code.rb +2 -0
  79. data/lib/rubocop/cop/lint/useless_assignment.rb +1 -0
  80. data/lib/rubocop/cop/lint/useless_setter_call.rb +3 -0
  81. data/lib/rubocop/cop/lint/void.rb +1 -0
  82. data/lib/rubocop/cop/message_annotator.rb +1 -0
  83. data/lib/rubocop/cop/metrics/block_length.rb +1 -0
  84. data/lib/rubocop/cop/metrics/block_nesting.rb +1 -0
  85. data/lib/rubocop/cop/metrics/line_length.rb +6 -1
  86. data/lib/rubocop/cop/metrics/method_length.rb +1 -0
  87. data/lib/rubocop/cop/mixin/annotation_comment.rb +1 -0
  88. data/lib/rubocop/cop/mixin/classish_length.rb +1 -0
  89. data/lib/rubocop/cop/mixin/configurable_enforced_style.rb +1 -0
  90. data/lib/rubocop/cop/mixin/configurable_formatting.rb +1 -0
  91. data/lib/rubocop/cop/mixin/empty_lines_around_body.rb +12 -6
  92. data/lib/rubocop/cop/mixin/empty_parameter.rb +1 -0
  93. data/lib/rubocop/cop/mixin/ignored_methods.rb +19 -0
  94. data/lib/rubocop/cop/mixin/multiline_expression_indentation.rb +25 -1
  95. data/lib/rubocop/cop/mixin/multiline_literal_brace_layout.rb +5 -3
  96. data/lib/rubocop/cop/mixin/percent_literal.rb +2 -0
  97. data/lib/rubocop/cop/mixin/preceding_following_alignment.rb +2 -0
  98. data/lib/rubocop/cop/mixin/safe_assignment.rb +2 -1
  99. data/lib/rubocop/cop/mixin/statement_modifier.rb +6 -1
  100. data/lib/rubocop/cop/mixin/string_literals_help.rb +1 -0
  101. data/lib/rubocop/cop/mixin/surrounding_space.rb +4 -0
  102. data/lib/rubocop/cop/mixin/trailing_comma.rb +1 -0
  103. data/lib/rubocop/cop/mixin/uncommunicative_name.rb +2 -0
  104. data/lib/rubocop/cop/naming/ascii_identifiers.rb +1 -0
  105. data/lib/rubocop/cop/naming/binary_operator_parameter_name.rb +1 -0
  106. data/lib/rubocop/cop/naming/file_name.rb +4 -1
  107. data/lib/rubocop/cop/naming/memoized_instance_variable_name.rb +1 -0
  108. data/lib/rubocop/cop/naming/predicate_name.rb +1 -0
  109. data/lib/rubocop/cop/naming/uncommunicative_block_param_name.rb +1 -0
  110. data/lib/rubocop/cop/naming/uncommunicative_method_param_name.rb +1 -0
  111. data/lib/rubocop/cop/naming/variable_name.rb +1 -0
  112. data/lib/rubocop/cop/performance/case_when_splat.rb +11 -7
  113. data/lib/rubocop/cop/performance/casecmp.rb +33 -42
  114. data/lib/rubocop/cop/performance/chain_array_allocation.rb +77 -0
  115. data/lib/rubocop/cop/performance/compare_with_block.rb +3 -0
  116. data/lib/rubocop/cop/performance/regexp_match.rb +1 -0
  117. data/lib/rubocop/cop/performance/sample.rb +2 -0
  118. data/lib/rubocop/cop/performance/size.rb +8 -2
  119. data/lib/rubocop/cop/performance/string_replacement.rb +1 -0
  120. data/lib/rubocop/cop/rails/active_support_aliases.rb +1 -0
  121. data/lib/rubocop/cop/rails/bulk_change_table.rb +9 -2
  122. data/lib/rubocop/cop/rails/create_table_with_timestamps.rb +1 -0
  123. data/lib/rubocop/cop/rails/delegate.rb +7 -2
  124. data/lib/rubocop/cop/rails/dynamic_find_by.rb +1 -0
  125. data/lib/rubocop/cop/rails/find_each.rb +7 -2
  126. data/lib/rubocop/cop/rails/http_positional_arguments.rb +1 -1
  127. data/lib/rubocop/cop/rails/http_status.rb +2 -0
  128. data/lib/rubocop/cop/rails/inverse_of.rb +4 -0
  129. data/lib/rubocop/cop/rails/lexically_scoped_action_filter.rb +1 -0
  130. data/lib/rubocop/cop/rails/redundant_receiver_in_with_options.rb +1 -0
  131. data/lib/rubocop/cop/rails/reversible_migration.rb +1 -0
  132. data/lib/rubocop/cop/rails/save_bang.rb +189 -38
  133. data/lib/rubocop/cop/rails/time_zone.rb +1 -0
  134. data/lib/rubocop/cop/security/eval.rb +1 -0
  135. data/lib/rubocop/cop/security/json_load.rb +2 -2
  136. data/lib/rubocop/cop/security/open.rb +6 -3
  137. data/lib/rubocop/cop/severity.rb +1 -0
  138. data/lib/rubocop/cop/style/and_or.rb +3 -3
  139. data/lib/rubocop/cop/style/ascii_comments.rb +1 -0
  140. data/lib/rubocop/cop/style/block_delimiters.rb +2 -4
  141. data/lib/rubocop/cop/style/braces_around_hash_parameters.rb +2 -3
  142. data/lib/rubocop/cop/style/class_and_module_children.rb +3 -0
  143. data/lib/rubocop/cop/style/class_vars.rb +1 -1
  144. data/lib/rubocop/cop/style/colon_method_definition.rb +1 -0
  145. data/lib/rubocop/cop/style/commented_keyword.rb +2 -0
  146. data/lib/rubocop/cop/style/conditional_assignment.rb +2 -0
  147. data/lib/rubocop/cop/style/copyright.rb +7 -2
  148. data/lib/rubocop/cop/style/date_time.rb +40 -7
  149. data/lib/rubocop/cop/style/double_negation.rb +1 -1
  150. data/lib/rubocop/cop/style/empty_case_condition.rb +8 -0
  151. data/lib/rubocop/cop/style/empty_else.rb +2 -0
  152. data/lib/rubocop/cop/style/empty_lambda_parameter.rb +1 -0
  153. data/lib/rubocop/cop/style/eval_with_location.rb +2 -0
  154. data/lib/rubocop/cop/style/for.rb +56 -10
  155. data/lib/rubocop/cop/style/format_string_token.rb +1 -1
  156. data/lib/rubocop/cop/style/if_with_semicolon.rb +1 -0
  157. data/lib/rubocop/cop/style/inverse_methods.rb +1 -0
  158. data/lib/rubocop/cop/style/lambda.rb +1 -0
  159. data/lib/rubocop/cop/style/method_call_with_args_parentheses.rb +3 -5
  160. data/lib/rubocop/cop/style/method_call_without_args_parentheses.rb +3 -5
  161. data/lib/rubocop/cop/style/method_def_parentheses.rb +2 -2
  162. data/lib/rubocop/cop/style/missing_else.rb +1 -0
  163. data/lib/rubocop/cop/style/multiline_memoization.rb +1 -0
  164. data/lib/rubocop/cop/style/multiline_method_signature.rb +65 -0
  165. data/lib/rubocop/cop/style/multiple_comparison.rb +1 -0
  166. data/lib/rubocop/cop/style/nil_comparison.rb +45 -5
  167. data/lib/rubocop/cop/style/not.rb +1 -1
  168. data/lib/rubocop/cop/style/numeric_predicate.rb +5 -0
  169. data/lib/rubocop/cop/style/one_line_conditional.rb +1 -1
  170. data/lib/rubocop/cop/style/or_assignment.rb +2 -0
  171. data/lib/rubocop/cop/style/percent_q_literals.rb +1 -1
  172. data/lib/rubocop/cop/style/random_with_offset.rb +1 -0
  173. data/lib/rubocop/cop/style/redundant_begin.rb +13 -0
  174. data/lib/rubocop/cop/style/redundant_conditional.rb +1 -0
  175. data/lib/rubocop/cop/style/redundant_parentheses.rb +6 -1
  176. data/lib/rubocop/cop/style/redundant_return.rb +1 -0
  177. data/lib/rubocop/cop/style/rescue_modifier.rb +1 -0
  178. data/lib/rubocop/cop/style/rescue_standard_error.rb +1 -0
  179. data/lib/rubocop/cop/style/safe_navigation.rb +4 -0
  180. data/lib/rubocop/cop/style/semicolon.rb +4 -0
  181. data/lib/rubocop/cop/style/signal_exception.rb +1 -0
  182. data/lib/rubocop/cop/style/string_hash_keys.rb +1 -0
  183. data/lib/rubocop/cop/style/symbol_proc.rb +1 -8
  184. data/lib/rubocop/cop/style/trailing_comma_in_array_literal.rb +1 -0
  185. data/lib/rubocop/cop/style/trailing_method_end_statement.rb +1 -0
  186. data/lib/rubocop/cop/style/trailing_underscore_variable.rb +1 -0
  187. data/lib/rubocop/cop/style/unneeded_condition.rb +13 -2
  188. data/lib/rubocop/cop/style/unneeded_percent_q.rb +2 -0
  189. data/lib/rubocop/cop/style/word_array.rb +13 -1
  190. data/lib/rubocop/cop/team.rb +1 -0
  191. data/lib/rubocop/cop/variable_force.rb +5 -0
  192. data/lib/rubocop/cop/variable_force/assignment.rb +4 -0
  193. data/lib/rubocop/cop/variable_force/branch.rb +4 -0
  194. data/lib/rubocop/cop/variable_force/branchable.rb +2 -0
  195. data/lib/rubocop/cop/variable_force/scope.rb +6 -0
  196. data/lib/rubocop/cop/variable_force/variable_table.rb +1 -0
  197. data/lib/rubocop/file_finder.rb +2 -0
  198. data/lib/rubocop/formatter/disabled_config_formatter.rb +4 -4
  199. data/lib/rubocop/formatter/file_list_formatter.rb +1 -0
  200. data/lib/rubocop/formatter/simple_text_formatter.rb +1 -0
  201. data/lib/rubocop/options.rb +16 -0
  202. data/lib/rubocop/path_util.rb +16 -1
  203. data/lib/rubocop/processed_source.rb +4 -0
  204. data/lib/rubocop/remote_config.rb +6 -1
  205. data/lib/rubocop/result_cache.rb +1 -0
  206. data/lib/rubocop/rspec/cop_helper.rb +3 -5
  207. data/lib/rubocop/rspec/shared_examples.rb +1 -9
  208. data/lib/rubocop/runner.rb +4 -0
  209. data/lib/rubocop/target_finder.rb +2 -0
  210. data/lib/rubocop/version.rb +1 -1
  211. metadata +7 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 3195801b4e3ffa9ab52997ec2600cdc62b5c4e23
4
- data.tar.gz: 8b1276d6c0101f1556d374e67d1749010b53542a
3
+ metadata.gz: 3604f5385c9cdb9a48c56e4b02e873b1f03adc3c
4
+ data.tar.gz: '039e08df8dc0c3fa47b0a035e650dbdc52068527'
5
5
  SHA512:
6
- metadata.gz: a5dff57a5eeecb51495820462954f998817b9ad3b9018e603ee0f2f79ea8445e9e4bbe49578f3bdb091fbe47a8f53d179c3713c449fbc6510a7f068f96e7c015
7
- data.tar.gz: 0a4d5da0871e328ca5bd9de6b048d3eac8e74a6b95f6682f0ddfbd220a6e4b13a4925e4d31473184fc0bfe818245a93d40225b2353011f88cf12da55e026dd32
6
+ metadata.gz: 0c6b9b6cce39cf4f4977f691a58b43362249e537e798ecb52d639147b8a92df7b32b6aa8553258b66f7093638c0afc11427390ea71cb90c872dbc8510d14359f
7
+ data.tar.gz: 2f529fb7c60a2ffc733582edec86c1f66059a41e23a0835adf4d3f05593e6e49d0b061d91d06e4e968e7d5c544505e6781a71bfbe20234262eaa080091d86ffe
data/README.md CHANGED
@@ -54,7 +54,7 @@ haven't reached version 1.0 yet). To prevent an unwanted RuboCop update you
54
54
  might want to use a conservative version locking in your `Gemfile`:
55
55
 
56
56
  ```rb
57
- gem 'rubocop', '~> 0.58.2', require: false
57
+ gem 'rubocop', '~> 0.59.0', require: false
58
58
  ```
59
59
 
60
60
  ## Quickstart
@@ -96,7 +96,7 @@ AllCops:
96
96
  # cops in user configuration will be enabled even if they don't set the
97
97
  # Enabled parameter.
98
98
  # When `EnabledByDefault` is `true`, all cops, even those in disabled.yml,
99
- # are enabled by default. Cops can still be disabled in user configuration.
99
+ # are enabled by default. Cops can still be disabled in user configuration.
100
100
  # Note that it is invalid to set both EnabledByDefault and DisabledByDefault
101
101
  # to true in the same configuration.
102
102
  EnabledByDefault: false
@@ -132,11 +132,11 @@ AllCops:
132
132
  # use the oldest officially supported Ruby version (currently Ruby 2.2).
133
133
  TargetRubyVersion: ~
134
134
  # What version of Rails is the inspected code using? If a value is specified
135
- # for TargetRailsVersion then it is used. Acceptable values are specificed
135
+ # for TargetRailsVersion then it is used. Acceptable values are specificed
136
136
  # as a float (i.e. 5.1); the patch version of Rails should not be included.
137
137
  # If TargetRailsVersion is not set, RuboCop will parse the Gemfile.lock or
138
138
  # gems.locked file to find the version of Rails that has been bound to the
139
- # application. If neither of those files exist, RuboCop will use Rails 5.0
139
+ # application. If neither of those files exist, RuboCop will use Rails 5.0
140
140
  # as the default.
141
141
  TargetRailsVersion: ~
142
142
 
@@ -669,8 +669,8 @@ Layout/TrailingWhitespace:
669
669
  #################### Naming ##########################
670
670
 
671
671
  Naming/FileName:
672
- # File names listed in `AllCops:Include` are excluded by default. Add extra
673
- # excludes here.
672
+ # Camel case file names listed in `AllCops:Include` and all file names listed
673
+ # in `AllCops:Exclude` are excluded by default. Add extra excludes here.
674
674
  Exclude: []
675
675
  # When `true`, requires that each source file should define a class or module
676
676
  # with a name which matches the file name (converted to ... case).
@@ -798,6 +798,7 @@ Naming/UncommunicativeMethodParamName:
798
798
  - in
799
799
  - at
800
800
  - ip
801
+ - db
801
802
  # Blacklisted names that will register an offense
802
803
  ForbiddenNames: []
803
804
 
@@ -1015,7 +1016,7 @@ Style/ConditionalAssignment:
1015
1016
  # You can override the default Notice in your .rubocop.yml file.
1016
1017
  #
1017
1018
  # In order to use autocorrect, you must supply a value for the
1018
- # `AutocorrectNotice` key that matches the regexp Notice. A blank
1019
+ # `AutocorrectNotice` key that matches the regexp Notice. A blank
1019
1020
  # `AutocorrectNotice` will cause an error during autocorrect.
1020
1021
  #
1021
1022
  # Autocorrect will add a copyright notice in a comment at the top
@@ -1246,6 +1247,12 @@ Style/Next:
1246
1247
  - skip_modifier_ifs
1247
1248
  - always
1248
1249
 
1250
+ Style/NilComparison:
1251
+ EnforcedStyle: predicate
1252
+ SupportedStyles:
1253
+ - predicate
1254
+ - comparison
1255
+
1249
1256
  Style/NonNilCheck:
1250
1257
  # With `IncludeSemanticChanges` set to `true`, this cop reports offenses for
1251
1258
  # `!x.nil?` and autocorrects that and `x != nil` to solely `x`, which is
@@ -1270,6 +1277,7 @@ Style/NumericPredicate:
1270
1277
  SupportedStyles:
1271
1278
  - predicate
1272
1279
  - comparison
1280
+ IgnoredMethods: []
1273
1281
  # Exclude RSpec specs because assertions like `expect(1).to be > 0` cause
1274
1282
  # false positives.
1275
1283
  Exclude:
@@ -1528,7 +1536,7 @@ Style/WordArray:
1528
1536
  # bracket style: ['word1', 'word2']
1529
1537
  - brackets
1530
1538
  # The `MinSize` option causes the `WordArray` rule to be ignored for arrays
1531
- # smaller than a certain size. The rule is only applied to arrays
1539
+ # smaller than a certain size. The rule is only applied to arrays
1532
1540
  # whose element count is greater than or equal to `MinSize`.
1533
1541
  MinSize: 2
1534
1542
  # The regular expression `WordRegex` decides what is considered a word.
@@ -1802,6 +1810,9 @@ Rails/RefuteMethods:
1802
1810
  Include:
1803
1811
  - '**/test/**/*'
1804
1812
 
1813
+ Rails/RelativeDateConstant:
1814
+ AutoCorrect: false
1815
+
1805
1816
  Rails/RequestReferer:
1806
1817
  EnforcedStyle: referer
1807
1818
  SupportedStyles:
@@ -1819,6 +1830,10 @@ Rails/SafeNavigation:
1819
1830
  # implement the intended method. `try` will not raise an exception for this.
1820
1831
  ConvertTry: false
1821
1832
 
1833
+ Rails/SaveBang:
1834
+ AllowImplicitReturn: true
1835
+ AllowedReceivers: []
1836
+
1822
1837
  Rails/ScopeArgs:
1823
1838
  Include:
1824
1839
  - app/models/**/*.rb
@@ -1,14 +1,19 @@
1
1
  # These are all the cops that are disabled in the default configuration.
2
2
 
3
+ Bundler/GemComment:
4
+ Description: 'Add a comment describing each gem.'
5
+ Enabled: false
6
+ Include:
7
+ - '**/*.gemfile'
8
+ - '**/Gemfile'
9
+ - '**/gems.rb'
10
+ Whitelist: []
11
+
3
12
  Layout/ClassStructure:
4
13
  Description: 'Enforces a configured order of definitions within a class body.'
5
14
  StyleGuide: 'https://github.com/rubocop-hq/ruby-style-guide#consistent-classes'
6
15
  Enabled: false
7
16
 
8
- Layout/EmptyLineAfterGuardClause:
9
- Description: 'Add empty line after guard clause.'
10
- Enabled: false
11
-
12
17
  Layout/FirstArrayElementLineBreak:
13
18
  Description: >-
14
19
  Checks for a line break before the first element in a
@@ -42,6 +47,20 @@ Lint/NumberConversion:
42
47
  Description: 'Checks unsafe usage of number conversion methods.'
43
48
  Enabled: false
44
49
 
50
+ Performance/CaseWhenSplat:
51
+ Description: >-
52
+ Reordering `when` conditions with a splat to the end
53
+ of the `when` branches can improve performance.
54
+ Enabled: false
55
+ AutoCorrect: false
56
+
57
+ Performance/ChainArrayAllocation:
58
+ Description: >-
59
+ Instead of chaining array methods that allocate new arrays, mutate an
60
+ existing array.
61
+ Reference: 'https://twitter.com/schneems/status/1034123879978029057'
62
+ Enabled: false
63
+
45
64
  # By default, the rails cops are not run. Override in project or home
46
65
  # directory .rubocop.yml files, or by giving the -R/--rails option.
47
66
  Rails:
@@ -65,6 +84,12 @@ Style/Copyright:
65
84
  Description: 'Include a copyright notice in each file before any code.'
66
85
  Enabled: false
67
86
 
87
+ Style/DateTime:
88
+ Description: 'Use Time over DateTime.'
89
+ StyleGuide: '#date--time'
90
+ Enabled: false
91
+ AllowCoercion: false
92
+
68
93
  Style/DocumentationMethod:
69
94
  Description: 'Public methods.'
70
95
  Enabled: false
@@ -105,6 +130,10 @@ Style/MissingElse:
105
130
  Style/EmptyElse is configured to style "both"
106
131
  Enabled: false
107
132
 
133
+ Style/MultilineMethodSignature:
134
+ Description: 'Avoid multi-line method signatures.'
135
+ Enabled: false
136
+
108
137
  Style/OptionHash:
109
138
  Description: "Don't use option hashes when you can use keyword arguments."
110
139
  Enabled: false
@@ -127,6 +127,10 @@ Layout/EmptyComment:
127
127
  Description: 'Checks empty comment.'
128
128
  Enabled: true
129
129
 
130
+ Layout/EmptyLineAfterGuardClause:
131
+ Description: 'Add empty line after guard clause.'
132
+ Enabled: true
133
+
130
134
  Layout/EmptyLineAfterMagicComment:
131
135
  Description: 'Add an empty line after magic comments to separate them from code.'
132
136
  StyleGuide: '#separate-magic-comments-from-code'
@@ -921,12 +925,6 @@ Performance/Caller:
921
925
  Use `caller(n..n)` instead of `caller`.
922
926
  Enabled: true
923
927
 
924
- Performance/CaseWhenSplat:
925
- Description: >-
926
- Place `when` conditions that use splat at the end
927
- of the list of `when` branches.
928
- Enabled: true
929
-
930
928
  Performance/Casecmp:
931
929
  Description: >-
932
930
  Use `casecmp` rather than `downcase ==`, `upcase ==`, `== downcase`, or `== upcase`..
@@ -1459,11 +1457,6 @@ Style/ConditionalAssignment:
1459
1457
  of assigning that variable inside of each branch.
1460
1458
  Enabled: true
1461
1459
 
1462
- Style/DateTime:
1463
- Description: 'Use Date or Time over DateTime.'
1464
- StyleGuide: '#date--time'
1465
- Enabled: true
1466
-
1467
1460
  Style/DefWithParentheses:
1468
1461
  Description: 'Use def with parentheses when there are arguments.'
1469
1462
  StyleGuide: '#method-parens'
@@ -40,6 +40,7 @@ require_relative 'rubocop/ast/node/array_node'
40
40
  require_relative 'rubocop/ast/node/block_node'
41
41
  require_relative 'rubocop/ast/node/case_node'
42
42
  require_relative 'rubocop/ast/node/def_node'
43
+ require_relative 'rubocop/ast/node/defined_node'
43
44
  require_relative 'rubocop/ast/node/ensure_node'
44
45
  require_relative 'rubocop/ast/node/for_node'
45
46
  require_relative 'rubocop/ast/node/hash_node'
@@ -111,6 +112,7 @@ require_relative 'rubocop/cop/mixin/first_element_line_break'
111
112
  require_relative 'rubocop/cop/mixin/frozen_string_literal'
112
113
  require_relative 'rubocop/cop/mixin/hash_alignment'
113
114
  require_relative 'rubocop/cop/mixin/ignored_pattern'
115
+ require_relative 'rubocop/cop/mixin/ignored_methods'
114
116
  require_relative 'rubocop/cop/mixin/integer_node'
115
117
  require_relative 'rubocop/cop/mixin/match_range'
116
118
  require_relative 'rubocop/cop/mixin/method_complexity'
@@ -158,6 +160,7 @@ require_relative 'rubocop/cop/correctors/string_literal_corrector'
158
160
  require_relative 'rubocop/cop/correctors/unused_arg_corrector'
159
161
 
160
162
  require_relative 'rubocop/cop/bundler/duplicated_gem'
163
+ require_relative 'rubocop/cop/bundler/gem_comment'
161
164
  require_relative 'rubocop/cop/bundler/insecure_protocol_source'
162
165
  require_relative 'rubocop/cop/bundler/ordered_gems'
163
166
 
@@ -378,6 +381,7 @@ require_relative 'rubocop/cop/performance/times_map'
378
381
  require_relative 'rubocop/cop/performance/unfreeze_string'
379
382
  require_relative 'rubocop/cop/performance/unneeded_sort'
380
383
  require_relative 'rubocop/cop/performance/uri_default_parser'
384
+ require_relative 'rubocop/cop/performance/chain_array_allocation'
381
385
 
382
386
  require_relative 'rubocop/cop/style/access_modifier_declarations'
383
387
  require_relative 'rubocop/cop/style/alias'
@@ -459,6 +463,7 @@ require_relative 'rubocop/cop/style/module_function'
459
463
  require_relative 'rubocop/cop/style/multiline_block_chain'
460
464
  require_relative 'rubocop/cop/style/multiline_if_then'
461
465
  require_relative 'rubocop/cop/style/multiline_if_modifier'
466
+ require_relative 'rubocop/cop/style/multiline_method_signature'
462
467
  require_relative 'rubocop/cop/style/multiline_memoization'
463
468
  require_relative 'rubocop/cop/style/multiline_ternary_operator'
464
469
  require_relative 'rubocop/cop/style/multiple_comparison'
@@ -21,6 +21,7 @@ module RuboCop
21
21
  block: BlockNode,
22
22
  case: CaseNode,
23
23
  def: DefNode,
24
+ defined?: DefinedNode,
24
25
  defs: DefNode,
25
26
  ensure: EnsureNode,
26
27
  for: ForNode,
@@ -24,7 +24,6 @@ module RuboCop
24
24
 
25
25
  # <=> isn't included here, because it doesn't return a boolean.
26
26
  COMPARISON_OPERATORS = %i[== === != <= >= > <].freeze
27
- ARITHMETIC_OPERATORS = %i[+ - * / % **].freeze
28
27
 
29
28
  TRUTHY_LITERALS = %i[str dstr xstr int float sym dsym array
30
29
  hash regexp true irange erange complex
@@ -182,6 +181,7 @@ module RuboCop
182
181
 
183
182
  children.each do |child|
184
183
  next unless child.is_a?(Node)
184
+
185
185
  yield child if types.empty? || types.include?(child.type)
186
186
  end
187
187
 
@@ -280,6 +280,7 @@ module RuboCop
280
280
 
281
281
  def line_count
282
282
  return 0 unless source_range
283
+
283
284
  source_range.last_line - source_range.first_line + 1
284
285
  end
285
286
 
@@ -297,16 +298,13 @@ module RuboCop
297
298
  {(send $_ ...) (block (send $_ ...) ...)}
298
299
  PATTERN
299
300
 
300
- def_node_matcher :method_name, <<-PATTERN
301
- {(send _ $_ ...) (block (send _ $_ ...) ...)}
302
- PATTERN
303
-
304
301
  # Note: for masgn, #asgn_rhs will be an array node
305
302
  def_node_matcher :asgn_rhs, '[assignment? (... $_)]'
306
303
  def_node_matcher :str_content, '(str $_)'
307
304
 
308
305
  def const_name
309
306
  return unless const_type?
307
+
310
308
  namespace, name = *self
311
309
  if namespace && !namespace.cbase_type?
312
310
  "#{namespace.const_name}::#{name}"
@@ -360,15 +358,6 @@ module RuboCop
360
358
  source_length.zero?
361
359
  end
362
360
 
363
- def asgn_method_call?
364
- !COMPARISON_OPERATORS.include?(method_name) &&
365
- method_name.to_s.end_with?('='.freeze)
366
- end
367
-
368
- def arithmetic_operation?
369
- ARITHMETIC_OPERATORS.include?(method_name)
370
- end
371
-
372
361
  def_node_matcher :equals_asgn?, <<-PATTERN
373
362
  {lvasgn ivasgn cvasgn gvasgn casgn masgn}
374
363
  PATTERN
@@ -376,7 +365,7 @@ module RuboCop
376
365
  def_node_matcher :shorthand_asgn?, '{op_asgn or_asgn and_asgn}'
377
366
 
378
367
  def_node_matcher :assignment?, <<-PATTERN
379
- {equals_asgn? shorthand_asgn? asgn_method_call?}
368
+ {equals_asgn? shorthand_asgn?}
380
369
  PATTERN
381
370
 
382
371
  # Some cops treat the shovel operator as a kind of assignment.
@@ -414,10 +403,9 @@ module RuboCop
414
403
  define_method(recursive_kind) do
415
404
  case type
416
405
  when :send
417
- receiver, method_name, *args = *self
418
406
  [*COMPARISON_OPERATORS, :!, :<=>].include?(method_name) &&
419
407
  receiver.send(recursive_kind) &&
420
- args.all?(&recursive_kind)
408
+ arguments.all?(&recursive_kind)
421
409
  when :begin, :pair, *OPERATOR_KEYWORDS, *COMPOSITE_LITERALS
422
410
  children.all?(&recursive_kind)
423
411
  else
@@ -435,7 +423,7 @@ module RuboCop
435
423
  end
436
424
 
437
425
  def keyword?
438
- return true if special_keyword? || keyword_not?
426
+ return true if special_keyword? || send_type? && prefix_not?
439
427
  return false unless KEYWORDS.include?(type)
440
428
 
441
429
  !OPERATOR_KEYWORDS.include?(type) || loc.operator.is?(type.to_s)
@@ -449,24 +437,16 @@ module RuboCop
449
437
  OPERATOR_KEYWORDS.include?(type)
450
438
  end
451
439
 
452
- def keyword_not?
453
- _receiver, method_name, *args = *self
454
- args.empty? && method_name == :! && loc.selector.is?('not'.freeze)
455
- end
456
-
457
- def keyword_bang?
458
- _receiver, method_name, *args = *self
459
- args.empty? && method_name == :! && loc.selector.is?('!'.freeze)
460
- end
461
-
462
440
  def unary_operation?
463
441
  return false unless loc.respond_to?(:selector) && loc.selector
442
+
464
443
  Cop::Util.operator?(loc.selector.source.to_sym) &&
465
444
  source_range.begin_pos == loc.selector.begin_pos
466
445
  end
467
446
 
468
447
  def binary_operation?
469
448
  return false unless loc.respond_to?(:selector) && loc.selector
449
+
470
450
  Cop::Util.operator?(method_name) &&
471
451
  source_range.begin_pos != loc.selector.begin_pos
472
452
  end
@@ -476,14 +456,11 @@ module RuboCop
476
456
  end
477
457
 
478
458
  def chained?
479
- return false unless argument?
480
-
481
- receiver, _method_name, *_args = *parent
482
- equal?(receiver)
459
+ parent && parent.send_type? && eql?(parent.receiver)
483
460
  end
484
461
 
485
462
  def argument?
486
- parent && parent.send_type?
463
+ parent && parent.send_type? && parent.arguments.include?(self)
487
464
  end
488
465
 
489
466
  def numeric_type?
@@ -641,6 +618,7 @@ module RuboCop
641
618
  # `class_eval` with no receiver applies to whatever module or class
642
619
  # we are currently in
643
620
  return unless (receiver = ancestor.receiver)
621
+
644
622
  yield unless receiver.const_type?
645
623
  receiver.const_name
646
624
  elsif !new_class_or_module_block?(ancestor)
@@ -32,6 +32,13 @@ module RuboCop
32
32
  node_parts[2]
33
33
  end
34
34
 
35
+ # The name of the dispatched method as a symbol.
36
+ #
37
+ # @return [Symbol] the name of the dispatched method
38
+ def method_name
39
+ send_node.method_name
40
+ end
41
+
35
42
  # Checks whether this block takes any arguments.
36
43
  #
37
44
  # @return [Boolean] whether this `block` node takes any arguments
@@ -101,7 +108,7 @@ module RuboCop
101
108
  #
102
109
  # @return [Boolean] whether the `block` node body is a void context
103
110
  def void_context?
104
- VOID_CONTEXT_METHODS.include?(send_node.method_name)
111
+ VOID_CONTEXT_METHODS.include?(method_name)
105
112
  end
106
113
  end
107
114
  end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RuboCop
4
+ module AST
5
+ # A node extension for `defined?` nodes. This will be used in place of a
6
+ # plain node when the builder constructs the AST, making its methods
7
+ # available to all `send` nodes within RuboCop.
8
+ class DefinedNode < Node
9
+ include ParameterizedNode
10
+ include MethodDispatchNode
11
+ end
12
+ end
13
+ end
@@ -8,6 +8,8 @@ module RuboCop
8
8
  extend NodePattern::Macros
9
9
  include MethodIdentifierPredicates
10
10
 
11
+ ARITHMETIC_OPERATORS = %i[+ - * / % **].freeze
12
+
11
13
  # The receiving node of the method dispatch.
12
14
  #
13
15
  # @return [Node, nil] the receiver of the dispatched method or `nil`
@@ -29,6 +31,14 @@ module RuboCop
29
31
  node_parts[2..-1]
30
32
  end
31
33
 
34
+ # The `block` node associated with this method dispatch, if any.
35
+ #
36
+ # @return [BlockNode, nil] the `block` node associated with this method
37
+ # call or `nil`
38
+ def block_node
39
+ parent if block_literal?
40
+ end
41
+
32
42
  # Checks whether the dispatched method is a macro method. A macro method
33
43
  # is defined as a method that sits in a class, module, or block body and
34
44
  # has an implicit receiver.
@@ -80,6 +90,7 @@ module RuboCop
80
90
  def setter_method?
81
91
  loc.respond_to?(:operator) && loc.operator
82
92
  end
93
+ alias assignment? setter_method?
83
94
 
84
95
  # Checks whether the dispatched method uses a dot to connect the
85
96
  # receiver and the method name.
@@ -132,12 +143,12 @@ module RuboCop
132
143
  parent && parent.block_type? && eql?(parent.send_node)
133
144
  end
134
145
 
135
- # The `block` node associated with this method dispatch, if any.
146
+ # Checks whether this node is an arithmetic operation
136
147
  #
137
- # @return [BlockNode, nil] the `block` node associated with this method
138
- # call or `nil`
139
- def block_node
140
- parent if block_literal?
148
+ # @return [Boolean] whether the dispatched method is an arithmetic
149
+ # operation
150
+ def arithmetic_operation?
151
+ ARITHMETIC_OPERATORS.include?(method_name)
141
152
  end
142
153
 
143
154
  # Checks if this node is part of a chain of `def` modifiers.