rubocop-sorbet 0.6.1 → 0.6.2

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: b80b70b68c03033dcda68e2661cba6ccbe10c647618cbf6068175c635288f7e4
4
- data.tar.gz: 794956ee0b9ca5301f680fd79d3d414551284bce1f8dc218e1980da204b13689
3
+ metadata.gz: 309687789d8de94ff0cc8c0d64361cd227ab332ffdd16ab0248d588639dfcd80
4
+ data.tar.gz: ca39d50843f2e577ed0a0328c9707e21af175daacd8c92b9b4403bc2195c4cff
5
5
  SHA512:
6
- metadata.gz: d5f81c72e557eb0888383137198f6138a52b9e043e4d2e02857419658a34407cf90bf08d4fc662fdd4ac9b0c10771aa79876dce08ded2ca61a8b2bea0561dad3
7
- data.tar.gz: 5f8926ae82a56c9edf3fde4552d3ef84b942dbb1f317ecf603ac32b39fc08acc1bef5d8ed459ab28513b667ed901617510a72a3bf34cf8ea7b4d2ffba1ab982a
6
+ metadata.gz: f774385eec35af24755af1cc5e7f5de554bedf0f6a475e3235879aee61a2c68a818ea87ca4663daa17bb807c862d911264284d1f3270e852166c3e84cde32e7d
7
+ data.tar.gz: d6d91114e9c70bc64fa5adf6679a689c12263caa352f7f38b6d96d36609a81e90bc18f369e42b1605259262626114aac6fd5d50f7c91bced3e2f24e2f606fbc4
@@ -0,0 +1,26 @@
1
+ name: CI
2
+
3
+ on: [push, pull_request]
4
+
5
+ env:
6
+ SRB_SKIP_GEM_RBIS: true
7
+
8
+ jobs:
9
+ build:
10
+ runs-on: ubuntu-latest
11
+ strategy:
12
+ fail-fast: false
13
+ matrix:
14
+ ruby: [ 2.5, 2.6, 2.7, 3.0 ]
15
+ name: Test Ruby ${{ matrix.ruby }}
16
+ steps:
17
+ - uses: actions/checkout@v2
18
+ - name: Set up Ruby
19
+ uses: ruby/setup-ruby@v1
20
+ with:
21
+ ruby-version: ${{ matrix.ruby }}
22
+ bundler-cache: true
23
+ - name: Lint Ruby files
24
+ run: bin/rubocop
25
+ - name: Run tests
26
+ run: bin/rspec
data/.gitignore CHANGED
@@ -6,3 +6,4 @@
6
6
  /pkg/
7
7
  /spec/reports/
8
8
  /tmp/
9
+ .byebug_history
data/Gemfile CHANGED
@@ -4,6 +4,7 @@ source "https://rubygems.org"
4
4
  # Specify your gem's dependencies in rubocop-sorbet.gemspec
5
5
  gemspec
6
6
 
7
+ gem "byebug"
7
8
  gem "rake", ">= 12.3.3"
8
9
  gem "rspec"
9
10
  gem "rubocop-shopify", require: false
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- rubocop-sorbet (0.6.1)
4
+ rubocop-sorbet (0.6.2)
5
5
  rubocop
6
6
 
7
7
  GEM
@@ -12,6 +12,7 @@ GEM
12
12
  ice_nine (~> 0.11.0)
13
13
  memoizable (~> 0.4.0)
14
14
  ast (2.4.0)
15
+ byebug (11.1.3)
15
16
  concord (0.1.5)
16
17
  adamantium (~> 0.2.0)
17
18
  equalizer (~> 0.0.9)
@@ -27,7 +28,7 @@ GEM
27
28
  rainbow (3.0.0)
28
29
  rake (13.0.1)
29
30
  regexp_parser (1.7.0)
30
- rexml (3.2.4)
31
+ rexml (3.2.5)
31
32
  rspec (3.8.0)
32
33
  rspec-core (~> 3.8.0)
33
34
  rspec-expectations (~> 3.8.0)
@@ -71,6 +72,7 @@ PLATFORMS
71
72
  ruby
