rubocop 1.69.2 → 1.70.0

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 (102) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE.txt +1 -1
  3. data/README.md +2 -2
  4. data/config/default.yml +19 -2
  5. data/lib/rubocop/cli/command/execute_runner.rb +3 -3
  6. data/lib/rubocop/config.rb +13 -4
  7. data/lib/rubocop/config_loader.rb +4 -0
  8. data/lib/rubocop/config_loader_resolver.rb +14 -3
  9. data/lib/rubocop/config_validator.rb +18 -8
  10. data/lib/rubocop/cop/base.rb +6 -0
  11. data/lib/rubocop/cop/bundler/gem_comment.rb +1 -1
  12. data/lib/rubocop/cop/internal_affairs/cop_enabled.rb +85 -0
  13. data/lib/rubocop/cop/internal_affairs/node_type_predicate.rb +4 -3
  14. data/lib/rubocop/cop/internal_affairs.rb +1 -0
  15. data/lib/rubocop/cop/layout/argument_alignment.rb +1 -7
  16. data/lib/rubocop/cop/layout/empty_lines_around_access_modifier.rb +1 -0
  17. data/lib/rubocop/cop/layout/extra_spacing.rb +1 -1
  18. data/lib/rubocop/cop/layout/first_argument_indentation.rb +2 -7
  19. data/lib/rubocop/cop/layout/first_array_element_indentation.rb +2 -7
  20. data/lib/rubocop/cop/layout/first_hash_element_indentation.rb +1 -6
  21. data/lib/rubocop/cop/layout/hash_alignment.rb +6 -4
  22. data/lib/rubocop/cop/layout/heredoc_argument_closing_parenthesis.rb +1 -0
  23. data/lib/rubocop/cop/layout/line_continuation_spacing.rb +7 -1
  24. data/lib/rubocop/cop/layout/line_end_string_concatenation_indentation.rb +1 -1
  25. data/lib/rubocop/cop/layout/line_length.rb +1 -0
  26. data/lib/rubocop/cop/layout/multiline_method_argument_line_breaks.rb +24 -0
  27. data/lib/rubocop/cop/layout/redundant_line_break.rb +1 -1
  28. data/lib/rubocop/cop/layout/space_after_method_name.rb +1 -1
  29. data/lib/rubocop/cop/layout/space_around_operators.rb +3 -3
  30. data/lib/rubocop/cop/layout/trailing_whitespace.rb +5 -3
  31. data/lib/rubocop/cop/lint/constant_reassignment.rb +152 -0
  32. data/lib/rubocop/cop/lint/duplicate_set_element.rb +20 -7
  33. data/lib/rubocop/cop/lint/literal_in_interpolation.rb +11 -3
  34. data/lib/rubocop/cop/lint/nested_method_definition.rb +5 -1
  35. data/lib/rubocop/cop/lint/non_atomic_file_operation.rb +4 -3
  36. data/lib/rubocop/cop/lint/numeric_operation_with_constant_result.rb +6 -14
  37. data/lib/rubocop/cop/lint/shared_mutable_default.rb +65 -0
  38. data/lib/rubocop/cop/lint/syntax.rb +4 -1
  39. data/lib/rubocop/cop/lint/unescaped_bracket_in_regexp.rb +1 -4
  40. data/lib/rubocop/cop/lint/void.rb +3 -2
  41. data/lib/rubocop/cop/metrics/method_length.rb +8 -1
  42. data/lib/rubocop/cop/mixin/check_line_breakable.rb +7 -7
  43. data/lib/rubocop/cop/mixin/comments_help.rb +2 -0
  44. data/lib/rubocop/cop/mixin/dig_help.rb +1 -1
  45. data/lib/rubocop/cop/mixin/preceding_following_alignment.rb +26 -16
  46. data/lib/rubocop/cop/mixin/space_before_punctuation.rb +1 -1
  47. data/lib/rubocop/cop/mixin/statement_modifier.rb +1 -1
  48. data/lib/rubocop/cop/mixin/string_literals_help.rb +1 -1
  49. data/lib/rubocop/cop/naming/block_forwarding.rb +1 -1
  50. data/lib/rubocop/cop/style/access_modifier_declarations.rb +32 -1
  51. data/lib/rubocop/cop/style/and_or.rb +1 -1
  52. data/lib/rubocop/cop/style/arguments_forwarding.rb +1 -4
  53. data/lib/rubocop/cop/style/class_and_module_children.rb +5 -2
  54. data/lib/rubocop/cop/style/each_for_simple_loop.rb +3 -6
  55. data/lib/rubocop/cop/style/empty_else.rb +4 -2
  56. data/lib/rubocop/cop/style/empty_literal.rb +1 -1
  57. data/lib/rubocop/cop/style/empty_method.rb +1 -1
  58. data/lib/rubocop/cop/style/exact_regexp_match.rb +2 -9
  59. data/lib/rubocop/cop/style/exponential_notation.rb +1 -1
  60. data/lib/rubocop/cop/style/float_division.rb +8 -4
  61. data/lib/rubocop/cop/style/hash_except.rb +54 -67
  62. data/lib/rubocop/cop/style/hash_syntax.rb +5 -2
  63. data/lib/rubocop/cop/style/it_assignment.rb +36 -0
  64. data/lib/rubocop/cop/style/method_call_with_args_parentheses/omit_parentheses.rb +11 -1
  65. data/lib/rubocop/cop/style/method_call_with_args_parentheses.rb +2 -0
  66. data/lib/rubocop/cop/style/missing_else.rb +2 -0
  67. data/lib/rubocop/cop/style/multiple_comparison.rb +26 -20
  68. data/lib/rubocop/cop/style/mutable_constant.rb +1 -1
  69. data/lib/rubocop/cop/style/object_then.rb +13 -15
  70. data/lib/rubocop/cop/style/quoted_symbols.rb +1 -1
  71. data/lib/rubocop/cop/style/raise_args.rb +5 -3
  72. data/lib/rubocop/cop/style/random_with_offset.rb +3 -3
  73. data/lib/rubocop/cop/style/redundant_current_directory_in_path.rb +2 -1
  74. data/lib/rubocop/cop/style/redundant_initialize.rb +12 -3
  75. data/lib/rubocop/cop/style/redundant_line_continuation.rb +7 -3
  76. data/lib/rubocop/cop/style/redundant_parentheses.rb +1 -4
  77. data/lib/rubocop/cop/style/redundant_regexp_argument.rb +3 -0
  78. data/lib/rubocop/cop/style/redundant_self_assignment.rb +6 -5
  79. data/lib/rubocop/cop/style/safe_navigation.rb +1 -1
  80. data/lib/rubocop/cop/style/send_with_literal_method_name.rb +2 -1
  81. data/lib/rubocop/cop/style/single_line_do_end_block.rb +1 -2
  82. data/lib/rubocop/cop/style/single_line_methods.rb +2 -3
  83. data/lib/rubocop/cop/style/slicing_with_range.rb +40 -11
  84. data/lib/rubocop/cop/style/super_arguments.rb +63 -15
  85. data/lib/rubocop/cop/style/yoda_condition.rb +8 -4
  86. data/lib/rubocop/cop/style/yoda_expression.rb +1 -0
  87. data/lib/rubocop/cop/util.rb +9 -2
  88. data/lib/rubocop/formatter/formatter_set.rb +1 -1
  89. data/lib/rubocop/lsp/diagnostic.rb +189 -0
  90. data/lib/rubocop/lsp/logger.rb +2 -2
  91. data/lib/rubocop/lsp/routes.rb +7 -23
  92. data/lib/rubocop/lsp/runtime.rb +15 -49
  93. data/lib/rubocop/lsp/stdin_runner.rb +83 -0
  94. data/lib/rubocop/path_util.rb +11 -8
  95. data/lib/rubocop/rspec/shared_contexts.rb +4 -1
  96. data/lib/rubocop/runner.rb +5 -6
  97. data/lib/rubocop/target_ruby.rb +15 -0
  98. data/lib/rubocop/version.rb +1 -1
  99. data/lib/rubocop.rb +3 -0
  100. data/lib/ruby_lsp/rubocop/addon.rb +78 -0
  101. data/lib/ruby_lsp/rubocop/wraps_built_in_lsp_runtime.rb +50 -0
  102. metadata +12 -4
