rubocop-sorbet 0.7.4 → 0.7.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: d771dbc78b04c867bb517a024dacaf6d1c280539ebbd6950374a19fe9d89e439
4
- data.tar.gz: 5310766358cdbfec15d154733f32769ab7320cf987798710a2c0f1dcd2fddceb
3
+ metadata.gz: 9b2451806224baad5c72fb848ae38e6510037b2e26415afc236c3639f8504655
4
+ data.tar.gz: e55c4a39d87a4fe345a6257e14483de155738ea5d39c25ef1e7822a2174321cb
5
5
  SHA512:
6
- metadata.gz: 2b0a1b42b4a1a368565d86ef69a335bc5345a562a892dcc930bd4786e1049c5d4cc018a762df22ffac6189aa68628d3c5f74cee147232f6eb9de62d21350d19b
7
- data.tar.gz: 21d0d71d76975bb9204622b40a026fdc3c5c62105506ddfa293df0cf117e52d05e541a430290d045792208019a60ee824c9e8535d36a5d8f70f455abdbc42f89
6
+ metadata.gz: d05d0627ce52223c931f3461e221f6cb105838c21eeae6d68a7270934e6e292fcd2a7390453583c95d721bc1544125cb74f2d65ef6161c4d8fe823c3ee8217e6
7
+ data.tar.gz: adf840bad5a49581286937604e83b3ee864f45031efb115db9faed9032da04d4178d7022b3d2040e08e8b10dc5f7a95bc8bf8a0ee1ac06ba74780b135d947b26
@@ -6,12 +6,12 @@ env:
6
6
  SRB_SKIP_GEM_RBIS: true
7
7
 
8
8
  jobs:
9
- build:
9
+ test:
10
10
  runs-on: ubuntu-latest
11
11
  strategy:
12
12
  fail-fast: false
13
13
  matrix:
14
- ruby: [ '2.7', '3.0', '3.1', '3.2' ]
14
+ ruby: ["2.7", "3.0", "3.1", "3.2"]
15
15
  name: Test Ruby ${{ matrix.ruby }}
16
16
  steps:
17
17
  - uses: actions/checkout@v2
@@ -20,9 +20,22 @@ jobs:
20
20
  with:
21
21
  ruby-version: ${{ matrix.ruby }}
22
22
  bundler-cache: true
23
+ - name: Run tests
24
+ run: bin/rspec
25
+
26
+ lint-and-docs:
27
+ runs-on: ubuntu-latest
28
+ strategy:
29
+ fail-fast: false
30
+ name: Lint & Docs
31
+ steps:
32
+ - uses: actions/checkout@v2
33
+ - name: Set up Ruby
34
+ uses: ruby/setup-ruby@v1
35
+ with:
36
+ ruby-version: 3.2
37
+ bundler-cache: true
23
38
  - name: Lint Ruby files
24
39
  run: bin/rubocop
25
40
  - name: Verify documentation is up to date
26
41
  run: bundle exec rake generate_cops_documentation
27
- - name: Run tests
28
- run: bin/rspec
data/.rubocop.yml CHANGED
@@ -22,3 +22,6 @@ Naming/FileName:
22
22
 
23
23
  Layout/LineLength:
24
24
  IgnoreCopDirectives: true
25
+
26
+ InternalAffairs/UndefinedConfig:
27
+ Enabled: false # Bug in implementation fails to find our configs
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- rubocop-sorbet (0.7.4)
4
+ rubocop-sorbet (0.7.5)
5
5
  rubocop (>= 0.90.0)
6
6
 
7
7
  GEM
data/config/rbi.yml CHANGED
@@ -242,6 +242,9 @@ Style/ClassAndModuleChildren:
242
242
  Style/DefWithParentheses:
243
243
  Enabled: true
244
244
 
245
+ Sorbet/EmptyLineAfterSig:
246
+ Enabled: true
247
+
245
248
  Style/EmptyMethod:
246
249
  Enabled: true
247
250
  EnforcedStyle: compact
@@ -26,44 +26,38 @@ module RuboCop
26
26
  # ```ruby
27
27
  # include Polaris::Engine.helpers
28
28
  # ```