72
73
 
73
74
  DEPENDENCIES
75
+ byebug
74
76
  rake (>= 12.3.3)
75
77
  rspec
76
78
  rubocop-shopify
@@ -79,4 +81,4 @@ DEPENDENCIES
79
81
  yard (~> 0.9)
80
82
 
81
83
  BUNDLED WITH
82
- 1.17.3
84
+ 2.2.16
data/README.md CHANGED
@@ -17,6 +17,13 @@ or, if you use `Bundler`, add this line your application's `Gemfile`:
17
17
  gem 'rubocop-sorbet', require: false
18
18
  ```
19
19
 
20
+ Note: in order to use the [Sorbet/SignatureBuildOrder](https://github.com/Shopify/rubocop-sorbet/blob/master/manual/cops_sorbet.md#sorbetsignaturebuildorder) cop autocorrect feature, it is necessary
21
+ to install `unparser` in addition to `rubocop-sorbet`.
22
+
23
+ ```ruby
24
+ gem "unparser", require: false
25
+ ```
26
+
20
27
  ## Usage
21
28
 
22
29
  You need to tell RuboCop to load the Sorbet extension. There are three ways to do this:
data/bin/rubocop ADDED
@@ -0,0 +1,29 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ #
5
+ # This file was generated by Bundler.
6
+ #
7
+ # The application 'rubocop' is installed as part of a gem, and
8
+ # this file is here to facilitate running it.
9
+ #
10
+
11
+ require "pathname"
12
+ ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile",
13
+ Pathname.new(__FILE__).realpath)
14
+
15
+ bundle_binstub = File.expand_path("../bundle", __FILE__)
16
+
17
+ if File.file?(bundle_binstub)
18
+ if File.read(bundle_binstub, 300) =~ /This file was generated by Bundler/
19
+ load(bundle_binstub)
20
+ else
21
+ abort("Your `bin/bundle` was not generated by Bundler, so this binstub cannot run.
22
+ Replace `bin/bundle` by running `bundle binstubs bundler --force`, then run this command again.")
23
+ end
24
+ end
25
+
26
+ require "rubygems"
27
+ require "bundler/setup"
28
+
29
+ load(Gem.bin_path("rubocop", "rubocop"))
data/config/default.yml CHANGED
@@ -14,6 +14,11 @@ Sorbet/BindingConstantWithoutTypeAlias:
14
14
  Enabled: true
15
15
  VersionAdded: 0.2.0
16
16
 
17
+ Sorbet/CallbackConditionalsBinding:
18
+ Description: 'Ensures callback conditionals are bound to the right type.'
19
+ Enabled: true
20
+ VersionAdded: 0.7.0
21
+
17
22
  Sorbet/CheckedTrueInSignature:
18
23
  Description: 'Disallows the usage of `checked(true)` in signatures.'
19
24
  Enabled: true
@@ -42,7 +47,7 @@ Sorbet/FalseSigil:
42
47
  Description: 'All files must be at least at strictness `false`.'
43
48
  Enabled: true
44
49
  VersionAdded: 0.3.3
45
- SuggestedStrictness: true
50
+ SuggestedStrictness: "false"
46
51
  Include:
47
52
  - "**/*.rb"
48
53
  - "**/*.rbi"
@@ -60,6 +65,13 @@ Sorbet/ForbidExtendTSigHelpersInShims:
60
65
  Include:
61
66
  - "**/*.rbi"
62
67
 
68
+ Sorbet/ForbidRBIOutsideOfSorbetDir:
69
+ Description: 'Forbids RBI files outside of the sorbet/ directory.'
70
+ Enabled: true
71
+ VersionAdded: 0.6.1
72
+ Include:
73
+ - "**/*.rbi"
74
+
63
75
  Sorbet/ForbidIncludeConstLiteral:
64
76
  Description: 'Forbids include of non-literal constants.'
65
77
  Enabled: false
@@ -74,6 +86,12 @@ Sorbet/ForbidSuperclassConstLiteral:
74
86
  Exclude:
75
87
  - db/migrate/*.rb
76
88
 
89
+ Sorbet/ForbidTUnsafe:
90
+ Description: 'Forbid usage of T.unsafe.'
91
+ Enabled: false
92
+ VersionAdded: 0.7.0
93
+ VersionChanged: 0.7.0
94
+
77
95
  Sorbet/ForbidUntypedStructProps:
78
96
  Description: >-
79
97
  Disallows use of `T.untyped` or `T.nilable(T.untyped)` as a
@@ -84,11 +102,14 @@ Sorbet/ForbidUntypedStructProps:
84
102
  Sorbet/HasSigil:
85
103
  Description: 'Makes the Sorbet typed sigil mandatory in all files.'
86
104
  Enabled: false
105
+ SuggestedStrictness: "false"
106
+ MinimumStrictness: "false"
87
107
  VersionAdded: 0.3.3
88
108
 
89
109
  Sorbet/IgnoreSigil:
90
110
  Description: 'All files must be at least at strictness `ignore`.'
91
111
  Enabled: false
112
+ SuggestedStrictness: "ignore"
92
113
  VersionAdded: 0.3.3
93
114
 
94
115
  Sorbet/KeywordArgumentOrdering:
@@ -131,19 +152,25 @@ Sorbet/SingleLineRbiClassModuleDefinitions:
131
152
  Sorbet/StrictSigil:
132
153
  Description: 'All files must be at least at strictness `strict`.'
133
154
  Enabled: false
155
+ SuggestedStrictness: "strict"
134
156
  VersionAdded: 0.3.3
135
157
 
136
158
  Sorbet/StrongSigil:
137
159
  Description: 'All files must be at least at strictness `strong`.'
138
160
  Enabled: false
161
+ SuggestedStrictness: "strong"
139
162
  VersionAdded: 0.3.3
140
163
 
141
164
  Sorbet/TrueSigil:
142
165
  Description: 'All files must be at least at strictness `true`.'
143
166
  Enabled: false
167
+ SuggestedStrictness: "true"
144
168
  VersionAdded: 0.3.3
145
169
 
146
170
  Sorbet/ValidSigil:
147
171
  Description: 'All files must have a valid sigil.'
148
172
  Enabled: true
173
+ RequireSigilOnAllFiles: false
174
+ SuggestedStrictness: "false"
175
+ MinimumStrictness: "false"
149
176
  VersionAdded: 0.3.3
data/dev.yml CHANGED
@@ -8,4 +8,4 @@ up:
8
8
 
9
9
  commands:
10
10
  test: "bin/rspec"
11
- style: "bundle exec rubocop"
11
+ style: "bin/rubocop"
@@ -0,0 +1,138 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RuboCop
4
+ module Cop
5
+ module Sorbet
6
+ # This cop ensures that callback conditionals are bound to the right type
7
+ # so that they are type checked properly.
8
+ #
9
+ # @example
10
+ #
11
+ # # bad
12
+ # class Post < ApplicationRecord
13
+ # before_create :do_it, if: -> { should_do_it? }
14
+ #
15
+ # def should_do_it?
16
+ # true
17
+ # end
18
+ # end
19
+ #
20
+ # # good
21
+ # class Post < ApplicationRecord
22
+ # before_create :do_it, if: -> { T.bind(self, Post).should_do_it? }
23
+ #
24
+ # def should_do_it?
25
+ # true
26
+ # end
27
+ # end
28
+ class CallbackConditionalsBinding < RuboCop::Cop::Cop
29
+ CALLBACKS = %i(
30
+ validate
31
+ validates
32
+ validates_with
33
+ before_validation
34
+ around_validation
35
+
36
+ before_create
37
+ before_save
38
+ before_destroy
39
+ before_update
40
+
41
+ after_create
42
+ after_save
43
+ after_destroy
44
+ after_update
45
+ after_touch
46
+ after_initialize
47
+ after_find
48
+
49
+ around_create
50
+ around_save
51
+ around_destroy
52
+ around_update
53
+
54
+ before_commit
55
+
56
+ after_commit
57
+ after_create_commit
58
+ after_destroy_commit
59
+ after_rollback
60
+ after_save_commit
61
+ after_update_commit
62
+
63
+ before_action
64
+ prepend_before_action
65
+ append_before_action
66
+
67
+ around_action
68
+ prepend_around_action
69
+ append_around_action
70
+
71
+ after_action
72
+ prepend_after_action
73
+ append_after_action
74
+ ).freeze
75
+
76
+ def autocorrect(node)
77
+ lambda do |corrector|
78
+ options = node.each_child_node.find(&:hash_type?)
79
+
80
+ conditional = nil
81
+ options.each_pair do |keyword, block|
82
+ if keyword.value == :if || keyword.value == :unless
83
+ conditional = block
84
+ break
85
+ end
86
+ end
87
+
88
+ _, _, block = conditional.child_nodes
89
+ expected_class = node.parent_module_name
90
+
91
+ bind = if block.begin_type?
92
+ indentation = " " * block.child_nodes.first.loc.column
93
+ "T.bind(self, #{expected_class})\n#{indentation}"
94
+ elsif block.child_nodes.empty? && !block.ivar_type?
95
+ "T.bind(self, #{expected_class})."
96
+ else
97
+ "T.bind(self, #{expected_class}); "
98
+ end
99
+
100
+ corrector.insert_before(block, bind)
101
+ end
102
+ end
103
+
104
+ def on_send(node)
105
+ return unless CALLBACKS.include?(node.method_name)
106
+
107
+ options = node.each_child_node.find(&:hash_type?)
108
+ return if options.nil?
109
+
110
+ conditional = nil
111
+ options.each_pair do |keyword, block|
112
+ next unless keyword.sym_type?
113
+
114
+ if keyword.value == :if || keyword.value == :unless
115
+ conditional = block
116
+ break
117
+ end
118
+ end
119
+
120
+ return if conditional.nil? || conditional.child_nodes.empty?
121
+
122
+ type, _, block = conditional.child_nodes
123
+ return unless type.lambda_or_proc?
124
+
125
+ expected_class = node.parent_module_name
126
+ return if expected_class.nil?
127
+
128
+ unless block.source.include?("T.bind(self, #{expected_class})")
129
+ add_offense(
130
+ node,
131
+ message: "Callback conditionals should be bound to the right type. Use T.bind(self, #{expected_class})"
132
+ )
133
+ end
134
+ end
135
+ end
136
+ end
137
+ end
138
+ end
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'rubocop'
4
+
5
+ module RuboCop
6
+ module Cop
7
+ module Sorbet
8
+ # This cop disallows using `T.unsafe` anywhere.
9
+ #
10
+ # @example
11
+ #
12
+ # # bad
13
+ # T.unsafe(foo)
14
+ #
15
+ # # good
16
+ # foo
17
+ class ForbidTUnsafe < RuboCop::Cop::Cop
18
+ def_node_matcher(:t_unsafe?, '(send (const nil? :T) :unsafe _)')
19
+
20
+ def on_send(node)
21
+ add_offense(node, message: "Do not use `T.unsafe`.") if t_unsafe?(node)
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RuboCop
4
+ module Cop
5
+ module Sorbet
6
+ # This cop makes sure that RBI files are always located under sorbet/rbi/.
7
+ #
8
+ # @example
9
+ # # bad
10
+ # lib/some_file.rbi
11
+ # other_file.rbi
12
+ #
13
+ # # good
14
+ # sorbet/rbi/some_file.rbi
15
+ # sorbet/rbi/any/path/for/file.rbi
16
+ class ForbidRBIOutsideOfSorbetDir < RuboCop::Cop::Cop
17
+ include RangeHelp
18
+
19
+ PATH_REGEXP = %r{sorbet/rbi}
20
+
21
+ def investigate(processed_source)
22
+ add_offense(
23
+ nil,
24
+ location: source_range(processed_source.buffer, 1, 0),
25
+ message: "RBI files are only accepted in the sorbet/rbi/ directory."
26
+ ) unless processed_source.file_path =~ PATH_REGEXP
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
@@ -147,12 +147,14 @@ module RuboCop
147
147
 
148
148
  # Default is `'false'`
149
149
  def suggested_strictness
150
- STRICTNESS_LEVELS.include?(cop_config['SuggestedStrictness']) ? cop_config['SuggestedStrictness'] : 'false'
150
+ config = cop_config['SuggestedStrictness'].to_s
151
+ STRICTNESS_LEVELS.include?(config) ? config : 'false'
151
152
  end
152
153
 
153
154
  # Default is `nil`
154
155
  def minimum_strictness
155
- cop_config['MinimumStrictness'] if STRICTNESS_LEVELS.include?(cop_config['MinimumStrictness'])
156
+ config = cop_config['MinimumStrictness'].to_s
157
+ config if STRICTNESS_LEVELS.include?(config)
156
158
  end
157
159
  end
158
160
  end
@@ -1,12 +1,16 @@
1
1
  # frozen_string_literal: true
2
2
  require_relative 'sorbet/binding_constants_without_type_alias'
3
3
  require_relative 'sorbet/constants_from_strings'
4
- require_relative 'sorbet/forbid_extend_t_sig_helpers_in_shims'
5
4
  require_relative 'sorbet/forbid_superclass_const_literal'
6
5
  require_relative 'sorbet/forbid_include_const_literal'
7
6
  require_relative 'sorbet/forbid_untyped_struct_props'
8
- require_relative 'sorbet/single_line_rbi_class_module_definitions'
9
7
  require_relative 'sorbet/one_ancestor_per_line'
8
+ require_relative 'sorbet/callback_conditionals_binding'
9
+ require_relative 'sorbet/forbid_t_unsafe'
10
+
11
+ require_relative 'sorbet/rbi/forbid_extend_t_sig_helpers_in_shims'
12
+ require_relative 'sorbet/rbi/forbid_rbi_outside_of_sorbet_dir'
13
+ require_relative 'sorbet/rbi/single_line_rbi_class_module_definitions'
10
14
 
11
15
  require_relative 'sorbet/signatures/allow_incompatible_override'
12
16
  require_relative 'sorbet/signatures/checked_true_in_signature'
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
  module RuboCop
3
3
  module Sorbet
4
- VERSION = "0.6.1"
4
+ VERSION = "0.6.2"
5
5
  end
6
6
  end
data/manual/cops.md CHANGED
@@ -7,6 +7,7 @@ In the following section you find all available cops:
7
7
 
8
8
  * [Sorbet/AllowIncompatibleOverride](cops_sorbet.md#sorbetallowincompatibleoverride)
9
9
  * [Sorbet/BindingConstantWithoutTypeAlias](cops_sorbet.md#sorbetbindingconstantwithouttypealias)
10
+ * [Sorbet/CallbackConditionalsBinding](cops_sorbet.md#sorbetcallbackconditionalsbinding)
10
11
  * [Sorbet/CheckedTrueInSignature](cops_sorbet.md#sorbetcheckedtrueinsignature)
11
12
  * [Sorbet/ConstantsFromStrings](cops_sorbet.md#sorbetconstantsfromstrings)
12
13
  * [Sorbet/EnforceSigilOrder](cops_sorbet.md#sorbetenforcesigilorder)
@@ -14,7 +15,9 @@ In the following section you find all available cops:
14
15
  * [Sorbet/FalseSigil](cops_sorbet.md#sorbetfalsesigil)
15
16
  * [Sorbet/ForbidExtendTSigHelpersInShims](cops_sorbet.md#sorbetforbidextendtsighelpersinshims)
16
17
  * [Sorbet/ForbidIncludeConstLiteral](cops_sorbet.md#sorbetforbidincludeconstliteral)
18
+ * [Sorbet/ForbidRBIOutsideOfSorbetDir](cops_sorbet.md#sorbetforbidrbioutsideofsorbetdir)
17
19
  * [Sorbet/ForbidSuperclassConstLiteral](cops_sorbet.md#sorbetforbidsuperclassconstliteral)
20
+ * [Sorbet/ForbidTUnsafe](cops_sorbet.md#sorbetforbidtunsafe)
18
21
  * [Sorbet/ForbidUntypedStructProps](cops_sorbet.md#sorbetforbiduntypedstructprops)
19
22
  * [Sorbet/HasSigil](cops_sorbet.md#sorbethassigil)
20
23
  * [Sorbet/IgnoreSigil](cops_sorbet.md#sorbetignoresigil)
@@ -41,6 +41,37 @@ FooOrBar = T.any(Foo, Bar)
41
41
  FooOrBar = T.type_alias { T.any(Foo, Bar) }
42
42
  ```
