rbhint 0.8.5.rc1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (583) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE.txt +20 -0
  3. data/README.md +107 -0
  4. data/assets/logo.png +0 -0
  5. data/assets/output.html.erb +261 -0
  6. data/bin/console +10 -0
  7. data/bin/setup +7 -0
  8. data/config/default.yml +4133 -0
  9. data/exe/rbhint +17 -0
  10. data/lib/rbhint.rb +6 -0
  11. data/lib/rbhint/version.rb +7 -0
  12. data/lib/rubocop.rb +588 -0
  13. data/lib/rubocop/ast_aliases.rb +8 -0
  14. data/lib/rubocop/cached_data.rb +58 -0
  15. data/lib/rubocop/cli.rb +133 -0
  16. data/lib/rubocop/cli/command.rb +21 -0
  17. data/lib/rubocop/cli/command/auto_genenerate_config.rb +105 -0
  18. data/lib/rubocop/cli/command/base.rb +33 -0
  19. data/lib/rubocop/cli/command/execute_runner.rb +76 -0
  20. data/lib/rubocop/cli/command/init_dotfile.rb +45 -0
  21. data/lib/rubocop/cli/command/show_cops.rb +76 -0
  22. data/lib/rubocop/cli/command/version.rb +17 -0
  23. data/lib/rubocop/cli/environment.rb +21 -0
  24. data/lib/rubocop/comment_config.rb +206 -0
  25. data/lib/rubocop/config.rb +281 -0
  26. data/lib/rubocop/config_loader.rb +277 -0
  27. data/lib/rubocop/config_loader_resolver.rb +234 -0
  28. data/lib/rubocop/config_obsoletion.rb +278 -0
  29. data/lib/rubocop/config_store.rb +58 -0
  30. data/lib/rubocop/config_validator.rb +223 -0
  31. data/lib/rubocop/cop/autocorrect_logic.rb +105 -0
  32. data/lib/rubocop/cop/badge.rb +73 -0
  33. data/lib/rubocop/cop/bundler/duplicated_gem.rb +73 -0
  34. data/lib/rubocop/cop/bundler/gem_comment.rb +133 -0
  35. data/lib/rubocop/cop/bundler/insecure_protocol_source.rb +69 -0
  36. data/lib/rubocop/cop/bundler/ordered_gems.rb +73 -0
  37. data/lib/rubocop/cop/commissioner.rb +124 -0
  38. data/lib/rubocop/cop/cop.rb +311 -0
  39. data/lib/rubocop/cop/corrector.rb +196 -0
  40. data/lib/rubocop/cop/correctors/alignment_corrector.rb +142 -0
  41. data/lib/rubocop/cop/correctors/condition_corrector.rb +27 -0
  42. data/lib/rubocop/cop/correctors/each_to_for_corrector.rb +53 -0
  43. data/lib/rubocop/cop/correctors/empty_line_corrector.rb +26 -0
  44. data/lib/rubocop/cop/correctors/for_to_each_corrector.rb +73 -0
  45. data/lib/rubocop/cop/correctors/lambda_literal_to_method_corrector.rb +136 -0
  46. data/lib/rubocop/cop/correctors/line_break_corrector.rb +61 -0
  47. data/lib/rubocop/cop/correctors/multiline_literal_brace_corrector.rb +68 -0
  48. data/lib/rubocop/cop/correctors/ordered_gem_corrector.rb +44 -0
  49. data/lib/rubocop/cop/correctors/parentheses_corrector.rb +31 -0
  50. data/lib/rubocop/cop/correctors/percent_literal_corrector.rb +117 -0
  51. data/lib/rubocop/cop/correctors/punctuation_corrector.rb +29 -0
  52. data/lib/rubocop/cop/correctors/space_corrector.rb +46 -0
  53. data/lib/rubocop/cop/correctors/string_literal_corrector.rb +25 -0
  54. data/lib/rubocop/cop/correctors/unused_arg_corrector.rb +43 -0
  55. data/lib/rubocop/cop/force.rb +42 -0
  56. data/lib/rubocop/cop/gemspec/duplicated_assignment.rb +104 -0
  57. data/lib/rubocop/cop/gemspec/ordered_dependencies.rb +104 -0
  58. data/lib/rubocop/cop/gemspec/required_ruby_version.rb +85 -0
  59. data/lib/rubocop/cop/gemspec/ruby_version_globals_usage.rb +55 -0
  60. data/lib/rubocop/cop/generator.rb +223 -0
  61. data/lib/rubocop/cop/generator/configuration_injector.rb +66 -0
  62. data/lib/rubocop/cop/generator/require_file_injector.rb +78 -0
  63. data/lib/rubocop/cop/ignored_node.rb +36 -0
  64. data/lib/rubocop/cop/internal_affairs.rb +9 -0
  65. data/lib/rubocop/cop/internal_affairs/method_name_equal.rb +59 -0
  66. data/lib/rubocop/cop/internal_affairs/node_destructuring.rb +44 -0
  67. data/lib/rubocop/cop/internal_affairs/node_type_predicate.rb +44 -0
  68. data/lib/rubocop/cop/internal_affairs/offense_location_keyword.rb +54 -0
  69. data/lib/rubocop/cop/internal_affairs/redundant_location_argument.rb +48 -0
  70. data/lib/rubocop/cop/internal_affairs/redundant_message_argument.rb +73 -0
  71. data/lib/rubocop/cop/internal_affairs/useless_message_assertion.rb +52 -0
  72. data/lib/rubocop/cop/layout/access_modifier_indentation.rb +98 -0
  73. data/lib/rubocop/cop/layout/argument_alignment.rb +93 -0
  74. data/lib/rubocop/cop/layout/array_alignment.rb +82 -0
  75. data/lib/rubocop/cop/layout/assignment_indentation.rb +55 -0
  76. data/lib/rubocop/cop/layout/block_alignment.rb +244 -0
  77. data/lib/rubocop/cop/layout/block_end_newline.rb +64 -0
  78. data/lib/rubocop/cop/layout/case_indentation.rb +161 -0
  79. data/lib/rubocop/cop/layout/class_structure.rb +343 -0
  80. data/lib/rubocop/cop/layout/closing_heredoc_indentation.rb +126 -0
  81. data/lib/rubocop/cop/layout/closing_parenthesis_indentation.rb +203 -0
  82. data/lib/rubocop/cop/layout/comment_indentation.rb +141 -0
  83. data/lib/rubocop/cop/layout/condition_position.rb +66 -0
  84. data/lib/rubocop/cop/layout/def_end_alignment.rb +74 -0
  85. data/lib/rubocop/cop/layout/dot_position.rb +105 -0
  86. data/lib/rubocop/cop/layout/else_alignment.rb +142 -0
  87. data/lib/rubocop/cop/layout/empty_comment.rb +151 -0
  88. data/lib/rubocop/cop/layout/empty_line_after_guard_clause.rb +157 -0
  89. data/lib/rubocop/cop/layout/empty_line_after_magic_comment.rb +64 -0
  90. data/lib/rubocop/cop/layout/empty_line_between_defs.rb +152 -0
  91. data/lib/rubocop/cop/layout/empty_lines.rb +76 -0
  92. data/lib/rubocop/cop/layout/empty_lines_around_access_modifier.rb +211 -0
  93. data/lib/rubocop/cop/layout/empty_lines_around_arguments.rb +99 -0
  94. data/lib/rubocop/cop/layout/empty_lines_around_attribute_accessor.rb +126 -0
  95. data/lib/rubocop/cop/layout/empty_lines_around_begin_body.rb +45 -0
  96. data/lib/rubocop/cop/layout/empty_lines_around_block_body.rb +41 -0
  97. data/lib/rubocop/cop/layout/empty_lines_around_class_body.rb +88 -0
  98. data/lib/rubocop/cop/layout/empty_lines_around_exception_handling_keywords.rb +136 -0
  99. data/lib/rubocop/cop/layout/empty_lines_around_method_body.rb +45 -0
  100. data/lib/rubocop/cop/layout/empty_lines_around_module_body.rb +62 -0
  101. data/lib/rubocop/cop/layout/end_alignment.rb +189 -0
  102. data/lib/rubocop/cop/layout/end_of_line.rb +92 -0
  103. data/lib/rubocop/cop/layout/extra_spacing.rb +201 -0
  104. data/lib/rubocop/cop/layout/first_argument_indentation.rb +247 -0
  105. data/lib/rubocop/cop/layout/first_array_element_indentation.rb +171 -0
  106. data/lib/rubocop/cop/layout/first_array_element_line_break.rb +45 -0
  107. data/lib/rubocop/cop/layout/first_hash_element_indentation.rb +184 -0
  108. data/lib/rubocop/cop/layout/first_hash_element_line_break.rb +37 -0
  109. data/lib/rubocop/cop/layout/first_method_argument_line_break.rb +53 -0
  110. data/lib/rubocop/cop/layout/first_method_parameter_line_break.rb +46 -0
  111. data/lib/rubocop/cop/layout/first_parameter_indentation.rb +100 -0
  112. data/lib/rubocop/cop/layout/hash_alignment.rb +366 -0
  113. data/lib/rubocop/cop/layout/heredoc_argument_closing_parenthesis.rb +285 -0
  114. data/lib/rubocop/cop/layout/heredoc_indentation.rb +173 -0
  115. data/lib/rubocop/cop/layout/indentation_consistency.rb +202 -0
  116. data/lib/rubocop/cop/layout/indentation_style.rb +117 -0
  117. data/lib/rubocop/cop/layout/indentation_width.rb +362 -0
  118. data/lib/rubocop/cop/layout/initial_indentation.rb +59 -0
  119. data/lib/rubocop/cop/layout/leading_comment_space.rb +119 -0
  120. data/lib/rubocop/cop/layout/leading_empty_lines.rb +53 -0
  121. data/lib/rubocop/cop/layout/line_length.rb +280 -0
  122. data/lib/rubocop/cop/layout/multiline_array_brace_layout.rb +118 -0
  123. data/lib/rubocop/cop/layout/multiline_array_line_breaks.rb +39 -0
  124. data/lib/rubocop/cop/layout/multiline_assignment_layout.rb +95 -0
  125. data/lib/rubocop/cop/layout/multiline_block_layout.rb +155 -0
  126. data/lib/rubocop/cop/layout/multiline_hash_brace_layout.rb +118 -0
  127. data/lib/rubocop/cop/layout/multiline_hash_key_line_breaks.rb +50 -0
  128. data/lib/rubocop/cop/layout/multiline_method_argument_line_breaks.rb +52 -0
  129. data/lib/rubocop/cop/layout/multiline_method_call_brace_layout.rb +134 -0
  130. data/lib/rubocop/cop/layout/multiline_method_call_indentation.rb +220 -0
  131. data/lib/rubocop/cop/layout/multiline_method_definition_brace_layout.rb +131 -0
  132. data/lib/rubocop/cop/layout/multiline_operation_indentation.rb +123 -0
  133. data/lib/rubocop/cop/layout/parameter_alignment.rb +118 -0
  134. data/lib/rubocop/cop/layout/rescue_ensure_alignment.rb +191 -0
  135. data/lib/rubocop/cop/layout/space_after_colon.rb +47 -0
  136. data/lib/rubocop/cop/layout/space_after_comma.rb +35 -0
  137. data/lib/rubocop/cop/layout/space_after_method_name.rb +42 -0
  138. data/lib/rubocop/cop/layout/space_after_not.rb +40 -0
  139. data/lib/rubocop/cop/layout/space_after_semicolon.rb +32 -0
  140. data/lib/rubocop/cop/layout/space_around_block_parameters.rb +169 -0
  141. data/lib/rubocop/cop/layout/space_around_equals_in_parameter_default.rb +92 -0
  142. data/lib/rubocop/cop/layout/space_around_keyword.rb +244 -0
  143. data/lib/rubocop/cop/layout/space_around_method_call_operator.rb +131 -0
  144. data/lib/rubocop/cop/layout/space_around_operators.rb +242 -0
  145. data/lib/rubocop/cop/layout/space_before_block_braces.rb +136 -0
  146. data/lib/rubocop/cop/layout/space_before_comma.rb +31 -0
  147. data/lib/rubocop/cop/layout/space_before_comment.rb +33 -0
  148. data/lib/rubocop/cop/layout/space_before_first_arg.rb +75 -0
  149. data/lib/rubocop/cop/layout/space_before_semicolon.rb +27 -0
  150. data/lib/rubocop/cop/layout/space_in_lambda_literal.rb +82 -0
  151. data/lib/rubocop/cop/layout/space_inside_array_literal_brackets.rb +229 -0
  152. data/lib/rubocop/cop/layout/space_inside_array_percent_literal.rb +53 -0
  153. data/lib/rubocop/cop/layout/space_inside_block_braces.rb +248 -0
  154. data/lib/rubocop/cop/layout/space_inside_hash_literal_braces.rb +200 -0
  155. data/lib/rubocop/cop/layout/space_inside_parens.rb +113 -0
  156. data/lib/rubocop/cop/layout/space_inside_percent_literal_delimiters.rb +65 -0
  157. data/lib/rubocop/cop/layout/space_inside_range_literal.rb +63 -0
  158. data/lib/rubocop/cop/layout/space_inside_reference_brackets.rb +148 -0
  159. data/lib/rubocop/cop/layout/space_inside_string_interpolation.rb +65 -0
  160. data/lib/rubocop/cop/layout/trailing_empty_lines.rb +113 -0
  161. data/lib/rubocop/cop/layout/trailing_whitespace.rb +77 -0
  162. data/lib/rubocop/cop/lint/ambiguous_block_association.rb +62 -0
  163. data/lib/rubocop/cop/lint/ambiguous_operator.rb +96 -0
  164. data/lib/rubocop/cop/lint/ambiguous_regexp_literal.rb +57 -0
  165. data/lib/rubocop/cop/lint/assignment_in_condition.rb +97 -0
  166. data/lib/rubocop/cop/lint/big_decimal_new.rb +44 -0
  167. data/lib/rubocop/cop/lint/boolean_symbol.rb +50 -0
  168. data/lib/rubocop/cop/lint/circular_argument_reference.rb +72 -0
  169. data/lib/rubocop/cop/lint/debugger.rb +77 -0
  170. data/lib/rubocop/cop/lint/deprecated_class_methods.rb +111 -0
  171. data/lib/rubocop/cop/lint/deprecated_open_ssl_constant.rb +137 -0
  172. data/lib/rubocop/cop/lint/disjunctive_assignment_in_constructor.rb +81 -0
  173. data/lib/rubocop/cop/lint/duplicate_case_condition.rb +53 -0
  174. data/lib/rubocop/cop/lint/duplicate_hash_key.rb +38 -0
  175. data/lib/rubocop/cop/lint/duplicate_methods.rb +235 -0
  176. data/lib/rubocop/cop/lint/each_with_object_argument.rb +42 -0
  177. data/lib/rubocop/cop/lint/else_layout.rb +66 -0
  178. data/lib/rubocop/cop/lint/empty_ensure.rb +60 -0
  179. data/lib/rubocop/cop/lint/empty_expression.rb +42 -0
  180. data/lib/rubocop/cop/lint/empty_interpolation.rb +36 -0
  181. data/lib/rubocop/cop/lint/empty_when.rb +61 -0
  182. data/lib/rubocop/cop/lint/ensure_return.rb +63 -0
  183. data/lib/rubocop/cop/lint/erb_new_arguments.rb +162 -0
  184. data/lib/rubocop/cop/lint/flip_flop.rb +32 -0
  185. data/lib/rubocop/cop/lint/float_out_of_range.rb +35 -0
  186. data/lib/rubocop/cop/lint/format_parameter_mismatch.rb +159 -0
  187. data/lib/rubocop/cop/lint/heredoc_method_call_position.rb +156 -0
  188. data/lib/rubocop/cop/lint/implicit_string_concatenation.rb +101 -0
  189. data/lib/rubocop/cop/lint/ineffective_access_modifier.rb +127 -0
  190. data/lib/rubocop/cop/lint/inherit_exception.rb +100 -0
  191. data/lib/rubocop/cop/lint/interpolation_check.rb +40 -0
  192. data/lib/rubocop/cop/lint/literal_as_condition.rb +135 -0
  193. data/lib/rubocop/cop/lint/literal_in_interpolation.rb +98 -0
  194. data/lib/rubocop/cop/lint/loop.rb +65 -0
  195. data/lib/rubocop/cop/lint/missing_cop_enable_directive.rb +84 -0
  196. data/lib/rubocop/cop/lint/mixed_regexp_capture_types.rb +69 -0
  197. data/lib/rubocop/cop/lint/multiple_comparison.rb +48 -0
  198. data/lib/rubocop/cop/lint/nested_method_definition.rb +104 -0
  199. data/lib/rubocop/cop/lint/nested_percent_literal.rb +51 -0
  200. data/lib/rubocop/cop/lint/next_without_accumulator.rb +50 -0
  201. data/lib/rubocop/cop/lint/non_deterministic_require_order.rb +89 -0
  202. data/lib/rubocop/cop/lint/non_local_exit_from_iterator.rb +83 -0
  203. data/lib/rubocop/cop/lint/number_conversion.rb +81 -0
  204. data/lib/rubocop/cop/lint/ordered_magic_comments.rb +86 -0
  205. data/lib/rubocop/cop/lint/parentheses_as_grouped_expression.rb +86 -0
  206. data/lib/rubocop/cop/lint/percent_string_array.rb +71 -0
  207. data/lib/rubocop/cop/lint/percent_symbol_array.rb +69 -0
  208. data/lib/rubocop/cop/lint/raise_exception.rb +75 -0
  209. data/lib/rubocop/cop/lint/rand_one.rb +45 -0
  210. data/lib/rubocop/cop/lint/redundant_cop_disable_directive.rb +258 -0
  211. data/lib/rubocop/cop/lint/redundant_cop_enable_directive.rb +119 -0
  212. data/lib/rubocop/cop/lint/redundant_require_statement.rb +50 -0
  213. data/lib/rubocop/cop/lint/redundant_splat_expansion.rb +172 -0
  214. data/lib/rubocop/cop/lint/redundant_string_coercion.rb +59 -0
  215. data/lib/rubocop/cop/lint/redundant_with_index.rb +82 -0
  216. data/lib/rubocop/cop/lint/redundant_with_object.rb +83 -0
  217. data/lib/rubocop/cop/lint/regexp_as_condition.rb +29 -0
  218. data/lib/rubocop/cop/lint/require_parentheses.rb +66 -0
  219. data/lib/rubocop/cop/lint/rescue_exception.rb +46 -0
  220. data/lib/rubocop/cop/lint/rescue_type.rb +94 -0
  221. data/lib/rubocop/cop/lint/return_in_void_context.rb +74 -0
  222. data/lib/rubocop/cop/lint/safe_navigation_chain.rb +65 -0
  223. data/lib/rubocop/cop/lint/safe_navigation_consistency.rb +94 -0
  224. data/lib/rubocop/cop/lint/safe_navigation_with_empty.rb +38 -0
  225. data/lib/rubocop/cop/lint/script_permission.rb +70 -0
  226. data/lib/rubocop/cop/lint/send_with_mixin_argument.rb +91 -0
  227. data/lib/rubocop/cop/lint/shadowed_argument.rb +182 -0
  228. data/lib/rubocop/cop/lint/shadowed_exception.rb +178 -0
  229. data/lib/rubocop/cop/lint/shadowing_outer_local_variable.rb +53 -0
  230. data/lib/rubocop/cop/lint/struct_new_override.rb +58 -0
  231. data/lib/rubocop/cop/lint/suppressed_exception.rb +92 -0
  232. data/lib/rubocop/cop/lint/syntax.rb +57 -0
  233. data/lib/rubocop/cop/lint/to_json.rb +41 -0
  234. data/lib/rubocop/cop/lint/underscore_prefixed_variable_name.rb +82 -0
  235. data/lib/rubocop/cop/lint/unified_integer.rb +43 -0
  236. data/lib/rubocop/cop/lint/unreachable_code.rb +99 -0
  237. data/lib/rubocop/cop/lint/unused_block_argument.rb +165 -0
  238. data/lib/rubocop/cop/lint/unused_method_argument.rb +112 -0
  239. data/lib/rubocop/cop/lint/uri_escape_unescape.rb +76 -0
  240. data/lib/rubocop/cop/lint/uri_regexp.rb +73 -0
  241. data/lib/rubocop/cop/lint/useless_access_modifier.rb +284 -0
  242. data/lib/rubocop/cop/lint/useless_assignment.rb +130 -0
  243. data/lib/rubocop/cop/lint/useless_comparison.rb +28 -0
  244. data/lib/rubocop/cop/lint/useless_else_without_rescue.rb +54 -0
  245. data/lib/rubocop/cop/lint/useless_setter_call.rb +168 -0
  246. data/lib/rubocop/cop/lint/void.rb +151 -0
  247. data/lib/rubocop/cop/message_annotator.rb +129 -0
  248. data/lib/rubocop/cop/metrics/abc_size.rb +24 -0
  249. data/lib/rubocop/cop/metrics/block_length.rb +50 -0
  250. data/lib/rubocop/cop/metrics/block_nesting.rb +65 -0
  251. data/lib/rubocop/cop/metrics/class_length.rb +36 -0
  252. data/lib/rubocop/cop/metrics/cyclomatic_complexity.rb +32 -0
  253. data/lib/rubocop/cop/metrics/method_length.rb +36 -0
  254. data/lib/rubocop/cop/metrics/module_length.rb +36 -0
  255. data/lib/rubocop/cop/metrics/parameter_lists.rb +54 -0
  256. data/lib/rubocop/cop/metrics/perceived_complexity.rb +61 -0
  257. data/lib/rubocop/cop/metrics/utils/abc_size_calculator.rb +84 -0
  258. data/lib/rubocop/cop/migration/department_name.rb +85 -0
  259. data/lib/rubocop/cop/mixin/alignment.rb +72 -0
  260. data/lib/rubocop/cop/mixin/annotation_comment.rb +37 -0
  261. data/lib/rubocop/cop/mixin/array_min_size.rb +57 -0
  262. data/lib/rubocop/cop/mixin/array_syntax.rb +17 -0
  263. data/lib/rubocop/cop/mixin/check_assignment.rb +44 -0
  264. data/lib/rubocop/cop/mixin/check_line_breakable.rb +184 -0
  265. data/lib/rubocop/cop/mixin/classish_length.rb +37 -0
  266. data/lib/rubocop/cop/mixin/code_length.rb +38 -0
  267. data/lib/rubocop/cop/mixin/configurable_enforced_style.rb +100 -0
  268. data/lib/rubocop/cop/mixin/configurable_formatting.rb +45 -0
  269. data/lib/rubocop/cop/mixin/configurable_max.rb +23 -0
  270. data/lib/rubocop/cop/mixin/configurable_naming.rb +16 -0
  271. data/lib/rubocop/cop/mixin/configurable_numbering.rb +17 -0
  272. data/lib/rubocop/cop/mixin/def_node.rb +33 -0
  273. data/lib/rubocop/cop/mixin/documentation_comment.rb +52 -0
  274. data/lib/rubocop/cop/mixin/duplication.rb +46 -0
  275. data/lib/rubocop/cop/mixin/empty_lines_around_body.rb +172 -0
  276. data/lib/rubocop/cop/mixin/empty_parameter.rb +24 -0
  277. data/lib/rubocop/cop/mixin/end_keyword_alignment.rb +72 -0
  278. data/lib/rubocop/cop/mixin/enforce_superclass.rb +30 -0
  279. data/lib/rubocop/cop/mixin/first_element_line_break.rb +46 -0
  280. data/lib/rubocop/cop/mixin/frozen_string_literal.rb +62 -0
  281. data/lib/rubocop/cop/mixin/hash_alignment_styles.rb +147 -0
  282. data/lib/rubocop/cop/mixin/hash_transform_method.rb +178 -0
  283. data/lib/rubocop/cop/mixin/heredoc.rb +32 -0
  284. data/lib/rubocop/cop/mixin/ignored_methods.rb +19 -0
  285. data/lib/rubocop/cop/mixin/ignored_pattern.rb +29 -0
  286. data/lib/rubocop/cop/mixin/integer_node.rb +14 -0
  287. data/lib/rubocop/cop/mixin/interpolation.rb +27 -0
  288. data/lib/rubocop/cop/mixin/line_length_help.rb +89 -0
  289. data/lib/rubocop/cop/mixin/match_range.rb +26 -0
  290. data/lib/rubocop/cop/mixin/method_complexity.rb +62 -0
  291. data/lib/rubocop/cop/mixin/method_preference.rb +31 -0
  292. data/lib/rubocop/cop/mixin/min_body_length.rb +21 -0
  293. data/lib/rubocop/cop/mixin/multiline_element_indentation.rb +86 -0
  294. data/lib/rubocop/cop/mixin/multiline_element_line_breaks.rb +33 -0
  295. data/lib/rubocop/cop/mixin/multiline_expression_indentation.rb +255 -0
  296. data/lib/rubocop/cop/mixin/multiline_literal_brace_layout.rb +141 -0
  297. data/lib/rubocop/cop/mixin/negative_conditional.rb +32 -0
  298. data/lib/rubocop/cop/mixin/nil_methods.rb +25 -0
  299. data/lib/rubocop/cop/mixin/on_normal_if_unless.rb +14 -0
  300. data/lib/rubocop/cop/mixin/ordered_gem_node.rb +56 -0
  301. data/lib/rubocop/cop/mixin/parentheses.rb +17 -0
  302. data/lib/rubocop/cop/mixin/parser_diagnostic.rb +37 -0
  303. data/lib/rubocop/cop/mixin/percent_array.rb +52 -0
  304. data/lib/rubocop/cop/mixin/percent_literal.rb +38 -0
  305. data/lib/rubocop/cop/mixin/preceding_following_alignment.rb +181 -0
  306. data/lib/rubocop/cop/mixin/preferred_delimiters.rb +53 -0
  307. data/lib/rubocop/cop/mixin/range_help.rb +117 -0
  308. data/lib/rubocop/cop/mixin/rational_literal.rb +18 -0
  309. data/lib/rubocop/cop/mixin/regexp_literal_help.rb +16 -0
  310. data/lib/rubocop/cop/mixin/rescue_node.rb +22 -0
  311. data/lib/rubocop/cop/mixin/safe_assignment.rb +23 -0
  312. data/lib/rubocop/cop/mixin/space_after_punctuation.rb +55 -0
  313. data/lib/rubocop/cop/mixin/space_before_punctuation.rb +49 -0
  314. data/lib/rubocop/cop/mixin/statement_modifier.rb +56 -0
  315. data/lib/rubocop/cop/mixin/string_help.rb +35 -0
  316. data/lib/rubocop/cop/mixin/string_literals_help.rb +23 -0
  317. data/lib/rubocop/cop/mixin/surrounding_space.rb +146 -0
  318. data/lib/rubocop/cop/mixin/target_ruby_version.rb +20 -0
  319. data/lib/rubocop/cop/mixin/too_many_lines.rb +35 -0
  320. data/lib/rubocop/cop/mixin/trailing_body.rb +26 -0
  321. data/lib/rubocop/cop/mixin/trailing_comma.rb +212 -0
  322. data/lib/rubocop/cop/mixin/uncommunicative_name.rb +111 -0
  323. data/lib/rubocop/cop/mixin/unused_argument.rb +33 -0
  324. data/lib/rubocop/cop/naming/accessor_method_name.rb +55 -0
  325. data/lib/rubocop/cop/naming/ascii_identifiers.rb +72 -0
  326. data/lib/rubocop/cop/naming/binary_operator_parameter_name.rb +43 -0
  327. data/lib/rubocop/cop/naming/block_parameter_name.rb +49 -0
  328. data/lib/rubocop/cop/naming/class_and_module_camel_case.rb +43 -0
  329. data/lib/rubocop/cop/naming/constant_name.rb +82 -0
  330. data/lib/rubocop/cop/naming/file_name.rb +225 -0
  331. data/lib/rubocop/cop/naming/heredoc_delimiter_case.rb +62 -0
  332. data/lib/rubocop/cop/naming/heredoc_delimiter_naming.rb +55 -0
  333. data/lib/rubocop/cop/naming/memoized_instance_variable_name.rb +171 -0
  334. data/lib/rubocop/cop/naming/method_name.rb +79 -0
  335. data/lib/rubocop/cop/naming/method_parameter_name.rb +58 -0
  336. data/lib/rubocop/cop/naming/predicate_name.rb +108 -0
  337. data/lib/rubocop/cop/naming/rescued_exceptions_variable_name.rb +112 -0
  338. data/lib/rubocop/cop/naming/variable_name.rb +52 -0
  339. data/lib/rubocop/cop/naming/variable_number.rb +61 -0
  340. data/lib/rubocop/cop/offense.rb +216 -0
  341. data/lib/rubocop/cop/registry.rb +276 -0
  342. data/lib/rubocop/cop/security/eval.rb +31 -0
  343. data/lib/rubocop/cop/security/json_load.rb +46 -0
  344. data/lib/rubocop/cop/security/marshal_load.rb +39 -0
  345. data/lib/rubocop/cop/security/open.rb +71 -0
  346. data/lib/rubocop/cop/security/yaml_load.rb +37 -0
  347. data/lib/rubocop/cop/severity.rb +75 -0
  348. data/lib/rubocop/cop/style/access_modifier_declarations.rb +132 -0
  349. data/lib/rubocop/cop/style/alias.rb +147 -0
  350. data/lib/rubocop/cop/style/and_or.rb +145 -0
  351. data/lib/rubocop/cop/style/array_join.rb +39 -0
  352. data/lib/rubocop/cop/style/ascii_comments.rb +61 -0
  353. data/lib/rubocop/cop/style/attr.rb +68 -0
  354. data/lib/rubocop/cop/style/auto_resource_cleanup.rb +51 -0
  355. data/lib/rubocop/cop/style/bare_percent_literals.rb +78 -0
  356. data/lib/rubocop/cop/style/begin_block.rb +22 -0
  357. data/lib/rubocop/cop/style/block_comments.rb +70 -0
  358. data/lib/rubocop/cop/style/block_delimiters.rb +384 -0
  359. data/lib/rubocop/cop/style/case_equality.rb +53 -0
  360. data/lib/rubocop/cop/style/character_literal.rb +53 -0
  361. data/lib/rubocop/cop/style/class_and_module_children.rb +151 -0
  362. data/lib/rubocop/cop/style/class_check.rb +59 -0
  363. data/lib/rubocop/cop/style/class_methods.rb +60 -0
  364. data/lib/rubocop/cop/style/class_vars.rb +48 -0
  365. data/lib/rubocop/cop/style/collection_methods.rb +79 -0
  366. data/lib/rubocop/cop/style/colon_method_call.rb +48 -0
  367. data/lib/rubocop/cop/style/colon_method_definition.rb +37 -0
  368. data/lib/rubocop/cop/style/command_literal.rb +187 -0
  369. data/lib/rubocop/cop/style/comment_annotation.rb +97 -0
  370. data/lib/rubocop/cop/style/commented_keyword.rb +73 -0
  371. data/lib/rubocop/cop/style/conditional_assignment.rb +666 -0
  372. data/lib/rubocop/cop/style/constant_visibility.rb +77 -0
  373. data/lib/rubocop/cop/style/copyright.rb +99 -0
  374. data/lib/rubocop/cop/style/date_time.rb +77 -0
  375. data/lib/rubocop/cop/style/def_with_parentheses.rb +57 -0
  376. data/lib/rubocop/cop/style/dir.rb +48 -0
  377. data/lib/rubocop/cop/style/disable_cops_within_source_code_directive.rb +49 -0
  378. data/lib/rubocop/cop/style/documentation.rb +135 -0
  379. data/lib/rubocop/cop/style/documentation_method.rb +125 -0
  380. data/lib/rubocop/cop/style/double_cop_disable_directive.rb +55 -0
  381. data/lib/rubocop/cop/style/double_negation.rb +72 -0
  382. data/lib/rubocop/cop/style/each_for_simple_loop.rb +58 -0
  383. data/lib/rubocop/cop/style/each_with_object.rb +110 -0
  384. data/lib/rubocop/cop/style/empty_block_parameter.rb +48 -0
  385. data/lib/rubocop/cop/style/empty_case_condition.rb +107 -0
  386. data/lib/rubocop/cop/style/empty_else.rb +175 -0
  387. data/lib/rubocop/cop/style/empty_lambda_parameter.rb +45 -0
  388. data/lib/rubocop/cop/style/empty_literal.rb +121 -0
  389. data/lib/rubocop/cop/style/empty_method.rb +111 -0
  390. data/lib/rubocop/cop/style/encoding.rb +56 -0
  391. data/lib/rubocop/cop/style/end_block.rb +31 -0
  392. data/lib/rubocop/cop/style/eval_with_location.rb +148 -0
  393. data/lib/rubocop/cop/style/even_odd.rb +58 -0
  394. data/lib/rubocop/cop/style/expand_path_arguments.rb +194 -0
  395. data/lib/rubocop/cop/style/exponential_notation.rb +119 -0
  396. data/lib/rubocop/cop/style/float_division.rb +94 -0
  397. data/lib/rubocop/cop/style/for.rb +88 -0
  398. data/lib/rubocop/cop/style/format_string.rb +127 -0
  399. data/lib/rubocop/cop/style/format_string_token.rb +120 -0
  400. data/lib/rubocop/cop/style/frozen_string_literal_comment.rb +234 -0
  401. data/lib/rubocop/cop/style/global_vars.rb +80 -0
  402. data/lib/rubocop/cop/style/guard_clause.rb +145 -0
  403. data/lib/rubocop/cop/style/hash_each_methods.rb +89 -0
  404. data/lib/rubocop/cop/style/hash_syntax.rb +221 -0
  405. data/lib/rubocop/cop/style/hash_transform_keys.rb +83 -0
  406. data/lib/rubocop/cop/style/hash_transform_values.rb +80 -0
  407. data/lib/rubocop/cop/style/identical_conditional_branches.rb +130 -0
  408. data/lib/rubocop/cop/style/if_inside_else.rb +87 -0
  409. data/lib/rubocop/cop/style/if_unless_modifier.rb +189 -0
  410. data/lib/rubocop/cop/style/if_unless_modifier_of_if_unless.rb +39 -0
  411. data/lib/rubocop/cop/style/if_with_semicolon.rb +46 -0
  412. data/lib/rubocop/cop/style/implicit_runtime_error.rb +32 -0
  413. data/lib/rubocop/cop/style/infinite_loop.rb +128 -0
  414. data/lib/rubocop/cop/style/inline_comment.rb +34 -0
  415. data/lib/rubocop/cop/style/inverse_methods.rb +197 -0
  416. data/lib/rubocop/cop/style/ip_addresses.rb +76 -0
  417. data/lib/rubocop/cop/style/lambda.rb +132 -0
  418. data/lib/rubocop/cop/style/lambda_call.rb +73 -0
  419. data/lib/rubocop/cop/style/line_end_concatenation.rb +125 -0
  420. data/lib/rubocop/cop/style/method_call_with_args_parentheses.rb +190 -0
  421. data/lib/rubocop/cop/style/method_call_with_args_parentheses/omit_parentheses.rb +169 -0
  422. data/lib/rubocop/cop/style/method_call_with_args_parentheses/require_parentheses.rb +52 -0
  423. data/lib/rubocop/cop/style/method_call_without_args_parentheses.rb +75 -0
  424. data/lib/rubocop/cop/style/method_called_on_do_end_block.rb +46 -0
  425. data/lib/rubocop/cop/style/method_def_parentheses.rb +166 -0
  426. data/lib/rubocop/cop/style/method_missing_super.rb +34 -0
  427. data/lib/rubocop/cop/style/min_max.rb +68 -0
  428. data/lib/rubocop/cop/style/missing_else.rb +180 -0
  429. data/lib/rubocop/cop/style/missing_respond_to_missing.rb +46 -0
  430. data/lib/rubocop/cop/style/mixin_grouping.rb +148 -0
  431. data/lib/rubocop/cop/style/mixin_usage.rb +90 -0
  432. data/lib/rubocop/cop/style/module_function.rb +150 -0
  433. data/lib/rubocop/cop/style/multiline_block_chain.rb +40 -0
  434. data/lib/rubocop/cop/style/multiline_if_modifier.rb +67 -0
  435. data/lib/rubocop/cop/style/multiline_if_then.rb +50 -0
  436. data/lib/rubocop/cop/style/multiline_memoization.rb +94 -0
  437. data/lib/rubocop/cop/style/multiline_method_signature.rb +61 -0
  438. data/lib/rubocop/cop/style/multiline_ternary_operator.rb +38 -0
  439. data/lib/rubocop/cop/style/multiline_when_then.rb +74 -0
  440. data/lib/rubocop/cop/style/multiple_comparison.rb +92 -0
  441. data/lib/rubocop/cop/style/mutable_constant.rb +172 -0
  442. data/lib/rubocop/cop/style/negated_if.rb +99 -0
  443. data/lib/rubocop/cop/style/negated_unless.rb +89 -0
  444. data/lib/rubocop/cop/style/negated_while.rb +48 -0
  445. data/lib/rubocop/cop/style/nested_modifier.rb +107 -0
  446. data/lib/rubocop/cop/style/nested_parenthesized_calls.rb +67 -0
  447. data/lib/rubocop/cop/style/nested_ternary_operator.rb +32 -0
  448. data/lib/rubocop/cop/style/next.rb +244 -0
  449. data/lib/rubocop/cop/style/nil_comparison.rb +75 -0
  450. data/lib/rubocop/cop/style/non_nil_check.rb +136 -0
  451. data/lib/rubocop/cop/style/not.rb +82 -0
  452. data/lib/rubocop/cop/style/numeric_literal_prefix.rb +124 -0
  453. data/lib/rubocop/cop/style/numeric_literals.rb +114 -0
  454. data/lib/rubocop/cop/style/numeric_predicate.rb +138 -0
  455. data/lib/rubocop/cop/style/one_line_conditional.rb +98 -0
  456. data/lib/rubocop/cop/style/option_hash.rb +55 -0
  457. data/lib/rubocop/cop/style/optional_arguments.rb +58 -0
  458. data/lib/rubocop/cop/style/or_assignment.rb +96 -0
  459. data/lib/rubocop/cop/style/parallel_assignment.rb +287 -0
  460. data/lib/rubocop/cop/style/parentheses_around_condition.rb +117 -0
  461. data/lib/rubocop/cop/style/percent_literal_delimiters.rb +127 -0
  462. data/lib/rubocop/cop/style/percent_q_literals.rb +73 -0
  463. data/lib/rubocop/cop/style/perl_backrefs.rb +38 -0
  464. data/lib/rubocop/cop/style/preferred_hash_methods.rb +75 -0
  465. data/lib/rubocop/cop/style/proc.rb +34 -0
  466. data/lib/rubocop/cop/style/raise_args.rb +145 -0
  467. data/lib/rubocop/cop/style/random_with_offset.rb +158 -0
  468. data/lib/rubocop/cop/style/redundant_begin.rb +91 -0
  469. data/lib/rubocop/cop/style/redundant_capital_w.rb +51 -0
  470. data/lib/rubocop/cop/style/redundant_condition.rb +124 -0
  471. data/lib/rubocop/cop/style/redundant_conditional.rb +97 -0
  472. data/lib/rubocop/cop/style/redundant_exception.rb +60 -0
  473. data/lib/rubocop/cop/style/redundant_freeze.rb +67 -0
  474. data/lib/rubocop/cop/style/redundant_interpolation.rb +98 -0
  475. data/lib/rubocop/cop/style/redundant_parentheses.rb +227 -0
  476. data/lib/rubocop/cop/style/redundant_percent_q.rb +112 -0
  477. data/lib/rubocop/cop/style/redundant_regexp_character_class.rb +89 -0
  478. data/lib/rubocop/cop/style/redundant_regexp_escape.rb +130 -0
  479. data/lib/rubocop/cop/style/redundant_return.rb +169 -0
  480. data/lib/rubocop/cop/style/redundant_self.rb +171 -0
  481. data/lib/rubocop/cop/style/redundant_sort.rb +165 -0
  482. data/lib/rubocop/cop/style/redundant_sort_by.rb +50 -0
  483. data/lib/rubocop/cop/style/regexp_literal.rb +228 -0
  484. data/lib/rubocop/cop/style/rescue_modifier.rb +73 -0
  485. data/lib/rubocop/cop/style/rescue_standard_error.rb +124 -0
  486. data/lib/rubocop/cop/style/return_nil.rb +89 -0
  487. data/lib/rubocop/cop/style/safe_navigation.rb +271 -0
  488. data/lib/rubocop/cop/style/sample.rb +144 -0
  489. data/lib/rubocop/cop/style/self_assignment.rb +97 -0
  490. data/lib/rubocop/cop/style/semicolon.rb +101 -0
  491. data/lib/rubocop/cop/style/send.rb +31 -0
  492. data/lib/rubocop/cop/style/signal_exception.rb +211 -0
  493. data/lib/rubocop/cop/style/single_line_block_params.rb +95 -0
  494. data/lib/rubocop/cop/style/single_line_methods.rb +83 -0
  495. data/lib/rubocop/cop/style/slicing_with_range.rb +39 -0
  496. data/lib/rubocop/cop/style/special_global_vars.rb +207 -0
  497. data/lib/rubocop/cop/style/stabby_lambda_parentheses.rb +83 -0
  498. data/lib/rubocop/cop/style/stderr_puts.rb +61 -0
  499. data/lib/rubocop/cop/style/string_hash_keys.rb +50 -0
  500. data/lib/rubocop/cop/style/string_literals.rb +129 -0
  501. data/lib/rubocop/cop/style/string_literals_in_interpolation.rb +49 -0
  502. data/lib/rubocop/cop/style/string_methods.rb +46 -0
  503. data/lib/rubocop/cop/style/strip.rb +46 -0
  504. data/lib/rubocop/cop/style/struct_inheritance.rb +39 -0
  505. data/lib/rubocop/cop/style/symbol_array.rb +119 -0
  506. data/lib/rubocop/cop/style/symbol_literal.rb +32 -0
  507. data/lib/rubocop/cop/style/symbol_proc.rb +110 -0
  508. data/lib/rubocop/cop/style/ternary_parentheses.rb +220 -0
  509. data/lib/rubocop/cop/style/trailing_body_on_class.rb +43 -0
  510. data/lib/rubocop/cop/style/trailing_body_on_method_definition.rb +54 -0
  511. data/lib/rubocop/cop/style/trailing_body_on_module.rb +43 -0
  512. data/lib/rubocop/cop/style/trailing_comma_in_arguments.rb +109 -0
  513. data/lib/rubocop/cop/style/trailing_comma_in_array_literal.rb +99 -0
  514. data/lib/rubocop/cop/style/trailing_comma_in_block_args.rb +88 -0
  515. data/lib/rubocop/cop/style/trailing_comma_in_hash_literal.rb +100 -0
  516. data/lib/rubocop/cop/style/trailing_method_end_statement.rb +91 -0
  517. data/lib/rubocop/cop/style/trailing_underscore_variable.rb +165 -0
  518. data/lib/rubocop/cop/style/trivial_accessors.rb +191 -0
  519. data/lib/rubocop/cop/style/unless_else.rb +55 -0
  520. data/lib/rubocop/cop/style/unpack_first.rb +61 -0
  521. data/lib/rubocop/cop/style/variable_interpolation.rb +48 -0
  522. data/lib/rubocop/cop/style/when_then.rb +37 -0
  523. data/lib/rubocop/cop/style/while_until_do.rb +59 -0
  524. data/lib/rubocop/cop/style/while_until_modifier.rb +61 -0
  525. data/lib/rubocop/cop/style/word_array.rb +102 -0
  526. data/lib/rubocop/cop/style/yoda_condition.rb +156 -0
  527. data/lib/rubocop/cop/style/zero_length_predicate.rb +117 -0
  528. data/lib/rubocop/cop/team.rb +240 -0
  529. data/lib/rubocop/cop/util.rb +151 -0
  530. data/lib/rubocop/cop/utils/format_string.rb +120 -0
  531. data/lib/rubocop/cop/variable_force.rb +463 -0
  532. data/lib/rubocop/cop/variable_force/assignment.rb +97 -0
  533. data/lib/rubocop/cop/variable_force/branch.rb +320 -0
  534. data/lib/rubocop/cop/variable_force/branchable.rb +23 -0
  535. data/lib/rubocop/cop/variable_force/reference.rb +49 -0
  536. data/lib/rubocop/cop/variable_force/scope.rb +110 -0
  537. data/lib/rubocop/cop/variable_force/variable.rb +114 -0
  538. data/lib/rubocop/cop/variable_force/variable_table.rb +129 -0
  539. data/lib/rubocop/core_ext/string.rb +23 -0
  540. data/lib/rubocop/error.rb +34 -0
  541. data/lib/rubocop/ext/processed_source.rb +18 -0
  542. data/lib/rubocop/file_finder.rb +42 -0
  543. data/lib/rubocop/formatter/auto_gen_config_formatter.rb +16 -0
  544. data/lib/rubocop/formatter/base_formatter.rb +119 -0
  545. data/lib/rubocop/formatter/clang_style_formatter.rb +57 -0
  546. data/lib/rubocop/formatter/colorizable.rb +41 -0
  547. data/lib/rubocop/formatter/disabled_config_formatter.rb +216 -0
  548. data/lib/rubocop/formatter/emacs_style_formatter.rb +37 -0
  549. data/lib/rubocop/formatter/file_list_formatter.rb +20 -0
  550. data/lib/rubocop/formatter/formatter_set.rb +104 -0
  551. data/lib/rubocop/formatter/fuubar_style_formatter.rb +80 -0
  552. data/lib/rubocop/formatter/html_formatter.rb +141 -0
  553. data/lib/rubocop/formatter/json_formatter.rb +81 -0
  554. data/lib/rubocop/formatter/junit_formatter.rb +84 -0
  555. data/lib/rubocop/formatter/offense_count_formatter.rb +74 -0
  556. data/lib/rubocop/formatter/pacman_formatter.rb +80 -0
  557. data/lib/rubocop/formatter/progress_formatter.rb +63 -0
  558. data/lib/rubocop/formatter/quiet_formatter.rb +13 -0
  559. data/lib/rubocop/formatter/simple_text_formatter.rb +138 -0
  560. data/lib/rubocop/formatter/tap_formatter.rb +82 -0
  561. data/lib/rubocop/formatter/text_util.rb +20 -0
  562. data/lib/rubocop/formatter/worst_offenders_formatter.rb +62 -0
  563. data/lib/rubocop/magic_comment.rb +214 -0
  564. data/lib/rubocop/name_similarity.rb +24 -0
  565. data/lib/rubocop/options.rb +481 -0
  566. data/lib/rubocop/path_util.rb +85 -0
  567. data/lib/rubocop/platform.rb +11 -0
  568. data/lib/rubocop/rake_task.rb +80 -0
  569. data/lib/rubocop/remote_config.rb +104 -0
  570. data/lib/rubocop/result_cache.rb +205 -0
  571. data/lib/rubocop/rspec/cop_helper.rb +71 -0
  572. data/lib/rubocop/rspec/expect_offense.rb +273 -0
  573. data/lib/rubocop/rspec/host_environment_simulation_helper.rb +28 -0
  574. data/lib/rubocop/rspec/shared_contexts.rb +129 -0
  575. data/lib/rubocop/rspec/support.rb +13 -0
  576. data/lib/rubocop/runner.rb +386 -0
  577. data/lib/rubocop/string_interpreter.rb +57 -0
  578. data/lib/rubocop/target_finder.rb +196 -0
  579. data/lib/rubocop/target_ruby.rb +154 -0
  580. data/lib/rubocop/version.rb +23 -0
  581. data/lib/rubocop/warning.rb +11 -0
  582. data/lib/rubocop/yaml_duplication_checker.rb +39 -0
  583. metadata +780 -0
