rubocop-sorbet 0.8.4 → 0.8.5

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9cb17e31fa88a9bf6693e1bbdad97425f25920b8293782b2dbf3642df2b3138d
4
- data.tar.gz: 1a7cc0e93155410faf2f7e9f431b7a182e72b081217774796ff63515a1b2bbc4
3
+ metadata.gz: 9dfcaff074a9af626b94a6909e3d6c3ea99749bced60c513d123cc00d4af2f26
4
+ data.tar.gz: 961d6723c8fa9e67dd25febab735a58ea4a7023c46132b008f3a8c4f996a18c6
5
5
  SHA512:
6
- metadata.gz: 694a6aeff04a8c14a8a511f0f44ffc6abb0035fbbedc9a9e0bdaeeef3ba97d5a360cdc8141048f502f663475743441d8537f7f27c4c2cae78b40cb8d050e8375
7
- data.tar.gz: 8781a983e0e0e97a3535943c9ffe76beab985cc5643832b9b138590d3585220dddba6ec3fcdbe6d2ea58152a6349d6fb28c418d7874a7b53b271190120d7bf93
6
+ metadata.gz: 927874817f3166896f9cbb5267f95fa18570ce29c01432ff076a9949b71986bc13ccdbb849bf943b4b908bc5b682448d381c5b7e579af3f1f963662ef93bf606
7
+ data.tar.gz: 2ad69a1852bea8490f7c3b0cb157482dc0176abeae0f8834f8e8afcc7b582db822a3fa86df331d3315743628f40a9352af45a320de12bb4e990c216babc041a1
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- rubocop-sorbet (0.8.4)
4
+ rubocop-sorbet (0.8.5)
5
5
  rubocop (>= 1)
6
6
 
7
7
  GEM
data/config/rbi.yml CHANGED
@@ -169,9 +169,15 @@ Layout/SpaceBeforeFirstArg:
169
169
  Layout/SpaceBeforeSemicolon:
170
170
  Enabled: true
171
171
 
172
+ Layout/SpaceInsideBlockBraces:
173
+ Enabled: true
174
+
172
175
  Layout/SpaceInsideParens:
173
176
  Enabled: true
174
177
 
178
+ Layout/SpaceInsideReferenceBrackets:
179
+ Enabled: true
180
+
175
181
  Layout/TrailingEmptyLines:
176
182
  Enabled: true
177
183
  EnforcedStyle: final_newline
@@ -220,6 +226,16 @@ Sorbet/SingleLineRbiClassModuleDefinitions:
220
226
  Sorbet/TypeAliasName:
221
227
  Enabled: true
222
228
 
229
+ Sorbet/ValidGemVersionAnnotations:
230
+ Description: >-
231
+ Ensures all gem version annotations in RBI files are correctly formatted per
232
+ Ruby's gem version specification guidelines.
233
+
234
+ See the rubygems.org documentation for more information on how to format gem
235
+ versions: https://guides.rubygems.org/patterns/#pessimistic-version-constraint
236
+ Enabled: false
237
+ VersionAdded: 0.8.5
238
+
223
239
  Sorbet/ValidSigil:
224
240
  Enabled: true
225
241
  RequireSigilOnAllFiles: true
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RuboCop
4
+ module Cop
5
+ module Sorbet
6
+ module GemVersionAnnotationHelper
7
+ VERSION_PREFIX = "# @version"
8
+
9
+ def gem_version_annotations
10
+ processed_source.comments.select do |comment|
11
+ gem_version_annotation?(comment)
12
+ end
13
+ end
14
+
15
+ private
16
+
17
+ def gem_version_annotation?(comment)
18
+ comment.text.start_with?(VERSION_PREFIX)
19
+ end
20
+
21
+ def gem_versions(comment)
22
+ comment.text.delete_prefix(VERSION_PREFIX).split(/, ?/).map(&:strip)
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,62 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RuboCop
4
+ module Cop
5
+ module Sorbet
6
+ # Checks that gem versions in RBI annotations are properly formatted per the Bundler gem specification.
7
+ #
8
+ # @example
9
+ # # bad
10
+ # # @version > not a version number
11
+ #
12
+ # # good
13
+ # # @version = 1
14
+ #
15
+ # # good
16
+ # # @version > 1.2.3
17
+ #
18
+ # # good
19
+ # # @version <= 4.3-preview
20
+ #
21
+ class ValidGemVersionAnnotations < RuboCop::Cop::Base
22
+ include GemVersionAnnotationHelper
23
+
24
+ MSG = "Invalid gem version(s) detected: %<versions>s"
25
+ VALID_OPERATORS = ["=", "!=", ">", ">=", "<", "<=", "~>"]
26
+
27
+ def on_new_investigation
28
+ gem_version_annotations.each do |comment|
29
+ gem_versions = gem_versions(comment)
30
+
31
+ if gem_versions.empty?
32
+ message = format(MSG, versions: "empty version")
33
+ add_offense(comment, message: message)
34
+ break
35
+ end
36
+
37
+ invalid_versions = gem_versions.reject do |version|
38
+ valid_version?(version)
39
+ end
40
+
41
+ unless invalid_versions.empty?
42
+ message = format(MSG, versions: invalid_versions.map(&:strip).join(", "))
43
+ add_offense(comment, message: message)
44
+ end
45
+ end
46
+ end
47
+
48
+ private
49
+
50
+ def valid_version?(version_string)
51
+ parts = version_string.strip.split(" ")
52
+ operator, version = parts
53
+
54
+ return false unless operator && parts
55
+ return false unless VALID_OPERATORS.include?(operator)
56
+
57
+ Gem::Version.correct?(version)
58
+ end
59
+ end
60
+ end
61
+ end
62
+ end
@@ -21,7 +21,7 @@ module RuboCop
21
21
  # serialize <=> other.serialize
