diff --git a/lib/rbs/ast/members.rb b/lib/rbs/ast/members.rb index 7888a1686..258a6df1f 100644 --- a/lib/rbs/ast/members.rb +++ b/lib/rbs/ast/members.rb @@ -30,6 +30,8 @@ def update(annotations: self.annotations, method_type: self.method_type) end def sub(subst) + return self if subst.empty? + update(method_type: self.method_type.sub(subst)) end diff --git a/lib/rbs/definition.rb b/lib/rbs/definition.rb index 67192f41b..0d697abe0 100644 --- a/lib/rbs/definition.rb +++ b/lib/rbs/definition.rb @@ -14,6 +14,8 @@ def initialize(parent_variable:, type:, declared_in:) end def sub(s) + return self if s.empty? + self.class.new( parent_variable: parent_variable, type: type.sub(s), @@ -142,6 +144,8 @@ def private? end def sub(s) + return self if s.empty? + self.class.new( super_method: super_method&.sub(s), defs: defs.map {|defn| defn.update(type: defn.type.sub(s)) }, @@ -347,6 +351,8 @@ def type_params_decl end def sub(s) + return self if s.empty? + definition = self.class.new(type_name: type_name, self_type: _ = self_type.sub(s), ancestors: ancestors, entry: entry) definition.methods.merge!(methods.transform_values {|method| method.sub(s) }) diff --git a/lib/rbs/method_type.rb b/lib/rbs/method_type.rb index 67d5ade3b..7ac56cd68 100644 --- a/lib/rbs/method_type.rb +++ b/lib/rbs/method_type.rb @@ -33,6 +33,8 @@ def to_json(state = _ = nil) def sub(s) sub = s.without(*type_param_names) + return self if sub.empty? + self.class.new( type_params: type_params.map do |param| param.map_type do |bound| diff --git a/lib/rbs/types.rb b/lib/rbs/types.rb index 3ae75818f..42718e532 100644 --- a/lib/rbs/types.rb +++ b/lib/rbs/types.rb @@ -329,6 +329,8 @@ def to_json(state = _ = nil) end def sub(s) + return self if s.empty? + self.class.new(name: name, args: args.map {|ty| ty.sub(s) }, location: location) @@ -371,6 +373,8 @@ def to_json(state = _ = nil) end def sub(s) + return self if s.empty? + self.class.new(name: name, args: args.map {|ty| ty.sub(s) }, location: location) @@ -413,6 +417,8 @@ def to_json(state = _ = nil) end def sub(s) + return self if s.empty? + Alias.new(name: name, args: args.map {|ty| ty.sub(s) }, location: location) end @@ -469,6 +475,8 @@ def to_json(state = _ = nil) end def sub(s) + return self if s.empty? + self.class.new(types: types.map {|ty| ty.sub(s) }, location: location) end @@ -574,6 +582,8 @@ def to_json(state = _ = nil) end def sub(s) + return self if s.empty? + self.class.new( all_fields: all_fields.transform_values {|ty, required| [ty.sub(s), required] }, location: location @@ -664,6 +674,8 @@ def to_json(state = _ = nil) end def sub(s) + return self if s.empty? + self.class.new(type: type.sub(s), location: location) end @@ -752,6 +764,8 @@ def to_json(state = _ = nil) end def sub(s) + return self if s.empty? + self.class.new(types: types.map {|ty| ty.sub(s) }, location: location) end @@ -841,6 +855,8 @@ def to_json(state = _ = nil) end def sub(s) + return self if s.empty? + self.class.new(types: types.map {|ty| ty.sub(s) }, location: location) end @@ -1093,6 +1109,8 @@ def to_json(state = _ = nil) end def sub(s) + return self if s.empty? + map_type {|ty| ty.sub(s) } end @@ -1272,6 +1290,8 @@ def to_json(state = _ = nil) end def sub(subst) + return self if subst.empty? + map_type { _1.sub(subst) } end @@ -1346,6 +1366,8 @@ def to_json(state = _ = nil) end def sub(s) + return self if s.empty? + self.class.new( type: type.sub(s), required: required, @@ -1415,6 +1437,8 @@ def to_json(state = _ = nil) end def sub(s) + return self if s.empty? + self.class.new( type: type.sub(s), block: block&.sub(s),