@@ -0,0 +1,72 @@
1
+ # frozen_string_literal: true
2
+
3
+ # rubocop:disable Style/AsciiComments
4
+
5
+ module RuboCop
6
+ module Cop
7
+ module Naming
8
+ # This cop checks for non-ascii characters in identifier names.
9
+ #
10
+ # @example
11
+ # # bad
12
+ # def καλημερα # Greek alphabet (non-ascii)
13
+ # end
14
+ #
15
+ # # bad
16
+ # def こんにちはと言う # Japanese character (non-ascii)
17
+ # end
18
+ #
19
+ # # bad
20
+ # def hello_🍣 # Emoji (non-ascii)
21
+ # end
22
+ #
23
+ # # good
24
+ # def say_hello
25
+ # end
26
+ #
27
+ # # bad
28
+ # 신장 = 10 # Hangul character (non-ascii)
29
+ #
30
+ # # good
31
+ # height = 10
32
+ #
33
+ # # bad
34
+ # params[:عرض_gteq] # Arabic character (non-ascii)
35
+ #
36
+ # # good
37
+ # params[:width_gteq]
38
+ #
39
+ class AsciiIdentifiers < Cop
40
+ include RangeHelp
41
+
42
+ MSG = 'Use only ascii symbols in identifiers.'
43
+
44
+ def investigate(processed_source)
45
+ processed_source.each_token do |token|
46
+ next unless token.type == :tIDENTIFIER && !token.text.ascii_only?
47
+
48
+ add_offense(token, location: first_offense_range(token))
49
+ end
50
+ end
51
+
52
+ private
53
+
54
+ def first_offense_range(identifier)
55
+ expression = identifier.pos
56
+ first_offense = first_non_ascii_chars(identifier.text)
57
+
58
+ start_position = expression.begin_pos +
59
+ identifier.text.index(first_offense)
60
+ end_position = start_position + first_offense.length
61
+
62
+ range_between(start_position, end_position)
63
+ end
64
+
65
+ def first_non_ascii_chars(string)
66
+ string.match(/[^[:ascii:]]+/).to_s
67
+ end
68
+ end
69
+ end
70
+ end
71
+ end
72
+ # rubocop:enable Style/AsciiComments
@@ -0,0 +1,43 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RuboCop
4
+ module Cop
5
+ module Naming
6
+ # This cop makes sure that certain binary operator methods have their
7
+ # sole parameter named `other`.
8
+ #
9
+ # @example
10
+ #
11
+ # # bad
12
+ # def +(amount); end
13
+ #
14
+ # # good
15
+ # def +(other); end
16
+ class BinaryOperatorParameterName < Cop
17
+ MSG = 'When defining the `%<opr>s` operator, ' \
18
+ 'name its argument `other`.'
19
+
20
+ OP_LIKE_METHODS = %i[eql? equal?].freeze
21
+ BLACKLISTED = %i[+@ -@ [] []= << === `].freeze
22
+
23
+ def_node_matcher :op_method_candidate?, <<~PATTERN
24
+ (def [#op_method? $_] (args $(arg [!:other !:_other])) _)
25
+ PATTERN
26
+
27
+ def on_def(node)
28
+ op_method_candidate?(node) do |name, arg|
29
+ add_offense(arg, message: format(MSG, opr: name))
30
+ end
31
+ end
32
+
33
+ private
34
+
35
+ def op_method?(name)
36
+ return false if BLACKLISTED.include?(name)
37
+
38
+ name !~ /\A\w/ || OP_LIKE_METHODS.include?(name)
39
+ end
40
+ end
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,49 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RuboCop
4
+ module Cop
5
+ module Naming
6
+ # This cop checks block parameter names for how descriptive they
7
+ # are. It is highly configurable.
8
+ #
9
+ # The `MinNameLength` config option takes an integer. It represents
10
+ # the minimum amount of characters the name must be. Its default is 1.
11
+ # The `AllowNamesEndingInNumbers` config option takes a boolean. When
12
+ # set to false, this cop will register offenses for names ending with
13
+ # numbers. Its default is false. The `AllowedNames` config option
14
+ # takes an array of permitted names that will never register an
15
+ # offense. The `ForbiddenNames` config option takes an array of
16
+ # restricted names that will always register an offense.
17
+ #
18
+ # @example
19
+ # # bad
20
+ # bar do |varOne, varTwo|
21
+ # varOne + varTwo
22
+ # end
23
+ #
24
+ # # With `AllowNamesEndingInNumbers` set to false
25
+ # foo { |num1, num2| num1 * num2 }
26
+ #
27
+ # # With `MinParamNameLength` set to number greater than 1
28
+ # baz { |a, b, c| do_stuff(a, b, c) }
29
+ #
30
+ # # good
31
+ # bar do |thud, fred|
32
+ # thud + fred
33
+ # end
34
+ #
35
+ # foo { |speed, distance| speed * distance }
36
+ #
37
+ # baz { |age, height, gender| do_stuff(age, height, gender) }
38
+ class BlockParameterName < Cop
39
+ include UncommunicativeName
40
+
41
+ def on_block(node)
42
+ return unless node.arguments?
43
+
44
+ check(node, node.arguments)
45
+ end
46
+ end
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,43 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RuboCop
4
+ module Cop
5
+ module Naming
6
+ # This cop checks for class and module names with
7
+ # an underscore in them.
8
+ #
9
+ # `AllowedNames` config takes an array of permitted names.
10
+ # Its default value is `['module_parent']`.
11
+ # These names can be full class/module names or part of the name.
12
+ # eg. Adding `my_class` to the `AllowedNames` config will allow names like
13
+ # `my_class`, `my_class::User`, `App::my_class`, `App::my_class::User`, etc.
14
+ #
15
+ # @example
16
+ # # bad
17
+ # class My_Class
18
+ # end
19
+ # module My_Module
20
+ # end
21
+ #
22
+ # # good
23
+ # class MyClass
24
+ # end
25
+ # module MyModule
26
+ # end
27
+ # class module_parent::MyModule
28
+ # end
29
+ class ClassAndModuleCamelCase < Cop
30
+ MSG = 'Use CamelCase for classes and modules.'
31
+
32
+ def on_class(node)
33
+ allowed = /#{cop_config['AllowedNames'].join('|')}/
34
+ name = node.loc.name.source.gsub(allowed, '')
35
+ return unless /_/.match?(name)
36
+
37
+ add_offense(node, location: :name)
38
+ end
39
+ alias on_module on_class
40
+ end
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,82 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RuboCop
4
+ module Cop
5
+ module Naming
6
+ # This cop checks whether constant names are written using
7
+ # SCREAMING_SNAKE_CASE.
8
+ #
9
+ # To avoid false positives, it ignores cases in which we cannot know
10
+ # for certain the type of value that would be assigned to a constant.
11
+ #
12
+ # @example
13
+ # # bad
14
+ # InchInCm = 2.54
15
+ # INCHinCM = 2.54
16
+ # Inch_In_Cm = 2.54
17
+ #
18
+ # # good
19
+ # INCH_IN_CM = 2.54
20
+ class ConstantName < Cop
21
+ MSG = 'Use SCREAMING_SNAKE_CASE for constants.'
22
+ # Use POSIX character classes, so we allow accented characters rather
23
+ # than just standard ASCII characters
24
+ SNAKE_CASE = /^[[:digit:][:upper:]_]+$/.freeze
25
+
26
+ def_node_matcher :class_or_struct_return_method?, <<~PATTERN
27
+ (send
28
+ (const _ {:Class :Struct}) :new
29
+ ...)
30
+ PATTERN
31
+
32
+ def on_casgn(node)
33
+ if node.parent&.or_asgn_type?
34
+ lhs, value = *node.parent
35
+ _scope, const_name = *lhs
36
+ else
37
+ _scope, const_name, value = *node
38
+ end
39
+
40
+ # We cannot know the result of method calls like
41
+ # NewClass = something_that_returns_a_class
42
+ # It's also ok to assign a class constant another class constant,
43
+ # `Class.new(...)` or `Struct.new(...)`
44
+ # SomeClass = SomeOtherClass
45
+ # SomeClass = Class.new(...)
46
+ # SomeClass = Struct.new(...)
47
+ return if allowed_assignment?(value)
48
+ return if SNAKE_CASE.match?(const_name)
49
+
50
+ add_offense(node, location: :name)
51
+ end
52
+
53
+ private
54
+
55
+ def allowed_assignment?(value)
56
+ value && %i[block const casgn].include?(value.type) ||
57
+ allowed_method_call_on_rhs?(value) ||
58
+ class_or_struct_return_method?(value) ||
59
+ allowed_conditional_expression_on_rhs?(value)
60
+ end
61
+
62
+ def allowed_method_call_on_rhs?(node)
63
+ node&.send_type? &&
64
+ (node.receiver.nil? || !literal_receiver?(node))
65
+ end
66
+
67
+ def_node_matcher :literal_receiver?, <<~PATTERN
68
+ {(send literal? ...)
69
+ (send (begin literal?) ...)}
70
+ PATTERN
71
+
72
+ def allowed_conditional_expression_on_rhs?(node)
73
+ node&.if_type? && contains_contant?(node)
74
+ end
75
+
76
+ def contains_contant?(node)
77
+ node.branches.any?(&:const_type?)
78
+ end
79
+ end
80
+ end
81
+ end
82
+ end
@@ -0,0 +1,225 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'pathname'
4
+
5
+ module RuboCop
6
+ module Cop
7
+ module Naming
8
+ # This cop makes sure that Ruby source files have snake_case
9
+ # names. Ruby scripts (i.e. source files with a shebang in the
10
+ # first line) are ignored.
11
+ #
12
+ # The cop also ignores `.gemspec` files, because Bundler
13
+ # recommends using dashes to separate namespaces in nested gems
14
+ # (i.e. `bundler-console` becomes `Bundler::Console`). As such, the
15
+ # gemspec is supposed to be named `bundler-console.gemspec`.
16
+ #
17
+ # @example
18
+ # # bad
19
+ # lib/layoutManager.rb
20
+ #
21
+ # anything/usingCamelCase
22
+ #
23
+ # # good
24
+ # lib/layout_manager.rb
25
+ #
26
+ # anything/using_snake_case.rake
27
+ class FileName < Cop
28
+ include RangeHelp
29
+
30
+ MSG_SNAKE_CASE = 'The name of this source file (`%<basename>s`) ' \
31
+ 'should use snake_case.'
32
+ MSG_NO_DEFINITION = '%<basename>s should define a class or module ' \
33
+ 'called `%<namespace>s`.'
34
+ MSG_REGEX = '`%<basename>s` should match `%<regex>s`.'
35
+
36
+ SNAKE_CASE = /^[\da-z_.?!]+$/.freeze
37
+
38
+ def investigate(processed_source)
39
+ file_path = processed_source.file_path
40
+ return if config.file_to_exclude?(file_path) ||
41
+ config.allowed_camel_case_file?(file_path)
42
+
43
+ for_bad_filename(file_path) do |range, msg|
44
+ add_offense(nil, location: range, message: msg)
45
+ end
46
+ end
47
+
48
+ private
49
+
50
+ def for_bad_filename(file_path)
51
+ basename = File.basename(file_path)
52
+
53
+ if filename_good?(basename)
54
+ msg = perform_class_and_module_naming_checks(file_path, basename)
55
+ else
56
+ msg = other_message(basename) unless bad_filename_allowed?
57
+ end
58
+
59
+ yield source_range(processed_source.buffer, 1, 0), msg if msg
60
+ end
61
+
62
+ def perform_class_and_module_naming_checks(file_path, basename)
63
+ return unless expect_matching_definition?
64
+
65
+ if check_definition_path_hierarchy? &&
66
+ !matching_definition?(file_path)
67
+ msg = no_definition_message(basename, file_path)
68
+ elsif !matching_class?(basename)
69
+ msg = no_definition_message(basename, basename)
70
+ end
71
+ msg
72
+ end
73
+
74
+ def matching_definition?(file_path)
75
+ find_class_or_module(processed_source.ast, to_namespace(file_path))
76
+ end
77
+
78
+ def matching_class?(file_name)
79
+ find_class_or_module(processed_source.ast, to_namespace(file_name))
80
+ end
81
+
82
+ def bad_filename_allowed?
83
+ ignore_executable_scripts? && processed_source.start_with?('#!')
84
+ end
85
+
86
+ def no_definition_message(basename, file_path)
87
+ format(MSG_NO_DEFINITION,
88
+ basename: basename,
89
+ namespace: to_namespace(file_path).join('::'))
90
+ end
91
+
92
+ def other_message(basename)
93
+ if regex
94
+ format(MSG_REGEX, basename: basename, regex: regex)
95
+ else
96
+ format(MSG_SNAKE_CASE, basename: basename)
97
+ end
98
+ end
99
+
100
+ def ignore_executable_scripts?
101
+ cop_config['IgnoreExecutableScripts']
102
+ end
103
+
104
+ def expect_matching_definition?
105
+ cop_config['ExpectMatchingDefinition']
106
+ end
107
+
108
+ def check_definition_path_hierarchy?
109
+ cop_config['CheckDefinitionPathHierarchy']
110
+ end
111
+
112
+ def regex
113
+ cop_config['Regex']
114
+ end
115
+
116
+ def allowed_acronyms
117
+ cop_config['AllowedAcronyms'] || []
118
+ end
119
+
120
+ def filename_good?(basename)
121
+ basename = basename.sub(/^\./, '')
122
+ basename = basename.sub(/\.[^.]+$/, '')
123
+ # special handling for Action Pack Variants file names like
124
+ # some_file.xlsx+mobile.axlsx
125
+ basename = basename.sub('+', '_')
126
+ basename =~ (regex || SNAKE_CASE)
127
+ end
128
+
129
+ # rubocop:disable Metrics/CyclomaticComplexity
130
+ def find_class_or_module(node, namespace)
131
+ return nil unless node
132
+
133
+ name = namespace.pop
134
+
135
+ on_node(%i[class module casgn], node) do |child|
136
+ next unless (const = child.defined_module)
137
+
138
+ const_namespace, const_name = *const
139
+ next if name != const_name && !match_acronym?(name, const_name)
140
+ next unless namespace.empty? ||
141
+ match_namespace(child, const_namespace, namespace)
142
+
143
+ return node
144
+ end
145
+
146
+ nil
147
+ end
148
+ # rubocop:enable Metrics/CyclomaticComplexity
149
+
150
+ def match_namespace(node, namespace, expected)
151
+ match_partial = partial_matcher!(expected)
152
+
153
+ match_partial.call(namespace)
154
+
155
+ node.each_ancestor(:class, :module, :sclass, :casgn) do |ancestor|
156
+ return false if ancestor.sclass_type?
157
+
158
+ match_partial.call(ancestor.defined_module)
159
+ end
160
+
161
+ match?(expected)
162
+ end
163
+
164
+ def partial_matcher!(expected)
165
+ lambda do |namespace|
166
+ while namespace
167
+ return match?(expected) if namespace.cbase_type?
168
+
169
+ namespace, name = *namespace
170
+
171
+ expected.pop if name == expected.last || match_acronym?(expected.last, name)
172
+ end
173
+
174
+ false
175
+ end
176
+ end
177
+
178
+ def match?(expected)
179
+ expected.empty? || expected == [:Object]
180
+ end
181
+
182
+ def match_acronym?(expected, name)
183
+ expected = expected.to_s
184
+ name = name.to_s
185
+
186
+ allowed_acronyms.any? do |acronym|
187
+ expected.gsub(acronym.capitalize, acronym) == name
188
+ end
189
+ end
190
+
191
+ def to_namespace(path)
192
+ components = Pathname(path).each_filename.to_a
193
+ # To convert a pathname to a Ruby namespace, we need a starting point
194
+ # But RC can be run from any working directory, and can check any path
195
+ # We can't assume that the working directory, or any other, is the
196
+ # "starting point" to build a namespace.
197
+ start = %w[lib spec test src]
198
+ start_index = nil
199
+
200
+ # To find the closest namespace root take the path components, and
201
+ # then work through them backwards until we find a candidate. This
202
+ # makes sure we work from the actual root in the case of a path like
203
+ # /home/user/src/project_name/lib.
204
+ components.reverse.each_with_index do |c, i|
205
+ if start.include?(c)
206
+ start_index = components.size - i
207
+ break
208
+ end
209
+ end
210
+
211
+ if start_index.nil?
212
+ [to_module_name(components.last)]
213
+ else
214
+ components[start_index..-1].map { |c| to_module_name(c) }
215
+ end
216
+ end
217
+
218
+ def to_module_name(basename)
219
+ words = basename.sub(/\..*/, '').split('_')
220
+ words.map(&:capitalize).join.to_sym
221
+ end
222
+ end
223
+ end
224
+ end
225
+ end