rubocop-sorbet 0.8.4 → 0.8.5

Sign up to get free protection for your applications and to get access to all the features.
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.