@@ -0,0 +1,78 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../../rubocop'
4
+ require_relative '../../rubocop/lsp/logger'
5
+ require_relative 'wraps_built_in_lsp_runtime'
6
+
7
+ module RubyLsp
8
+ module RuboCop
9
+ # A Ruby LSP add-on for RuboCop.
10
+ class Addon < RubyLsp::Addon
11
+ def initializer
12
+ @wraps_built_in_lsp_runtime = nil
13
+ end
14
+
15
+ def name
16
+ 'RuboCop'
17
+ end
18
+
19
+ def activate(global_state, message_queue)
20
+ ::RuboCop::LSP::Logger.log(
21
+ "Activating RuboCop LSP addon #{::RuboCop::Version::STRING}.", prefix: '[RuboCop]'
22
+ )
23
+
24
+ ::RuboCop::LSP.enable
25
+ @wraps_built_in_lsp_runtime = WrapsBuiltinLspRuntime.new
26
+
27
+ global_state.register_formatter('rubocop', @wraps_built_in_lsp_runtime)
28
+
29
+ register_additional_file_watchers(global_state, message_queue)
30
+
31
+ ::RuboCop::LSP::Logger.log(
32
+ "Initialized RuboCop LSP addon #{::RuboCop::Version::STRING}.", prefix: '[RuboCop]'
33
+ )
34
+ end
35
+
36
+ def deactivate
37
+ @wraps_built_in_lsp_runtime = nil
38
+ end
39
+
40
+ # rubocop:disable Layout/LineLength, Metrics/MethodLength
41
+ def register_additional_file_watchers(global_state, message_queue)
42
+ return unless global_state.supports_watching_files
43
+
44
+ message_queue << Request.new(
45
+ id: 'rubocop-file-watcher',
46
+ method: 'client/registerCapability',
47
+ params: Interface::RegistrationParams.new(
48
+ registrations: [
49
+ Interface::Registration.new(
50
+ id: 'workspace/didChangeWatchedFilesRuboCop',
51
+ method: 'workspace/didChangeWatchedFiles',
52
+ register_options: Interface::DidChangeWatchedFilesRegistrationOptions.new(
53
+ watchers: [
54
+ Interface::FileSystemWatcher.new(
55
+ glob_pattern: '**/.rubocop{,_todo}.yml',
56
+ kind: Constant::WatchKind::CREATE | Constant::WatchKind::CHANGE | Constant::WatchKind::DELETE
57
+ )
58
+ ]
59
+ )
60
+ )
61
+ ]
62
+ )
63
+ )
64
+ end
65
+ # rubocop:enable Layout/LineLength, Metrics/MethodLength
66
+
67
+ def workspace_did_change_watched_files(changes)
68
+ return unless changes.any? { |change| change[:uri].end_with?('.rubocop.yml') }
69
+
70
+ @wraps_built_in_lsp_runtime.init!
71
+
72
+ ::RuboCop::LSP::Logger(<<~MESSAGE, prefix: '[RuboCop]')
73
+ Re-initialized RuboCop LSP addon #{::RuboCop::Version::STRING} due to .rubocop.yml file change.
74
+ MESSAGE
75
+ end
76
+ end
77
+ end
78
+ end
@@ -0,0 +1,50 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../../rubocop/lsp/runtime'
4
+
5
+ module RubyLsp
6
+ module RuboCop
7
+ # Wrap RuboCop's built-in runtime for Ruby LSP's add-on.
8
+ class WrapsBuiltinLspRuntime
9
+ include RubyLsp::Requests::Support::Formatter
10
+
11
+ def initialize
12
+ init!
13
+ end
14
+
15
+ def init!
16
+ config = ::RuboCop::ConfigStore.new
17
+
18
+ @runtime = ::RuboCop::LSP::Runtime.new(config)
19
+ end
20
+
21
+ def run_diagnostic(uri, document)
22
+ @runtime.offenses(uri_to_path(uri), document.source, document.encoding)
23
+ end
24
+
25
+ def run_formatting(uri, document)
26
+ @runtime.format(uri_to_path(uri), document.source, command: 'rubocop.formatAutocorrects')
27
+ end
28
+
29
+ def run_range_formatting(_uri, _partial_source, _base_indentation)
30
+ # Not yet supported. Should return the formatted version of `partial_source` which is
31
+ # a partial selection of the entire document. For example, it should not try to add
32
+ # a frozen_string_literal magic comment and all style corrections should start from
33
+ # the `base_indentation`.
34
+ nil
35
+ end
36
+
37
+ private
38
+
39
+ # duplicated from: lib/standard/lsp/routes.rb
40
+ # modified to incorporate Ruby LSP's to_standardized_path method
41
+ def uri_to_path(uri)
42
+ if uri.respond_to?(:to_standardized_path) && (standardized_path = uri.to_standardized_path)
43
+ standardized_path
44
+ else
45
+ uri.to_s.delete_prefix('file://')
46
+ end
47
+ end
48
+ end
49
+ end
50
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rubocop
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.69.2
4
+ version: 1.70.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Bozhidar Batsov
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: exe
12
12
  cert_chain: []
