rubocop-sorbet 0.6.6 → 0.6.9

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: fbc8c95598a4e9bdcc08915198dc90cea5df439d3f06ec72f7a36b6a8a792207
4
- data.tar.gz: 7bff9273f2f52f43e18d32f32b3f58ccb988274ffc2bde3746b45556c981bf51
3
+ metadata.gz: a0ecbebf2964b6ed70b3afb61766ab16e0008eb639a30ba8672991b6d6d6347b
4
+ data.tar.gz: ac96a86a59ecb5e9d5ed0130583f1b25095c481a81fe7401febc2291c6637d54
5
5
  SHA512:
6
- metadata.gz: 3c749f0f371cb8e764c1db26221d3f0bebc83afc8466b7d07753c702f6e87d67657e2b0bed70f2c738d820377538356ed1259ab7317878c254fc6d2c86dc3aaf
7
- data.tar.gz: 359d7e9082d01e25c088b902de0fa80d93625351caaaec52983c93eaaebbf5a9488977b4c18b0d0c1d5771cc2e97cc698c4b741addf765e739e737c01274597b
6
+ metadata.gz: efe418f824b02888f8ef7ba71df10487547b4a9d979f25cf1abd7911729caddbabd0206ca3503acfa7663f0ebd61cb6f4030f2750e9e77398abaf4f8c2991573
7
+ data.tar.gz: fe962280fb970c51b2c5b755d1b3f644c1a7345193a92eb1c4d9c72a8a8708fc3e3babbe1f69806377d58d968a926388e5f5ba5aa46df0602b4e3cbb4e833c39
@@ -11,7 +11,7 @@ jobs:
11
11
  strategy:
12
12
  fail-fast: false
13
13
  matrix:
14
- ruby: [ 2.5, 2.6, 2.7, 3.0 ]
14
+ ruby: [ '2.5', '2.6', '2.7', '3.0', '3.1' ]
15
15
  name: Test Ruby ${{ matrix.ruby }}
16
16
  steps:
17
17
  - uses: actions/checkout@v2
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- rubocop-sorbet (0.6.6)
4
+ rubocop-sorbet (0.6.9)
5
5
  rubocop (>= 0.90.0)
6
6
 
7
7
  GEM
data/README.md CHANGED
@@ -60,13 +60,15 @@ end
60
60
 
61
61
  ### Rubocop rules for RBI files
62
62
 
63
- Put this into your `.rubocop.yml`:
63
+ To enable the cops related to RBI files under the `sorbet/rbi/` directory, put this in `sorbet/rbi/.rubocop.yml`:
64
64
 
65
65
  ```yaml
66
66
  inherit_gem:
67
67
  rubocop-sorbet: config/rbi.yml
68
68
  ```
69
69
 
70
+ This will turn off default cops for `**/*.rbi` files and enable the RBI specific cops.
71
+
70
72
  ## The Cops
71
73
  All cops are located under [`lib/rubocop/cop/sorbet`](lib/rubocop/cop/sorbet), and contain examples/documentation.
72
74
 
data/config/default.yml CHANGED
@@ -39,7 +39,7 @@ Sorbet/EnforceSigilOrder:
39
39
  Enabled: true
40
40
  VersionAdded: 0.3.4
41
41
 
42
- Sorbet/sigils/EnforceSingleSigil:
42
+ Sorbet/EnforceSingleSigil:
43
43
  Description: 'Ensures that there is only one Sorbet sigil in a file.'
44
44
  Enabled: true
45
45
  VersionAdded: '<<next>>'
@@ -57,12 +57,18 @@ module RuboCop
57
57
  )
58
58
  PATTERN
59
59
 
60
- def_node_matcher(:generic_parameter_decl?, <<-PATTERN)
60
+ def_node_matcher(:generic_parameter_decl_call?, <<-PATTERN)
61
61
  (
62
62
  send nil? {:type_template :type_member} ...
63
63
  )
64
64
  PATTERN
65
65
 
66
+ def_node_matcher(:generic_parameter_decl_block_call?, <<-PATTERN)
67
+ (block
68
+ (send nil? {:type_template :type_member} ...) ...
69
+ )
70
+ PATTERN
71
+
66
72
  def_node_search(:method_needing_aliasing_on_t?, <<-PATTERN)
