rubocop-sorbet 0.6.1 → 0.6.2

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: 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"