lib/rbs/errors.rb in rbs-1.2.1 vs lib/rbs/errors.rb in rbs-1.3.0
- old
+ new
@@ -348,6 +348,42 @@
first_def = defs.first or raise
original = first_def.original or raise
original.location
end
end
+
+ class MixinClassError < DefinitionError
+ attr_reader :type_name
+ attr_reader :member
+
+ def initialize(type_name:, member:)
+ @type_name = type_name
+ @member = member
+
+ super "#{Location.to_string member.location}: Cannot #{mixin_name} a class `#{member.name}` in the definition of `#{type_name}`"
+ end
+
+ def location
+ member.location
+ end
+
+ def self.check!(type_name:, env:, member:)
+ case env.class_decls[member.name]
+ when Environment::ClassEntry
+ raise new(type_name: type_name, member: member)
+ end
+ end
+
+ private
+
+ def mixin_name
+ case member
+ when AST::Members::Prepend
+ "prepend"
+ when AST::Members::Include
+ "include"
+ when AST::Members::Extend
+ "extend"
+ end
+ end
+ end
end