13
- date: 2024-12-12 00:00:00.000000000 Z
13
+ date: 2025-01-10 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: json
@@ -266,6 +266,7 @@ files:
266
266
  - lib/rubocop/cop/ignored_node.rb
267
267
  - lib/rubocop/cop/internal_affairs.rb
268
268
  - lib/rubocop/cop/internal_affairs/cop_description.rb
269
+ - lib/rubocop/cop/internal_affairs/cop_enabled.rb
269
270
  - lib/rubocop/cop/internal_affairs/create_empty_file.rb
270
271
  - lib/rubocop/cop/internal_affairs/empty_line_between_expect_offense_and_correction.rb
271
272
  - lib/rubocop/cop/internal_affairs/example_description.rb
@@ -411,6 +412,7 @@ files:
411
412
  - lib/rubocop/cop/lint/circular_argument_reference.rb
412
413
  - lib/rubocop/cop/lint/constant_definition_in_block.rb
413
414
  - lib/rubocop/cop/lint/constant_overwritten_in_rescue.rb
415
+ - lib/rubocop/cop/lint/constant_reassignment.rb
414
416
  - lib/rubocop/cop/lint/constant_resolution.rb
415
417
  - lib/rubocop/cop/lint/debugger.rb
416
418
  - lib/rubocop/cop/lint/deprecated_class_methods.rb