29
- class ForbidIncludeConstLiteral < RuboCop::Cop::Cop # rubocop:todo InternalAffairs/InheritDeprecatedCopClass
30
- MSG = "Includes must only contain constant literals"
29
+ class ForbidIncludeConstLiteral < RuboCop::Cop::Base
30
+ extend AutoCorrector
31
31
 
32
- attr_accessor :used_names
32
+ MSG = "`%<inclusion_method>s` must only be used with constant literals as arguments"
33
+ RESTRICT_ON_SEND = [:include, :extend, :prepend].freeze
33
34
 
34
- # @!method not_lit_const_include?(node)
35
- def_node_matcher :not_lit_const_include?, <<-PATTERN
36
- (send nil? {:include :extend :prepend}
37
- $_
38
- )
35
+ # @!method dynamic_inclusion?(node)
36
+ def_node_matcher :dynamic_inclusion?, <<~PATTERN
37
+ (send nil? ${:include :extend :prepend} $#neither_const_nor_self?)
39
38
  PATTERN
40
39
 
41
- def initialize(*)
42
- super
43
- self.used_names = Set.new
44
- end
45
-
46
40
  def on_send(node)
47
- return unless not_lit_const_include?(node) do |send_argument|
48
- ![:const, :self].include?(send_argument.type)
49
- end
41
+ dynamic_inclusion?(node) do |inclusion_method, included|
42
+ return unless within_onymous_module?(node)
50
43
 
51
- parent = node.parent
52
- return unless parent
44
+ add_offense(node, message: format(MSG, inclusion_method: inclusion_method)) do |corrector|
45
+ corrector.replace(node, "T.unsafe(self).#{inclusion_method} #{included.source}")
46
+ end
47
+ end
48
+ end
53
49
 
54
- parent = parent.parent if [:begin, :block].include?(parent.type)
55
- return unless [:module, :class, :sclass].include?(parent.type)
50
+ private
56
51
 
57
- add_offense(node)
52
+ def neither_const_nor_self?(node)
53
+ !node.const_type? && !node.self_type?
58
54
  end
59
55
 
60
- def autocorrect(node)
61
- lambda do |corrector|
62
- corrector.replace(
63
- node,
64
- "T.unsafe(self).#{node.source}",
65
- )
66
- end
56
+ # Returns true if the node is within a module declaration that is not anonymous.
57
+ def within_onymous_module?(node)
58
+ parent = node.parent
59
+ parent = parent.parent while parent&.begin_type? || parent&.block_type?
60
+ parent && (parent.module_type? || parent.class_type? || parent.sclass_type?)
67
61
  end
68
62
  end
69
63
  end
@@ -131,8 +131,13 @@ module RuboCop
131
131
  def initialize_param
132
132
  rb = String.new
133
133
  rb << "#{name}:"
134
- rb << " #{default}" if default
135
- rb << " #{factory}" if factory
134
+ if default
135
+ rb << " #{default}"
136
+ elsif factory
137
+ rb << " #{factory}"
138
+ elsif nilable?
139
+ rb << " nil"
140
+ end
136
141
  rb
137
142
  end
138
143
 
@@ -142,6 +147,10 @@ module RuboCop
142
147
  rb << ".call" if factory
143
148
  rb
144
149
  end
150
+
151
+ def nilable?
152
+ type.start_with?("T.nilable(")
153
+ end
145
154
  end
146
155
 
147
156
  # @!method t_struct?(node)
@@ -203,11 +212,11 @@ module RuboCop
203
212
 
204
213
  def initialize_method(indent, props)
205
214
  # We sort optional keyword arguments after required ones
206
- props = props.sort_by { |prop| prop.default || prop.factory ? 1 : 0 }
215
+ sorted_props = props.sort_by { |prop| prop.default || prop.factory || prop.nilable? ? 1 : 0 }
207
216
 
208
217
  string = +"\n"
209
- string << "#{indent}sig { params(#{props.map(&:initialize_sig_param).join(", ")}).void }\n"
210
- string << "#{indent}def initialize(#{props.map(&:initialize_param).join(", ")})\n"
218
+ string << "#{indent}sig { params(#{sorted_props.map(&:initialize_sig_param).join(", ")}).void }\n"
219
+ string << "#{indent}def initialize(#{sorted_props.map(&:initialize_param).join(", ")})\n"
211
220
  props.each do |prop|
212
221
  string << "#{indent} #{prop.initialize_assign}\n"
213
222
  end
@@ -1,15 +1,11 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "rubocop"
4
-
5
3
  module RuboCop
6
4
  module Cop
7
5
  module Sorbet
8
- # Abstract cop specific to Sorbet signatures
9
- #
10
- # You can subclass it to use the `on_signature` trigger and the `signature?` node matcher.
11
- class SignatureCop < RuboCop::Cop::Cop # rubocop:todo InternalAffairs/InheritDeprecatedCopClass
12
- @registry = Cop.registry # So we can properly subclass this cop
6
+ # Mixin for writing cops for signatures, providing a `signature?` node matcher and an `on_signature` trigger.
7
+ module SignatureHelp
8
+ extend RuboCop::NodePattern::Macros
13
9
 
14
10
  # @!method signature?(node)
15
11
  def_node_matcher(:signature?, <<~PATTERN)
@@ -22,12 +18,12 @@ module RuboCop
22
18
 
23
19
  # @!method with_runtime?(node)
24
20
  def_node_matcher(:with_runtime?, <<~PATTERN)
25
- (const (const nil? :T) :Sig)
21
+ (const (const {nil? cbase} :T) :Sig)
26
22
  PATTERN
27
23
 
28
24
  # @!method without_runtime?(node)
29
25
  def_node_matcher(:without_runtime?, <<~PATTERN)
30
- (const (const (const nil? :T) :Sig) :WithoutRuntime)
26
+ (const (const (const {nil? cbase} :T) :Sig) :WithoutRuntime)
31
27
  PATTERN
32
28
 
33
29
  def on_block(node)
@@ -36,8 +32,8 @@ module RuboCop
36
32
 
37
33
  alias_method :on_numblock, :on_block
38
34
 
39
- def on_signature(_)
40
- # To be defined in subclasses
35
+ def on_signature(_node)
36
+ # To be defined by cop class as needed
41
37
  end
42
38
  end
43
39
  end
@@ -56,7 +56,7 @@ module RuboCop
56
56
  private
57
57
 
58
58
  def allowed_paths
59
- paths = cop_config["AllowedPaths"] # rubocop:todo InternalAffairs/UndefinedConfig
59
+ paths = cop_config["AllowedPaths"]
60
60
  return unless paths.is_a?(Array)
61
61
 
62
62
  paths.compact
@@ -90,7 +90,7 @@ module RuboCop
90
90
  return suggested_strictness unless minimum_strictness
91
91
 
92
92
  # special case: if you're using Sorbet/IgnoreSigil without config, we should recommend `ignore`
93
- return "ignore" if minimum_strictness == "ignore" && cop_config["SuggestedStrictness"].nil? # rubocop:todo InternalAffairs/UndefinedConfig
93
+ return "ignore" if minimum_strictness == "ignore" && cop_config["SuggestedStrictness"].nil?
94
94
 
95
95
  # if a minimum strictness is set (eg. you're using Sorbet/FalseSigil)
96
96
  # we want to compare the minimum strictness and suggested strictness. this is because
@@ -161,24 +161,24 @@ module RuboCop
161
161
 
162
162
  # Default is `false`
163
163
  def require_sigil_on_all_files?
164
- !!cop_config["RequireSigilOnAllFiles"] # rubocop:todo InternalAffairs/UndefinedConfig
164
+ !!cop_config["RequireSigilOnAllFiles"]
165
165
  end
166
166
 
167
167
  # Default is `'false'`
168
168
  def suggested_strictness
169
- config = cop_config["SuggestedStrictness"].to_s # rubocop:todo InternalAffairs/UndefinedConfig
169
+ config = cop_config["SuggestedStrictness"].to_s
170
170
  STRICTNESS_LEVELS.include?(config) ? config : "false"
171
171
  end
172
172
 
173
173
  # Default is `nil`
174
174
  def minimum_strictness
175
- config = cop_config["MinimumStrictness"].to_s # rubocop:todo InternalAffairs/UndefinedConfig
175
+ config = cop_config["MinimumStrictness"].to_s
176
176
  config if STRICTNESS_LEVELS.include?(config)
177
177
  end
178
178
 
179
179
  # Default is `nil`
180
180
  def exact_strictness
181
- config = cop_config["ExactStrictness"].to_s # rubocop:todo InternalAffairs/UndefinedConfig
181
+ config = cop_config["ExactStrictness"].to_s
182
182
  config if STRICTNESS_LEVELS.include?(config)
183
183
  end
184
184
  end
@@ -56,7 +56,7 @@ module RuboCop
56
56
  return unless sig?(node.send_node)
57
57
 
58
58
  block = node.children.last
59
- return unless block.send_type?
59
+ return unless block&.send_type?
60
60
 
61
61
  receiver = block.receiver
62
62
  while receiver
@@ -1,8 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "rubocop"
4
- require_relative "signature_cop"
5
-
6
3
  module RuboCop
7
4
  module Cop
8
5
  module Sorbet
@@ -19,8 +16,9 @@ module RuboCop
19
16
  #
20
17
  # # good
21
18
  # sig { void }
22
- class CheckedTrueInSignature < SignatureCop
19
+ class CheckedTrueInSignature < ::RuboCop::Cop::Cop # rubocop:todo InternalAffairs/InheritDeprecatedCopClass
23
20
  include(RuboCop::Cop::RangeHelp)
21
+ include(RuboCop::Cop::Sorbet::SignatureHelp)
24
22
 
25
23
  # @!method offending_node(node)
26
24
  def_node_search(:offending_node, <<~PATTERN)
@@ -1,16 +1,11 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative "signature_cop"
4
-
5
3
  module RuboCop
6
4
  module Cop
7
5
  module Sorbet
8
6
  # Checks for blank lines after signatures.
9
7
  #
10
- # It also suggests an autocorrect
11
- #
12
8
  # @example
13
- #
14
9
  # # bad
15
10
  # sig { void }
16
11
  #
@@ -19,37 +14,60 @@ module RuboCop
19
14
  # # good
20
15
  # sig { void }
21
16
  # def foo; end
22
- #
23
- class EmptyLineAfterSig < SignatureCop
17
+ class EmptyLineAfterSig < ::RuboCop::Cop::Base
18
+ extend AutoCorrector
24
19
  include RangeHelp
20
+ include SignatureHelp
25
21
 
26
- def on_signature(node)
27
- if (next_method(node).line - node.last_line) > 1
28
- location = source_range(processed_source.buffer, next_method(node).line - 1, 0)
29
- add_offense(node, location: location, message: "Extra empty line or comment detected")
30
- end
31
- end
22
+ MSG = "Extra empty line or comment detected"
23
+
24
+ # @!method sig_or_signable_method_definition?(node)
25
+ def_node_matcher :sig_or_signable_method_definition?, <<~PATTERN
26
+ ${
27
+ def
28
+ defs
29
+ (send nil? {:attr_reader :attr_writer :attr_accessor} ...)
30
+ #signature?
31
+ }
32
+ PATTERN
32
33
 
33
- def autocorrect(node)
34
- ->(corrector) do
35
- offending_range = node.source_range.with(
36
- begin_pos: node.source_range.end_pos + 1,
37
- end_pos: processed_source.buffer.line_range(next_method(node).line).begin_pos,
38
- )
39
- corrector.remove(offending_range)
40
- clean_range = offending_range.source.split("\n").reject(&:empty?).join("\n")
41
- offending_line = processed_source.buffer.line_range(node.source_range.first_line)
42
- corrector.insert_before(offending_line, "#{clean_range}\n") unless clean_range.empty?
34
+ def on_signature(sig)
35
+ sig_or_signable_method_definition?(next_sibling(sig)) do |definition|
36
+ range = lines_between(sig, definition)
37
+ next if range.empty? || range.single_line?
38
+
39
+ add_offense(range) do |corrector|
40
+ corrector.insert_before(
41
+ range_by_whole_lines(sig.source_range),
42
+ range.source
43
+ .sub(/\A\n+/, "") # remove initial newline(s)
44
+ .gsub(/\n{2,}/, "\n"), # remove empty line(s)
45
+ )
46
+ corrector.remove(range)
47
+ end
43
48
  end
44
49
  end
45
50
 
46
51
  private
47
52
 
48
- def next_method(node)
49
- processed_source.tokens.find do |t|
50
- t.line >= node.last_line &&
51
- (t.type == :kDEF || t.text.start_with?("attr_"))
52
- end
53
+ def next_sibling(node)
54
+ node.parent&.children&.at(node.sibling_index + 1)
55
+ end
56
+
57
+ def lines_between(node1, node2, buffer: processed_source.buffer)
58
+ end_of_node1_pos = node1.source_range.end_pos
59
+ start_of_node2_pos = node2.source_range.begin_pos
60
+
61
+ string_in_between = buffer.slice(end_of_node1_pos...start_of_node2_pos)
62
+ # Fallbacks handle same line edge case
63
+ begin_offset = string_in_between.index("\n") || 0
64
+ end_offset = string_in_between.rindex("\n") || string_in_between.length - 1
65
+
66
+ Parser::Source::Range.new(
67
+ buffer,
68
+ end_of_node1_pos + begin_offset + 1, # +1 to exclude post-node1 newline
69
+ end_of_node1_pos + end_offset + 1, # +1 to include pre-node2 newline
70
+ )
53
71
  end
54
72
  end
55
73
  end
@@ -1,8 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "rubocop"
4
3
  require "stringio"
5
- require_relative "signature_cop"
6
4
 
7
5
  module RuboCop
8
6
  module Cop
@@ -26,7 +24,9 @@ module RuboCop
26
24
  #
27
25
  # * `ParameterTypePlaceholder`: placeholders used for parameter types (default: 'T.untyped')
28
26
  # * `ReturnTypePlaceholder`: placeholders used for return types (default: 'T.untyped')
29
- class EnforceSignatures < SignatureCop
27
+ class EnforceSignatures < ::RuboCop::Cop::Cop # rubocop:todo InternalAffairs/InheritDeprecatedCopClass
28
+ include SignatureHelp
29
+
30
30
  def initialize(config = nil, options = nil)
31
31
  super(config, options)
32
32
  @last_sig_for_scope = {}
@@ -1,8 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "rubocop"
4
- require_relative "signature_cop"
5
-
6
3
  module RuboCop
7
4
  module Cop
8
5
  module Sorbet
@@ -20,7 +17,9 @@ module RuboCop
20
17
  # # good
21
18
  # sig { params(b: String, a: Integer).void }
22
19
  # def foo(b:, a: 1); end
23
- class KeywordArgumentOrdering < SignatureCop
20
+ class KeywordArgumentOrdering < ::RuboCop::Cop::Cop # rubocop:todo InternalAffairs/InheritDeprecatedCopClass
21
+ include SignatureHelp
22
+
24
23
  def on_signature(node)
25
24
  method_node = node.parent.children[node.sibling_index + 1]
26
25
  return if method_node.nil?
@@ -1,8 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "rubocop"
4
- require_relative "signature_cop"
5
-
6
3
  begin
7
4
  require "unparser"
8
5
  rescue LoadError
@@ -12,7 +9,28 @@ end
12
9
  module RuboCop
13
10
  module Cop
14
11
  module Sorbet
15
- class SignatureBuildOrder < SignatureCop
12
+ # Checks for the correct order of sig builder methods:
13
+ # - abstract, override, or overridable
14
+ # - type_parameters
15
+ # - params
16
+ # - returns, or void
17
+ # - soft, checked, or on_failure
18
+ #
19
+ # @example
20
+ # # bad
21
+ # sig { void.abstract }
22
+ #
23
+ # # good
24
+ # sig { abstract.void }
25
+ #
26
+ # # bad
27
+ # sig { returns(Integer).params(x: Integer) }
28
+ #
29
+ # # good
30
+ # sig { params(x: Integer).returns(Integer) }
31
+ class SignatureBuildOrder < ::RuboCop::Cop::Cop # rubocop:todo InternalAffairs/InheritDeprecatedCopClass
32
+ include SignatureHelp
33
+
16
34
  ORDER =
17
35
  [
18
36
  :abstract,
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require_relative "sorbet/mixin/target_sorbet_version.rb"
4
+ require_relative "sorbet/mixin/signature_help.rb"
4
5
 
5
6
  require_relative "sorbet/binding_constant_without_type_alias"
6
7
  require_relative "sorbet/constants_from_strings"
@@ -2,6 +2,6 @@
2
2
 
3
3
  module RuboCop
4
4
  module Sorbet
5
- VERSION = "0.7.4"
5
+ VERSION = "0.7.5"
6
6
  end
7
7
  end
data/manual/cops.md CHANGED
@@ -32,7 +32,6 @@ In the following section you find all available cops:
32
32
  * [Sorbet/OneAncestorPerLine](cops_sorbet.md#sorbetoneancestorperline)
33
33
  * [Sorbet/RedundantExtendTSig](cops_sorbet.md#sorbetredundantextendtsig)
34
34
  * [Sorbet/SignatureBuildOrder](cops_sorbet.md#sorbetsignaturebuildorder)
35
- * [Sorbet/SignatureCop](cops_sorbet.md#sorbetsignaturecop)
36
35
  * [Sorbet/SingleLineRbiClassModuleDefinitions](cops_sorbet.md#sorbetsinglelinerbiclassmoduledefinitions)
37
36
  * [Sorbet/StrictSigil](cops_sorbet.md#sorbetstrictsigil)
38
37
  * [Sorbet/StrongSigil](cops_sorbet.md#sorbetstrongsigil)
@@ -184,8 +184,6 @@ Enabled | Yes | Yes | 0.7.0 | -
184
184
 
185
185
  Checks for blank lines after signatures.
186
186
 
187
- It also suggests an autocorrect
188
-
189
187
  ### Examples
190
188
 
191
189
  ```ruby
@@ -710,17 +708,28 @@ Enabled by default | Safe | Supports autocorrection | VersionAdded | VersionChan
710
708
  --- | --- | --- | --- | ---
711
709
  Enabled | Yes | Yes | 0.3.0 | -
712
710
 
713
- No documentation
711
+ Checks for the correct order of sig builder methods:
712
+ - abstract, override, or overridable
713
+ - type_parameters
714
+ - params
715
+ - returns, or void
716
+ - soft, checked, or on_failure
714
717
 
715
- ## Sorbet/SignatureCop
718
+ # bad
719
+ sig { returns(Integer).params(x: Integer) }
716
720
 
717
- Enabled by default | Safe | Supports autocorrection | VersionAdded | VersionChanged
718
- --- | --- | --- | --- | ---
719
- Enabled | Yes | No | - | -
721
+ # good
722
+ sig { params(x: Integer).returns(Integer) }
720
723
 
721
- Abstract cop specific to Sorbet signatures
724
+ ### Examples
722
725
 
723
- You can subclass it to use the `on_signature` trigger and the `signature?` node matcher.
726
+ ```ruby
727
+ # bad
728
+ sig { void.abstract }
729
+
730
+ # good
731
+ sig { abstract.void }
732
+ ```
724
733
 
725
734
  ## Sorbet/SingleLineRbiClassModuleDefinitions
726
735
 
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.7.4
4
+ version: 0.7.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: 2023-09-25 00:00:00.000000000 Z
14
+ date: 2023-10-31 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: rspec
@@ -97,6 +97,7 @@ files:
97
97
  - lib/rubocop/cop/sorbet/forbid_t_untyped.rb
98
98
  - lib/rubocop/cop/sorbet/forbid_untyped_struct_props.rb
99
99
  - lib/rubocop/cop/sorbet/implicit_conversion_method.rb
100
+ - lib/rubocop/cop/sorbet/mixin/signature_help.rb
100
101
  - lib/rubocop/cop/sorbet/mixin/target_sorbet_version.rb
101
102
  - lib/rubocop/cop/sorbet/mutable_constant_sorbet_aware_behaviour.rb
102
103
  - lib/rubocop/cop/sorbet/obsolete_strict_memoization.rb
@@ -120,7 +121,6 @@ files:
120
121
  - lib/rubocop/cop/sorbet/signatures/enforce_signatures.rb
121
122
  - lib/rubocop/cop/sorbet/signatures/keyword_argument_ordering.rb
122
123
  - lib/rubocop/cop/sorbet/signatures/signature_build_order.rb
123
- - lib/rubocop/cop/sorbet/signatures/signature_cop.rb
124
124
  - lib/rubocop/cop/sorbet/type_alias_name.rb
125
125
  - lib/rubocop/cop/sorbet_cops.rb
126
126
  - lib/rubocop/sorbet.rb
@@ -154,7 +154,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
154
154
  - !ruby/object:Gem::Version
155
155
  version: '0'
156
156
  requirements: []
157
- rubygems_version: 3.4.19
157
+ rubygems_version: 3.4.21
158
158
  signing_key:
159
159
  specification_version: 4
160
160
  summary: Automatic Sorbet code style checking tool.