43
43
 
44
+ ## Sorbet/CallbackConditionalsBinding
45
+
46
+ Enabled by default | Safe | Supports autocorrection | VersionAdded | VersionChanged
47
+ --- | --- | --- | --- | ---
48
+ Enabled | Yes | Yes | 0.7.0 | -
49
+
50
+ This cop ensures that callback conditionals are bound to the right type
51
+ so that they are type checked properly.
52
+
53
+ ### Examples
54
+
55
+ ```ruby
56
+ # bad
57
+ class Post < ApplicationRecord
58
+ before_create :do_it, if: -> { should_do_it? }
59
+
60
+ def should_do_it?
61
+ true
62
+ end
63
+ end
64
+
65
+ # good
66
+ class Post < ApplicationRecord
67
+ before_create :do_it, if: -> { T.bind(self, Post).should_do_it? }
68
+
69
+ def should_do_it?
70
+ true
71
+ end
72
+ end
73
+ ```
74
+
44
75
  ## Sorbet/CheckedTrueInSignature
45
76
 
46
77
  Enabled by default | Safe | Supports autocorrection | VersionAdded | VersionChanged
@@ -167,7 +198,7 @@ This cop makes the Sorbet `false` sigil mandatory in all files.
167
198
 
168
199
  Name | Default value | Configurable values
