Skip to content

Commit ec4fc97

Browse files
authored
Merge branch 'master' into openssl-raap
2 parents ac2ed4c + 831a7db commit ec4fc97

File tree

16 files changed

+259
-10
lines changed

16 files changed

+259
-10
lines changed

.github/workflows/typecheck.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@ jobs:
2020
bundler: none
2121
- name: Set working directory as safe
2222
run: git config --global --add safe.directory $(pwd)
23+
- name: Set up permission
24+
run: chmod -R o-w /opt/hostedtoolcache/Ruby
2325
- name: Install dependencies
2426
run: |
2527
sudo apt-get update

.github/workflows/windows.yml

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,21 @@ jobs:
2020
uses: ruby/setup-ruby@v1
2121
with:
2222
ruby-version: ${{ matrix.ruby }}
23+
24+
# ucrt and mswin have the dev version Ruby.
25+
# It introduce checksum mismatches for bundled gems. So remove them before `bundle install`
26+
- name: Purge gem caches
27+
run: |
28+
ruby -e '
29+
exit if "${{ matrix.ruby }}" != "ucrt" && "${{ matrix.ruby }}" != "mswin"
30+
31+
require "open-uri"
32+
require "json"
33+
34+
res = URI.parse("https://stdgems.org/bundled_gems.json").read
35+
bundled_gems = JSON.parse(res)["gems"].map{_1["gem"]}
36+
system "gem uninstall #{bundled_gems.join(" ")}", exception: true
37+
'
2338
- name: bundle install
2439
run: |
2540
bundle config set without profilers libs

Gemfile.lock

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -53,22 +53,23 @@ GEM
5353
addressable (~> 2.8)
5454
bigdecimal (~> 3.1)
5555
language_server-protocol (3.17.0.4)
56+
lint_roller (1.1.0)
5657
listen (3.9.0)
5758
rb-fsevent (~> 0.10, >= 0.10.3)
5859
rb-inotify (~> 0.9, >= 0.9.10)
59-
logger (1.6.5)
60+
logger (1.6.6)
6061
marcel (1.0.4)
6162
memory_profiler (1.1.0)
6263
minitest (5.25.4)
6364
mutex_m (0.3.0)
6465
net-protocol (0.2.2)
6566
timeout
66-
net-smtp (0.5.0)
67+
net-smtp (0.5.1)
6768
net-protocol
6869
nkf (0.2.0)
6970
ostruct (0.6.1)
7071
parallel (1.26.3)
71-
parser (3.3.7.0)
72+
parser (3.3.7.1)
7273
ast (~> 2.4.1)
7374
racc
7475
pathname (0.4.0)
@@ -104,14 +105,15 @@ GEM
104105
diff-lcs (>= 1.2.0, < 2.0)
105106
rspec-support (~> 3.13.0)
106107
rspec-support (3.13.2)
107-
rubocop (1.71.0)
108+
rubocop (1.72.2)
108109
json (~> 2.3)
109-
language_server-protocol (>= 3.17.0)
110+
language_server-protocol (~> 3.17.0.2)
111+
lint_roller (~> 1.1.0)
110112
parallel (~> 1.10)
111113
parser (>= 3.3.0.2)
112114
rainbow (>= 2.2.2, < 4.0)
113115
regexp_parser (>= 2.9.3, < 3.0)
114-
rubocop-ast (>= 1.36.2, < 2.0)
116+
rubocop-ast (>= 1.38.0, < 2.0)
115117
ruby-progressbar (~> 1.7)
116118
unicode-display_width (>= 2.4.0, < 4.0)
117119
rubocop-ast (1.38.0)
@@ -196,4 +198,4 @@ DEPENDENCIES
196198
test-unit
197199

198200
BUNDLED WITH
199-
2.5.16
201+
2.6.3

lib/rbs/ast/members.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@ def update(annotations: self.annotations, method_type: self.method_type)
3030
end
3131

3232
def sub(subst)
33+
return self if subst.empty?
34+
3335
update(method_type: self.method_type.sub(subst))
3436
end
3537

lib/rbs/cli/validate.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -196,6 +196,7 @@ def validate_class_module_definition
196196
end
197197
InvalidTypeApplicationError.check!(type_name: member.name, params: params, args: member.args, location: member.location)
198198
when AST::Members::Var
199+
@validator.validate_variable(member)
199200
void_type_context_validator(member.type)
200201
if member.is_a?(AST::Members::ClassVariable)
201202
no_self_type_validator(member.type)

lib/rbs/definition.rb

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ def initialize(parent_variable:, type:, declared_in:)
1414
end
1515

1616
def sub(s)
17+
return self if s.empty?
18+
1719
self.class.new(
1820
parent_variable: parent_variable,
1921
type: type.sub(s),
@@ -142,6 +144,8 @@ def private?
142144
end
143145

144146
def sub(s)
147+
return self if s.empty?
148+
145149
self.class.new(
146150
super_method: super_method&.sub(s),
147151
defs: defs.map {|defn| defn.update(type: defn.type.sub(s)) },
@@ -347,6 +351,8 @@ def type_params_decl
347351
end
348352

349353
def sub(s)
354+
return self if s.empty?
355+
350356
definition = self.class.new(type_name: type_name, self_type: _ = self_type.sub(s), ancestors: ancestors, entry: entry)
351357

352358
definition.methods.merge!(methods.transform_values {|method| method.sub(s) })

lib/rbs/definition_builder.rb

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,7 @@ def define_instance(definition, type_name, subst)
151151
end
152152

153153
when AST::Members::InstanceVariable
154+
InstanceVariableDuplicationError.check!(variables: definition.instance_variables, member: member, type_name: type_name)
154155
insert_variable(
155156
type_name,
156157
definition.instance_variables,
@@ -159,6 +160,7 @@ def define_instance(definition, type_name, subst)
159160
)
160161

161162
when AST::Members::ClassVariable
163+
ClassVariableDuplicationError.check!(variables: definition.class_variables, member: member, type_name: type_name)
162164
insert_variable(type_name, definition.class_variables, name: member.name, type: member.type)
163165
end
164166
end
@@ -287,9 +289,11 @@ def build_singleton0(type_name)
287289
end
288290

289291
when AST::Members::ClassInstanceVariable
292+
ClassInstanceVariableDuplicationError.check!(variables: definition.instance_variables, member: member, type_name: type_name)
290293
insert_variable(type_name, definition.instance_variables, name: member.name, type: member.type)
291294

292295
when AST::Members::ClassVariable
296+
ClassVariableDuplicationError.check!(variables: definition.class_variables, member: member, type_name: type_name)
293297
insert_variable(type_name, definition.class_variables, name: member.name, type: member.type)
294298
end
295299
end

lib/rbs/errors.rb

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -322,6 +322,51 @@ def type_name
322322
end
323323
end
324324

325+
class VariableDuplicationError < DefinitionError
326+
include DetailedMessageable
327+
328+
attr_reader :member
329+
330+
def initialize(member:)
331+
@member = member
332+
333+
super "#{Location.to_string location}: Duplicated variable name #{member.name}"
334+
end
335+
336+
def location
337+
loc = @member.location or raise
338+
loc[:name]
339+
end
340+
end
341+
342+
class InstanceVariableDuplicationError < VariableDuplicationError
343+
def self.check!(variables:, member:, type_name:)
344+
if old = variables[member.name]
345+
if old.declared_in == type_name
346+
raise new(member: member)
347+
end
348+
end
349+
end
350+
end
351+
352+
class ClassInstanceVariableDuplicationError < VariableDuplicationError
353+
def self.check!(variables:, member:, type_name:)
354+
if old = variables[member.name]
355+
if old.declared_in == type_name
356+
raise new(member: member)
357+
end
358+
end
359+
end
360+
end
361+
362+
class ClassVariableDuplicationError < VariableDuplicationError
363+
def self.check!(variables:, member:, type_name:)
364+
if old = variables[member.name]
365+
raise new(member: member)
366+
end
367+
end
368+
end
369+
325370
class UnknownMethodAliasError < DefinitionError
326371
include DetailedMessageable
327372

lib/rbs/method_type.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,8 @@ def to_json(state = _ = nil)
3333
def sub(s)
3434
sub = s.without(*type_param_names)
3535

36+
return self if sub.empty?
37+
3638
self.class.new(
3739
type_params: type_params.map do |param|
3840
param.map_type do |bound|

lib/rbs/types.rb

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -329,6 +329,8 @@ def to_json(state = _ = nil)
329329
end
330330

331331
def sub(s)
332+
return self if s.empty?
333+
332334
self.class.new(name: name,
333335
args: args.map {|ty| ty.sub(s) },
334336
location: location)
@@ -371,6 +373,8 @@ def to_json(state = _ = nil)
371373
end
372374

373375
def sub(s)
376+
return self if s.empty?
377+
374378
self.class.new(name: name,
375379
args: args.map {|ty| ty.sub(s) },
376380
location: location)
@@ -413,6 +417,8 @@ def to_json(state = _ = nil)
413417
end
414418

415419
def sub(s)
420+
return self if s.empty?
421+
416422
Alias.new(name: name, args: args.map {|ty| ty.sub(s) }, location: location)
417423
end
418424

@@ -469,6 +475,8 @@ def to_json(state = _ = nil)
469475
end
470476

471477
def sub(s)
478+
return self if s.empty?
479+
472480
self.class.new(types: types.map {|ty| ty.sub(s) },
473481
location: location)
474482
end
@@ -574,6 +582,8 @@ def to_json(state = _ = nil)
574582
end
575583

576584
def sub(s)
585+
return self if s.empty?
586+
577587
self.class.new(
578588
all_fields: all_fields.transform_values {|ty, required| [ty.sub(s), required] },
579589
location: location
@@ -664,6 +674,8 @@ def to_json(state = _ = nil)
664674
end
665675

666676
def sub(s)
677+
return self if s.empty?
678+
667679
self.class.new(type: type.sub(s), location: location)
668680
end
669681

@@ -752,6 +764,8 @@ def to_json(state = _ = nil)
752764
end
753765

754766
def sub(s)
767+
return self if s.empty?
768+
755769
self.class.new(types: types.map {|ty| ty.sub(s) },
756770
location: location)
757771
end
@@ -841,6 +855,8 @@ def to_json(state = _ = nil)
841855
end
842856

843857
def sub(s)
858+
return self if s.empty?
859+
844860
self.class.new(types: types.map {|ty| ty.sub(s) },
845861
location: location)
846862
end
@@ -1093,6 +1109,8 @@ def to_json(state = _ = nil)
10931109
end
10941110

10951111
def sub(s)
1112+
return self if s.empty?
1113+
10961114
map_type {|ty| ty.sub(s) }
10971115
end
10981116

@@ -1272,6 +1290,8 @@ def to_json(state = _ = nil)
12721290
end
12731291

12741292
def sub(subst)
1293+
return self if subst.empty?
1294+
12751295
map_type { _1.sub(subst) }
12761296
end
12771297

@@ -1346,6 +1366,8 @@ def to_json(state = _ = nil)
13461366
end
13471367

13481368
def sub(s)
1369+
return self if s.empty?
1370+
13491371
self.class.new(
13501372
type: type.sub(s),
13511373
required: required,
@@ -1415,6 +1437,8 @@ def to_json(state = _ = nil)
14151437
end
14161438

14171439
def sub(s)
1440+
return self if s.empty?
1441+
14181442
self.class.new(
14191443
type: type.sub(s),
14201444
block: block&.sub(s),

0 commit comments

Comments
 (0)