rubocop-sorbet 0.6.6 → 0.6.9

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