169
200
  --- | --- | ---
170
- SuggestedStrictness | `true` | Boolean
201
+ SuggestedStrictness | `false` | String
171
202
  Include | `**/*.rb`, `**/*.rbi`, `**/*.rake`, `**/*.ru` | Array
172
203
  Exclude | `bin/**/*`, `db/**/*.rb`, `script/**/*` | Array
173
204
 
@@ -213,6 +244,32 @@ Disabled | Yes | No | 0.2.0 | 0.5.0
213
244
 
214
245
  No documentation
215
246
 
247
+ ## Sorbet/ForbidRBIOutsideOfSorbetDir
248
+
249
+ Enabled by default | Safe | Supports autocorrection | VersionAdded | VersionChanged
250
+ --- | --- | --- | --- | ---
251
+ Enabled | Yes | No | 0.6.1 | -
252
+
253
+ This cop makes sure that RBI files are always located under sorbet/rbi/.
254
+
255
+ ### Examples
256
+
257
+ ```ruby
258
+ # bad
259
+ lib/some_file.rbi
260
+ other_file.rbi
261
+
262
+ # good
263
+ sorbet/rbi/some_file.rbi
264
+ sorbet/rbi/any/path/for/file.rbi
265
+ ```
266
+
267
+ ### Configurable attributes
268
+
269
+ Name | Default value | Configurable values
270
+ --- | --- | ---
271
+ Include | `**/*.rbi` | Array
272
+
216
273
  ## Sorbet/ForbidSuperclassConstLiteral