67
73
  (
68
74
  send
@@ -81,7 +87,7 @@ module RuboCop
81
87
  end
82
88
 
83
89
  def not_generic_parameter_decl?(node)
84
- !generic_parameter_decl?(node)
90
+ !generic_parameter_decl_call?(node) && !generic_parameter_decl_block_call?(node)
85
91
  end
86
92
 
87
93
  def not_nil?(node)
@@ -0,0 +1,29 @@
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.untyped` anywhere.
9
+ #
10
+ # @example
11
+ #
12
+ # # bad
13
+ # sig { params(my_argument: T.untyped).void }
14
+ # def foo(my_argument); end
15
+ #
16
+ # # good
17
+ # sig { params(my_argument: String).void }
18
+ # def foo(my_argument); end
19
+ #
20
+ class ForbidTUntyped < RuboCop::Cop::Cop
21
+ def_node_matcher(:t_untyped?, "(send (const nil? :T) :untyped)")
22
+
23
+ def on_send(node)
24
+ add_offense(node, message: "Do not use `T.untyped`.") if t_untyped?(node)
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,29 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "rubocop/cop/style/mutable_constant"
4
+
5
+ module RuboCop
6
+ module Cop
7
+ module Sorbet
8
+ module MutableConstantSorbetAwareBehaviour
9
+ def self.prepended(base)
10
+ base.def_node_matcher(:t_let, <<~PATTERN)
11
+ (send (const nil? :T) :let $_constant _type)
12
+ PATTERN
13
+ end
14
+
15
+ def on_assignment(value)
16
+ t_let(value) do |constant|
17
+ value = constant
18
+ end
19
+
20
+ super(value)
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
26
+
27
+ RuboCop::Cop::Style::MutableConstant.prepend(
28
+ RuboCop::Cop::Sorbet::MutableConstantSorbetAwareBehaviour
29
+ )
@@ -49,7 +49,7 @@ module RuboCop
49
49
  protected
50
50
 
51
51
  STRICTNESS_LEVELS = ["ignore", "false", "true", "strict", "strong"]
52
- SIGIL_REGEX = /#\s+typed:(?:\s+([\w]+))?/
52
+ SIGIL_REGEX = /^\s*#\s+typed:(?:\s+([\w]+))?/
53
53
 
54
54
  # extraction
55
55
 
@@ -7,6 +7,7 @@ require_relative "sorbet/forbid_untyped_struct_props"
7
7
  require_relative "sorbet/one_ancestor_per_line"
8
8
  require_relative "sorbet/callback_conditionals_binding"
9
9
  require_relative "sorbet/forbid_t_unsafe"
10
+ require_relative "sorbet/forbid_t_untyped"
10
11
  require_relative "sorbet/type_alias_name"
11
12
 
12
13
  require_relative "sorbet/rbi/forbid_extend_t_sig_helpers_in_shims"
@@ -28,3 +29,5 @@ require_relative "sorbet/sigils/strict_sigil"
28
29
  require_relative "sorbet/sigils/strong_sigil"
29
30
  require_relative "sorbet/sigils/enforce_sigil_order"
30
31
  require_relative "sorbet/sigils/enforce_single_sigil"
32
+
33
+ require_relative "sorbet/mutable_constant_sorbet_aware_behaviour"
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
  module RuboCop
3
3
  module Sorbet
4
- VERSION = "0.6.6"
4
+ VERSION = "0.6.9"
5
5
  end
6
6
  end
data/manual/cops.md CHANGED
@@ -34,3 +34,8 @@ In the following section you find all available cops:
34
34
  * [Sorbet/ValidSigil](cops_sorbet.md#sorbetvalidsigil)
35
35
 
36
36
  <!-- END_COP_LIST -->
37
+
38
+ In addition to the cops defined in this gem, it also modifies the behaviour of some other cops
39
+ defined in other RuboCop gems:
40
+
41
+ * [Style/MutableConstant](https://docs.rubocop.org/rubocop/cops_style.html#stylemutableconstant): In addition to the default behaviour, RuboCop Sorbet makes this cop `T.let` aware, so that `CONST = T.let([1, 2, 3], T::Array[Integer])` is also treated as a mutable literal constant value.
File without changes
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.6
4
+ version: 0.6.9
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: 2022-02-09 00:00:00.000000000 Z
14
+ date: 2022-06-16 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: rspec
@@ -91,7 +91,9 @@ files:
91
91
  - lib/rubocop/cop/sorbet/forbid_include_const_literal.rb
92
92
  - lib/rubocop/cop/sorbet/forbid_superclass_const_literal.rb
93
93
  - lib/rubocop/cop/sorbet/forbid_t_unsafe.rb
94
+ - lib/rubocop/cop/sorbet/forbid_t_untyped.rb
94
95
  - lib/rubocop/cop/sorbet/forbid_untyped_struct_props.rb
96
+ - lib/rubocop/cop/sorbet/mutable_constant_sorbet_aware_behaviour.rb
95
97
  - lib/rubocop/cop/sorbet/one_ancestor_per_line.rb
96
98
  - lib/rubocop/cop/sorbet/rbi/forbid_extend_t_sig_helpers_in_shims.rb
97
99
  - lib/rubocop/cop/sorbet/rbi/forbid_rbi_outside_of_allowed_paths.rb
@@ -120,7 +122,7 @@ files:
120
122
  - manual/cops_sorbet.md
121
123
  - rubocop-sorbet.gemspec
122
124
  - service.yml
123
- - shipit.yml
125
+ - shipit.production.yml
124
126
  - tasks/cops_documentation.rake
125
127
  homepage: https://github.com/shopify/rubocop-sorbet
126
128
  licenses:
@@ -144,7 +146,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
144
146
  - !ruby/object:Gem::Version
145
147
  version: '0'
146
148
  requirements: []
147
- rubygems_version: 3.2.20
149
+ rubygems_version: 3.3.3
148
150
  signing_key:
149
151
  specification_version: 4
150
152
  summary: Automatic Sorbet code style checking tool.