diff --git a/lib/rbs/definition_builder.rb b/lib/rbs/definition_builder.rb index 59aba509b..4c4ede267 100644 --- a/lib/rbs/definition_builder.rb +++ b/lib/rbs/definition_builder.rb @@ -569,11 +569,11 @@ def validate_variable(var) case l.source when AST::Members::InstanceVariable if r.source.instance_of?(AST::Members::InstanceVariable) && l.declared_in == r.declared_in - raise InstanceVariableDuplicationError.new(member: l.source) + raise InstanceVariableDuplicationError.new(type_name: l.declared_in, variable_name: l.source.name, location: l.source.location) end when AST::Members::ClassInstanceVariable if r.source.instance_of?(AST::Members::ClassInstanceVariable) && l.declared_in == r.declared_in - raise ClassInstanceVariableDuplicationError.new(member: l.source) + raise ClassInstanceVariableDuplicationError.new(type_name: l.declared_in, variable_name: l.source.name, location: l.source.location) end end end diff --git a/lib/rbs/errors.rb b/lib/rbs/errors.rb index 30ac18e19..88ceb69f8 100644 --- a/lib/rbs/errors.rb +++ b/lib/rbs/errors.rb @@ -325,24 +325,25 @@ def type_name class VariableDuplicationError < DefinitionError include DetailedMessageable - attr_reader :member - - def initialize(member:) - @member = member + attr_reader :type_name + attr_reader :variable_name + attr_reader :location - super "#{Location.to_string location}: Duplicated variable name #{member.name}" - end + def initialize(type_name:, variable_name:, location:) + @type_name = type_name + @variable_name = variable_name + @location = location - def location - loc = @member.location or raise - loc[:name] + super "#{Location.to_string location}: Duplicated #{kind} variable name `#{variable_name}` in `#{type_name}`" end end class InstanceVariableDuplicationError < VariableDuplicationError + def kind = 'instance' end class ClassInstanceVariableDuplicationError < VariableDuplicationError + def kind = 'class instance' end class UnknownMethodAliasError < DefinitionError diff --git a/sig/errors.rbs b/sig/errors.rbs index 410c1112c..2566567f1 100644 --- a/sig/errors.rbs +++ b/sig/errors.rbs @@ -185,17 +185,20 @@ module RBS class VariableDuplicationError < DefinitionError include DetailedMessageable - attr_reader member: AST::Members::Var - - def initialize: (member: AST::Members::Var) -> void + attr_reader type_name: TypeName + attr_reader variable_name: Symbol + attr_reader location: Location[untyped, untyped]? - def location: () -> Location[bot, bot] + def initialize: (type_name: TypeName, variable_name: Symbol, location: Location[untyped, untyped]?) -> void + def kind: () -> String end class InstanceVariableDuplicationError < VariableDuplicationError + def kind: () -> String end class ClassInstanceVariableDuplicationError < VariableDuplicationError + def kind: () -> String end # The `alias` member declares an alias from unknown method