@@ -510,6 +512,7 @@ files:
510
512
  - lib/rubocop/cop/lint/shadowed_argument.rb
511
513
  - lib/rubocop/cop/lint/shadowed_exception.rb
512
514
  - lib/rubocop/cop/lint/shadowing_outer_local_variable.rb
515
+ - lib/rubocop/cop/lint/shared_mutable_default.rb
513
516
  - lib/rubocop/cop/lint/struct_new_override.rb
514
517
  - lib/rubocop/cop/lint/suppressed_exception.rb
515
518
  - lib/rubocop/cop/lint/symbol_conversion.rb
@@ -770,6 +773,7 @@ files:
770
773
  - lib/rubocop/cop/style/inverse_methods.rb
771
774
  - lib/rubocop/cop/style/invertible_unless_condition.rb
772
775
  - lib/rubocop/cop/style/ip_addresses.rb
776
+ - lib/rubocop/cop/style/it_assignment.rb
773
777
  - lib/rubocop/cop/style/keyword_arguments_merging.rb
774
778
  - lib/rubocop/cop/style/keyword_parameters_order.rb
775
779
  - lib/rubocop/cop/style/lambda.rb
@@ -985,11 +989,13 @@ files:
985
989
  - lib/rubocop/formatter/worst_offenders_formatter.rb
986
990
  - lib/rubocop/lockfile.rb
987
991
  - lib/rubocop/lsp.rb
992
+ - lib/rubocop/lsp/diagnostic.rb
988
993
  - lib/rubocop/lsp/logger.rb
989
994
  - lib/rubocop/lsp/routes.rb
990
995
  - lib/rubocop/lsp/runtime.rb
991
996
  - lib/rubocop/lsp/server.rb
992
997
  - lib/rubocop/lsp/severity.rb
998
+ - lib/rubocop/lsp/stdin_runner.rb
993
999
  - lib/rubocop/magic_comment.rb
994
1000
  - lib/rubocop/name_similarity.rb
995
1001
  - lib/rubocop/options.rb
@@ -1030,14 +1036,16 @@ files:
1030
1036
  - lib/rubocop/version.rb
1031
1037
  - lib/rubocop/warning.rb
1032
1038
  - lib/rubocop/yaml_duplication_checker.rb
1039
+ - lib/ruby_lsp/rubocop/addon.rb
1040
+ - lib/ruby_lsp/rubocop/wraps_built_in_lsp_runtime.rb
1033
1041
  homepage: https://github.com/rubocop/rubocop
1034
1042
  licenses:
1035
1043
  - MIT
1036
1044
  metadata:
1037
1045
  homepage_uri: https://rubocop.org/
1038
- changelog_uri: https://github.com/rubocop/rubocop/releases/tag/v1.69.2
1046
+ changelog_uri: https://github.com/rubocop/rubocop/releases/tag/v1.70.0
1039
1047
  source_code_uri: https://github.com/rubocop/rubocop/
1040
- documentation_uri: https://docs.rubocop.org/rubocop/1.69/
1048
+ documentation_uri: https://docs.rubocop.org/rubocop/1.70/
1041
1049
  bug_tracker_uri: https://github.com/rubocop/rubocop/issues
1042
1050
  rubygems_mfa_required: 'true'
1043
1051
  post_install_message: