Skip to content

Commit d6741a5

Browse files
authored
Merge branch 'master' into remove-case-rubygems-set
2 parents 7c6db53 + 0ddf214 commit d6741a5

File tree

18 files changed

+268
-13
lines changed

18 files changed

+268
-13
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: 10 additions & 8 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)
@@ -77,7 +78,7 @@ GEM
7778
psych (4.0.6)
7879
stringio
7980
public_suffix (6.0.1)
80-
raap (1.1.0)
81+
raap (1.2.0)
8182
rbs (~> 3.0)
8283
timeout (~> 0.4)
8384
racc (1.8.1)
@@ -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

core/io.rbs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3251,6 +3251,10 @@ class IO < Object
32513251
# f.close
32523252
#
32533253
alias to_i fileno
3254+
3255+
interface _ForFd[RET]
3256+
def for_fd: (?) -> RET
3257+
end
32543258
end
32553259

32563260
IO::APPEND: Integer

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|

0 commit comments

Comments
 (0)