22
22
  # end
23
23
  # end
24
- class ForbidComparableTEnum < Base
24
+ class ForbidComparableTEnum < RuboCop::Cop::Base
25
25
  include TEnum
26
26
 
27
27
  MSG = "Do not use `T::Enum` as a comparable object because of significant performance overhead."
@@ -21,7 +21,7 @@ module RuboCop
21
21
  # NotFound = new("The resource was not found.")
22
22
  # end
23
23
  # end
24
- class MultipleTEnumValues < Base
24
+ class MultipleTEnumValues < RuboCop::Cop::Base
25
25
  include TEnum
26
26
 
27
27
  MSG = "`T::Enum` should have at least two values."
@@ -24,6 +24,9 @@ require_relative "sorbet/rbi/forbid_extend_t_sig_helpers_in_shims"
24
24
  require_relative "sorbet/rbi/forbid_rbi_outside_of_allowed_paths"
25
25
  require_relative "sorbet/rbi/single_line_rbi_class_module_definitions"
26
26
 
27
+ require_relative "sorbet/rbi_versioning/gem_version_annotation_helper"
28
+ require_relative "sorbet/rbi_versioning/valid_gem_version_annotations"
29
+
27
30
  require_relative "sorbet/signatures/allow_incompatible_override"
28
31
  require_relative "sorbet/signatures/checked_true_in_signature"
29
32
  require_relative "sorbet/signatures/void_checked_tests"
@@ -2,6 +2,6 @@
2
2
 
3
3
  module RuboCop
4
4
  module Sorbet
5
- VERSION = "0.8.4"
5
+ VERSION = "0.8.5"
6
6
  end
7
7
  end
data/manual/cops.md CHANGED
@@ -39,6 +39,7 @@ In the following section you find all available cops:
39
39
  * [Sorbet/StrongSigil](cops_sorbet.md#sorbetstrongsigil)
40
40
  * [Sorbet/TrueSigil](cops_sorbet.md#sorbettruesigil)
41
41
  * [Sorbet/TypeAliasName](cops_sorbet.md#sorbettypealiasname)
42
+ * [Sorbet/ValidGemVersionAnnotations](cops_sorbet.md#sorbetvalidgemversionannotations)
42
43
  * [Sorbet/ValidSigil](cops_sorbet.md#sorbetvalidsigil)
43
44
  * [Sorbet/VoidCheckedTests](cops_sorbet.md#sorbetvoidcheckedtests)
44
45
 
@@ -892,6 +892,30 @@ Name | Default value | Configurable values
892
892
  Include | `**/*.{rb,rbi,rake,ru}` | Array
893
893
  Exclude | `bin/**/*`, `db/**/*.rb`, `script/**/*` | Array
894
894
 
895
+ ## Sorbet/ValidGemVersionAnnotations
896
+
897
+ Enabled by default | Safe | Supports autocorrection | VersionAdded | VersionChanged
898
+ --- | --- | --- | --- | ---
899
+ Enabled | Yes | No | - | -
900
+
901
+ Checks that gem versions in RBI annotations are properly formatted per the Bundler gem specification.
902
+
903
+ ### Examples
904
+
905
+ ```ruby
906
+ # bad
907
+ # @version > not a version number
908
+
909
+ # good
910
+ # @version = 1
911
+
912
+ # good
913
+ # @version > 1.2.3
914
+
915
+ # good
916
+ # @version <= 4.3-preview
917
+ ```
918
+
895
919
  ## Sorbet/ValidSigil
896
920
 
897
921
  Enabled by default | Safe | Supports autocorrection | VersionAdded | VersionChanged
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rubocop-sorbet
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.4
4
+ version: 0.8.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ufuk Kayserilioglu
@@ -11,7 +11,7 @@ authors:
11
11
  autorequire:
12
12
  bindir: exe
13
13
  cert_chain: []
14
- date: 2024-07-16 00:00:00.000000000 Z
14
+ date: 2024-07-25 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: rubocop
@@ -81,6 +81,8 @@ files:
81
81
  - lib/rubocop/cop/sorbet/rbi/forbid_extend_t_sig_helpers_in_shims.rb
82
82
  - lib/rubocop/cop/sorbet/rbi/forbid_rbi_outside_of_allowed_paths.rb
83
83
  - lib/rubocop/cop/sorbet/rbi/single_line_rbi_class_module_definitions.rb
84
+ - lib/rubocop/cop/sorbet/rbi_versioning/gem_version_annotation_helper.rb
85
+ - lib/rubocop/cop/sorbet/rbi_versioning/valid_gem_version_annotations.rb
84
86
  - lib/rubocop/cop/sorbet/redundant_extend_t_sig.rb
85
87
  - lib/rubocop/cop/sorbet/sigils/enforce_sigil_order.rb
86
88
  - lib/rubocop/cop/sorbet/sigils/enforce_single_sigil.rb
@@ -133,7 +135,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
133
135
  - !ruby/object:Gem::Version
134
136
  version: '0'
135
137
  requirements: []
136
- rubygems_version: 3.5.15
138
+ rubygems_version: 3.5.16
137
139
  signing_key:
138
140
  specification_version: 4
139
141
  summary: Automatic Sorbet code style checking tool.