Skip to content

Commit faea4c3

Browse files
committed
Add information for VariableDuplicationError
1 parent 1209f49 commit faea4c3

File tree

3 files changed

+19
-15
lines changed

3 files changed

+19
-15
lines changed

lib/rbs/definition_builder.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -569,11 +569,11 @@ def validate_variable(var)
569569
case l.source
570570
when AST::Members::InstanceVariable
571571
if r.source.instance_of?(AST::Members::InstanceVariable) && l.declared_in == r.declared_in
572-
raise InstanceVariableDuplicationError.new(member: l.source)
572+
raise InstanceVariableDuplicationError.new(type_name: l.declared_in, variable_name: l.source.name, location: l.source.location)
573573
end
574574
when AST::Members::ClassInstanceVariable
575575
if r.source.instance_of?(AST::Members::ClassInstanceVariable) && l.declared_in == r.declared_in
576-
raise ClassInstanceVariableDuplicationError.new(member: l.source)
576+
raise ClassInstanceVariableDuplicationError.new(type_name: l.declared_in, variable_name: l.source.name, location: l.source.location)
577577
end
578578
end
579579
end

lib/rbs/errors.rb

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -325,24 +325,25 @@ def type_name
325325
class VariableDuplicationError < DefinitionError
326326
include DetailedMessageable
327327

328-
attr_reader :member
329-
330-
def initialize(member:)
331-
@member = member
328+
attr_reader :type_name
329+
attr_reader :variable_name
330+
attr_reader :location
332331

333-
super "#{Location.to_string location}: Duplicated variable name #{member.name}"
334-
end
332+
def initialize(type_name:, variable_name:, location:)
333+
@type_name = type_name
334+
@variable_name = variable_name
335+
@location = location
335336

336-
def location
337-
loc = @member.location or raise
338-
loc[:name]
337+
super "#{Location.to_string location}: Duplicated #{kind} variable name `#{variable_name}` in `#{type_name}`"
339338
end
340339
end
341340

342341
class InstanceVariableDuplicationError < VariableDuplicationError
342+
def kind = 'instance'
343343
end
344344

345345
class ClassInstanceVariableDuplicationError < VariableDuplicationError
346+
def kind = 'class instance'
346347
end
347348

348349
class UnknownMethodAliasError < DefinitionError

sig/errors.rbs

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -185,17 +185,20 @@ module RBS
185185
class VariableDuplicationError < DefinitionError
186186
include DetailedMessageable
187187

188-
attr_reader member: AST::Members::Var
189-
190-
def initialize: (member: AST::Members::Var) -> void
188+
attr_reader type_name: TypeName
189+
attr_reader variable_name: Symbol
190+
attr_reader location: Location[untyped, untyped]
191191

192-
def location: () -> Location[bot, bot]
192+
def initialize: (type_name: TypeName, variable_name: Symbol, location: Location[untyped, untyped]) -> void
193+
def kind: () -> String
193194
end
194195

195196
class InstanceVariableDuplicationError < VariableDuplicationError
197+
def kind: () -> String
196198
end
197199

198200
class ClassInstanceVariableDuplicationError < VariableDuplicationError
201+
def kind: () -> String
199202
end
200203

201204
# The `alias` member declares an alias from unknown method

0 commit comments

Comments
 (0)