217
274
 
218
275
  Enabled by default | Safe | Supports autocorrection | VersionAdded | VersionChanged
@@ -227,6 +284,24 @@ Name | Default value | Configurable values
227
284
  --- | --- | ---
228
285
  Exclude | `db/migrate/*.rb` | Array
229
286
 
287
+ ## Sorbet/ForbidTUnsafe
288
+
289
+ Enabled by default | Safe | Supports autocorrection | VersionAdded | VersionChanged
290
+ --- | --- | --- | --- | ---
291
+ Disabled | Yes | No | 0.7.0 | 0.7.0
292
+
293
+ This cop disallows using `T.unsafe` anywhere.
294
+
295
+ ### Examples
296
+
297
+ ```ruby
298
+ # bad
299
+ T.unsafe(foo)
300
+
301
+ # good
302
+ foo
303
+ ```
304
+
230
305
  ## Sorbet/ForbidUntypedStructProps
231
306
 
232
307
  Enabled by default | Safe | Supports autocorrection | VersionAdded | VersionChanged
@@ -267,6 +342,13 @@ Options:
267
342
 
268
343
  If a `MinimumStrictness` level is specified, it will be used in offense messages and autocorrect.
269
344
 
345
+ ### Configurable attributes
346
+
347
+ Name | Default value | Configurable values
348
+ --- | --- | ---
349
+ SuggestedStrictness | `false` | String
350
+ MinimumStrictness | `false` | String
351
+
270
352
  ## Sorbet/IgnoreSigil
271
353
 
272
354
  Enabled by default | Safe | Supports autocorrection | VersionAdded | VersionChanged
@@ -275,6 +357,12 @@ Disabled | Yes | Yes | 0.3.3 | -
275
357
 
276
358
  This cop makes the Sorbet `ignore` sigil mandatory in all files.
277
359
 
360
+ ### Configurable attributes
361
+
362
+ Name | Default value | Configurable values
363
+ --- | --- | ---
364
+ SuggestedStrictness | `ignore` | String
365
+
278
366
  ## Sorbet/KeywordArgumentOrdering
279
367
 
280
368
  Enabled by default | Safe | Supports autocorrection | VersionAdded | VersionChanged
@@ -396,6 +484,12 @@ Disabled | Yes | Yes | 0.3.3 | -
396
484
 
397
485
  This cop makes the Sorbet `strict` sigil mandatory in all files.
398
486
 
487
+ ### Configurable attributes
488
+
489
+ Name | Default value | Configurable values
490
+ --- | --- | ---
491
+ SuggestedStrictness | `strict` | String
492
+
399
493
  ## Sorbet/StrongSigil
400
494
 
401
495
  Enabled by default | Safe | Supports autocorrection | VersionAdded | VersionChanged
@@ -404,6 +498,12 @@ Disabled | Yes | Yes | 0.3.3 | -
404
498
 
405
499
  This cop makes the Sorbet `strong` sigil mandatory in all files.
406
500
 
501
+ ### Configurable attributes
502
+
503
+ Name | Default value | Configurable values
504
+ --- | --- | ---
505
+ SuggestedStrictness | `strong` | String
506
+
407
507
  ## Sorbet/TrueSigil
408
508
 
409
509
  Enabled by default | Safe | Supports autocorrection | VersionAdded | VersionChanged
@@ -412,6 +512,12 @@ Disabled | Yes | Yes | 0.3.3 | -
412
512
 
413
513
  This cop makes the Sorbet `true` sigil mandatory in all files.
414
514
 
515
+ ### Configurable attributes
516
+
517
+ Name | Default value | Configurable values
518
+ --- | --- | ---
519
+ SuggestedStrictness | `true` | String
520
+
415
521
  ## Sorbet/ValidSigil
416
522
 
417
523
  Enabled by default | Safe | Supports autocorrection | VersionAdded | VersionChanged
@@ -428,3 +534,11 @@ Options:
428
534
  * `MinimumStrictness`: If set, make offense if the strictness level in the file is below this one
429
535
 
430
536
  If a `MinimumStrictness` level is specified, it will be used in offense messages and autocorrect.
537
+
538
+ ### Configurable attributes
539
+
540
+ Name | Default value | Configurable values
541
+ --- | --- | ---
542
+ RequireSigilOnAllFiles | `false` | Boolean
543
+ SuggestedStrictness | `false` | String
544
+ MinimumStrictness | `false` | String
data/service.yml CHANGED
@@ -1,6 +1,3 @@
1
- # https://services.shopify.io/services/rubocop-sorbet/production
2
- owners:
3
- - Shopify/sorbet
4
1
  classification: library
5
2
  slack_channels:
6
- - help-ruby-typing
3
+ - help-ruby-typing
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.6.1
4
+ version: 0.6.2
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: 2021-03-17 00:00:00.000000000 Z
14
+ date: 2021-06-04 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: rspec
@@ -65,11 +65,10 @@ files:
65
65
  - ".github/CODEOWNERS"
66
66
  - ".github/probots.yml"
67
67
  - ".github/stale.yml"
68
+ - ".github/workflows/ci.yml"
68
69
  - ".gitignore"
69
70
  - ".rspec"
70
71
  - ".rubocop.yml"
71
- - ".shopify-build/VERSION"
72
- - ".shopify-build/rubocop-sorbet.yml"
73
72
  - ".travis.yml"
74
73
  - CODE_OF_CONDUCT.md
75
74
  - Gemfile
@@ -79,17 +78,22 @@ files:
79
78
  - Rakefile
80
79
  - bin/console
81
80
  - bin/rspec
81
+ - bin/rubocop
82
82
  - bin/setup
83
83
  - config/default.yml
84
84
  - dev.yml
85
85
  - lib/rubocop-sorbet.rb
86
86
  - lib/rubocop/cop/sorbet/binding_constants_without_type_alias.rb
87
+ - lib/rubocop/cop/sorbet/callback_conditionals_binding.rb
87
88
  - lib/rubocop/cop/sorbet/constants_from_strings.rb
88
- - lib/rubocop/cop/sorbet/forbid_extend_t_sig_helpers_in_shims.rb
89
89
  - lib/rubocop/cop/sorbet/forbid_include_const_literal.rb
90
90
  - lib/rubocop/cop/sorbet/forbid_superclass_const_literal.rb
91
+ - lib/rubocop/cop/sorbet/forbid_t_unsafe.rb
91
92
  - lib/rubocop/cop/sorbet/forbid_untyped_struct_props.rb
92
93
  - lib/rubocop/cop/sorbet/one_ancestor_per_line.rb
94
+ - lib/rubocop/cop/sorbet/rbi/forbid_extend_t_sig_helpers_in_shims.rb
95
+ - lib/rubocop/cop/sorbet/rbi/forbid_rbi_outside_of_sorbet_dir.rb
96
+ - lib/rubocop/cop/sorbet/rbi/single_line_rbi_class_module_definitions.rb
93
97
  - lib/rubocop/cop/sorbet/sigils/enforce_sigil_order.rb
94
98
  - lib/rubocop/cop/sorbet/sigils/false_sigil.rb
95
99
  - lib/rubocop/cop/sorbet/sigils/has_sigil.rb
@@ -105,7 +109,6 @@ files:
105
109
  - lib/rubocop/cop/sorbet/signatures/parameters_ordering_in_signature.rb
106
110
  - lib/rubocop/cop/sorbet/signatures/signature_build_order.rb
107
111
  - lib/rubocop/cop/sorbet/signatures/signature_cop.rb
108
- - lib/rubocop/cop/sorbet/single_line_rbi_class_module_definitions.rb
109
112
  - lib/rubocop/cop/sorbet_cops.rb
110
113
  - lib/rubocop/sorbet.rb
111
114
  - lib/rubocop/sorbet/inject.rb
@@ -138,7 +141,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
138
141
  - !ruby/object:Gem::Version
139
142
  version: '0'
140
143
  requirements: []
141
- rubygems_version: 3.0.3
144
+ rubygems_version: 3.2.17
142
145
  signing_key:
143
146
  specification_version: 4
144
147
  summary: Automatic Sorbet code style checking tool.
@@ -1 +0,0 @@
1
- v1
@@ -1,16 +0,0 @@
1
- containers:
2
- default:
3
- docker: "circleci/ruby:2.5.5"
4
-
5
- steps:
6
- - label: ":ruby: Specs"
7
- dependencies:
8
- - "bundler"
9
- timeout: "5m"
10
- run:
11
- - "bundle exec rspec"
12
- - label: "Rubocop"
13
- dependencies:
14
- - "bundler"
15
- timeout: "5m"
16
- run: "bundle exec rubocop"