rubocop-on-rbs 1.3.0 → 1.4.0

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: 79ae2335c1cd8ea94cf1e5003b058c1c7d00966f3cc790a0410b3494e7c94ee4
4
- data.tar.gz: 4c6697e0dc3ee2b0724bfe34505539608adfb76ae4733781a3d5195dfbc0917e
3
+ metadata.gz: 22a2658fe60905c8ede887f40b3bf114cd42c945194d0a968804b2f30069af9c
4
+ data.tar.gz: 3922f3dd22bf0f1b2afd66c0bbf0b8f5449424c3e64dcaa976def99ecdcd47d9
5
5
  SHA512:
6
- metadata.gz: 0530b33a2394b966e88784add6936f79631ee8b9f9d81019c265273c73d33719d1e65553e75b2c320f45a8a8c40d8d01b225cbe0f94096bdd0700ae3a281dfc3
7
- data.tar.gz: f20537912b6b4fcd8fff9d24da715c6abfae186957c3464fa7989bbc9ae2565d9478cb410436e59e1da3ee1c9a1b50b7070602b82f9dda88abb0f1b99b01731c
6
+ metadata.gz: a690a213a8654d2a9dd28822d6b112848348340956fa7e533d727203b28db67ed8233adb997b728e9fca9bd820bc0688ab1f984eb0498b6dfa645a9165b2e575
7
+ data.tar.gz: 1ffdd5f0b4305ff3158187a052cb4cd5fcce2ddf3e0629e3847699e7094741c5db66ee9962f9fc252e34d7a7f6f7a514bc32736cd4003e0377911b725b5a4a1a
data/CHANGELOG.md CHANGED
@@ -1,5 +1,23 @@
1
1
  ## [Unreleased]
2
2
 
3
+ ## [1.3.0] - 2024-12-24
4
+
5
+ * Add RBS/Lint/AmbiguousKeywordArgumentKey by @ksss in https://github.com/ksss/rubocop-on-rbs/pull/51
6
+ * Fix false positive for TopLevel* by @ksss in https://github.com/ksss/rubocop-on-rbs/pull/52
7
+ * Support `RBS::AST::Members::Var` by @ksss in https://github.com/ksss/rubocop-on-rbs/pull/53
8
+ * [RBS/Layout/SpaceAroundOperators] Support other declarations by @ksss in https://github.com/ksss/rubocop-on-rbs/pull/54
9
+ * Support other declarations by @ksss in https://github.com/ksss/rubocop-on-rbs/pull/55
10
+ * Use 3.4.0-rc1 by @ksss in https://github.com/ksss/rubocop-on-rbs/pull/56
11
+ * Add RBS/Lint/UselessTypeAliasTypeParams by @ksss in https://github.com/ksss/rubocop-on-rbs/pull/57
12
+ * Use "Unused" instead of "Useless" as much as possible. by @ksss in https://github.com/ksss/rubocop-on-rbs/pull/58
13
+ * Check config/default.yml on CI by @ksss in https://github.com/ksss/rubocop-on-rbs/pull/59
14
+ * Use "Unused" instead of "Useless" as much as possible. by @ksss in https://github.com/ksss/rubocop-on-rbs/pull/60
15
+ * Add RBS/Layout/SpaceAfterComma by @ksss in https://github.com/ksss/rubocop-on-rbs/pull/61
16
+ * Add RBS/Style/InstanceWithInstance by @ksss in https://github.com/ksss/rubocop-on-rbs/pull/62
17
+ * Introduce rbs-inline by @ksss in https://github.com/ksss/rubocop-on-rbs/pull/63
18
+ * Reimplement RBS/Style/InstanceWithInstance by @ksss in https://github.com/ksss/rubocop-on-rbs/pull/64
19
+ * Add RBS/Style/ClassWithSingleton by @ksss in https://github.com/ksss/rubocop-on-rbs/pull/65
20
+
3
21
  ## [1.2.0] - 2024-11-18
4
22
 
5
23
  * Fix false positive when oneline class by @ksss in https://github.com/ksss/rubocop-on-rbs/pull/41
data/config/default.yml CHANGED
@@ -121,6 +121,10 @@ RBS/Lint/LiteralIntersection:
121
121
  Description: 'Check literal intersection'
122
122
  Enabled: true
123
123
 
124
+ RBS/Lint/NewReturnsVoid:
125
+ Description: 'sigleton `new` method should not returns `void` type'
126
+ Enabled: true
127
+
124
128
  RBS/Lint/Syntax:
125
129
  Severity: fatal
126
130
  Description: 'Check RBS syntax'
@@ -128,12 +132,12 @@ RBS/Lint/Syntax:
128
132
 
129
133
  RBS/Lint/TopLevelInterface:
130
134
  Description: 'Check top level interface'
131
- Enabled: pending
135
+ Enabled: true
132
136
  VersionAdded: '1.2.0'
133
137
 
134
138
  RBS/Lint/TopLevelTypeAlias:
135
139
  Description: 'Check top level type alias'
136
- Enabled: pending
140
+ Enabled: true
137
141
  VersionAdded: '1.2.0'
138
142
 
139
143
  RBS/Lint/UselessAccessModifier:
@@ -164,7 +168,7 @@ RBS/Style/BlockReturnBoolish:
164
168
 
165
169
  RBS/Style/ClassWithSingleton:
166
170
  Description: 'Check `class` with singleton context'
167
- Enabled: pending
171
+ Enabled: true
168
172
 
169
173
  RBS/Style/ClassicType:
170
174
  Description: 'Use simple type'
@@ -184,7 +188,7 @@ RBS/Style/InitializeReturnType:
184
188
 
185
189
  RBS/Style/InstanceWithInstance:
186
190
  Description: 'Check `instance` with instance context'
187
- Enabled: pending
191
+ Enabled: true
188
192
 
189
193
  RBS/Style/OptionalNil:
190
194
  Description: 'Use nil instead of nil?'
@@ -0,0 +1,43 @@
1
+ # frozen_string_literal: true
2
+
3
+ # rbs_inline: enabled
4
+
5
+ module RuboCop
6
+ module Cop
7
+ module RBS
8
+ module Lint
9
+ # Checks that there are void types in the return type of `.new` method
10
+ # `self.new` is a special and fundamental method, and extra care should be taken regarding its return value.
11
+ # In most cases, assigning it `void` is an unintended mistake.
12
+ #
13
+ # @example default
14
+ # # bad
15
+ # def self.new: () -> void
16
+ #
17
+ # # good
18
+ # def self.new: () -> instance
19
+ #
20
+ class NewReturnsVoid < RuboCop::RBS::CopBase
21
+ MSG = "Don't use `void` in self.new method. Did you mean `instance`?"
22
+
23
+ # @rbs decl: RBS::AST::Members::MethodDefinition
24
+ def on_rbs_def(decl)
25
+ return unless decl.kind == :singleton
26
+ return unless decl.name == :new
27
+
28
+ decl.overloads.each do |overload|
29
+ return_type = overload.method_type.type.return_type
30
+ case return_type
31
+ when ::RBS::Types::Bases::Void
32
+ next unless return_type.location
33
+
34
+ range = location_to_range(return_type.location)
35
+ add_offense(range)
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
43
+ end
@@ -45,14 +45,26 @@ module RuboCop
45
45
  check_module_or_class(decl)
46
46
  end
47
47
 
48
- def check_module_or_class(decl)
48
+ def check_type_params(decl)
49
49
  decl.type_params.each do |param|
50
50
  if ub = param.upper_bound
51
51
  void_type_context_validator(ub)
52
52
  no_self_type_validator(ub)
53
53
  no_classish_type_validator(ub)
54
54
  end
55
+
56
+ if param.respond_to?(:default_type)
57
+ if dt = param.default_type
58
+ void_type_context_validator(dt)
59
+ no_self_type_validator(dt)
60
+ no_classish_type_validator(dt)
61
+ end
62
+ end
55
63
  end
64
+ end
65
+
66
+ def check_module_or_class(decl)
67
+ check_type_params(decl)
56
68
 
57
69
  decl.each_member do |member|
58
70
  case member
@@ -79,6 +91,8 @@ module RuboCop
79
91
  end
80
92
 
81
93
  def on_rbs_interface(decl)
94
+ check_type_params(decl)
95
+
82
96
  decl.members.each do |member|
83
97
  case member
84
98
  when AST::Members::MethodDefinition
@@ -96,7 +110,14 @@ module RuboCop
96
110
  void_type_context_validator(decl.type)
97
111
  end
98
112
  alias on_rbs_global on_rbs_constant
99
- alias on_rbs_type_alias on_rbs_constant
113
+
114
+ def on_rbs_type_alias(decl)
115
+ no_self_type_validator(decl.type)
116
+ no_classish_type_validator(decl.type)
117
+ void_type_context_validator(decl.type)
118
+
119
+ check_type_params(decl)
120
+ end
100
121
 
101
122
  private
102
123
 
@@ -166,6 +187,7 @@ module RuboCop
166
187
  end
167
188
  when Types::Proc
168
189
  void_type_context_validator(type.type)
190
+ void_type_context_validator(type.self_type) if type.self_type
169
191
  if type.block
170
192
  void_type_context_validator(type.block.type)
171
193
  void_type_context_validator(type.block.self_type) if type.block.self_type
@@ -26,6 +26,7 @@ require_relative 'rbs/lint/ambiguous_keyword_argument_key'
26
26
  require_relative 'rbs/lint/ambiguous_operator_precedence'
27
27
  require_relative 'rbs/lint/duplicate_overload'
28
28
  require_relative 'rbs/lint/literal_intersection'
29
+ require_relative 'rbs/lint/new_returns_void'
29
30
  require_relative 'rbs/lint/syntax'
30
31
  require_relative 'rbs/lint/top_level_interface'
31
32
  require_relative 'rbs/lint/top_level_type_alias'
@@ -2,6 +2,6 @@
2
2
 
3
3
  module RuboCop
4
4
  module RBS
5
- VERSION = '1.3.0'
5
+ VERSION = '1.4.0'
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rubocop-on-rbs
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.0
4
+ version: 1.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - ksss
8
8
  bindir: exe
9
9
  cert_chain: []
10
- date: 2024-12-24 00:00:00.000000000 Z
10
+ date: 2025-02-23 00:00:00.000000000 Z
11
11
  dependencies:
12
12
  - !ruby/object:Gem::Dependency
13
13
  name: rbs
@@ -87,6 +87,7 @@ files:
87
87
  - lib/rubocop/cop/rbs/lint/ambiguous_operator_precedence.rb
88
88
  - lib/rubocop/cop/rbs/lint/duplicate_overload.rb
89
89
  - lib/rubocop/cop/rbs/lint/literal_intersection.rb
90
+ - lib/rubocop/cop/rbs/lint/new_returns_void.rb
90
91
  - lib/rubocop/cop/rbs/lint/syntax.rb
91
92
  - lib/rubocop/cop/rbs/lint/top_level_interface.rb
92
93
  - lib/rubocop/cop/rbs/lint/top_level_type_alias.rb