Exception: RBS::MixinClassError

Inherits:
DefinitionError show all
Includes:
DetailedMessageable
Defined in:
sig/errors.rbs,
lib/rbs/errors.rb

Overview

MixinClassError is raised if a include/prepend/extend has a class (not a module) to mix-in

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods included from DetailedMessageable

#detailed_message

Constructor Details

#initialize(type_name:, member:) ⇒ MixinClassError

Returns a new instance of MixinClassError.

Parameters:



474
475
476
477
478
479
# File 'lib/rbs/errors.rb', line 474

def initialize(type_name:, member:)
  @type_name = type_name
  @member = member

  super "#{Location.to_string member.location}: Cannot #{mixin_name} a class `#{member_name(member)}` in the definition of `#{type_name}`"
end

Instance Attribute Details

#membermember (readonly)

Returns the value of attribute member.

Returns:



472
473
474
# File 'lib/rbs/errors.rb', line 472

def member
  @member
end

#type_nameTypeName (readonly)

Returns the value of attribute type_name.

Returns:



471
472
473
# File 'lib/rbs/errors.rb', line 471

def type_name
  @type_name
end

Class Method Details

.check!(type_name:, env:, member:) ⇒ void

This method returns an undefined value.

Parameters:



485
486
487
488
489
490
491
492
493
494
495
496
497
498
# File 'lib/rbs/errors.rb', line 485

def self.check!(type_name:, env:, member:)
  name = case member
         when AST::Members::Include, AST::Members::Extend, AST::Members::Prepend
           member.name
         when AST::Ruby::Members::IncludeMember, AST::Ruby::Members::ExtendMember, AST::Ruby::Members::PrependMember
           member.module_name
         else
           raise "Unknown member type: #{member.class}"
         end

  if env.class_decl?(name)
    raise new(type_name: type_name, member: member)
  end
end

Instance Method Details

#locationLocation[untyped, untyped]?

Returns:



481
482
483
# File 'lib/rbs/errors.rb', line 481

def location
  member.location
end

#member_name(member) ⇒ TypeName

Parameters:

Returns:



502
503
504
505
506
507
508
509
510
511
# File 'lib/rbs/errors.rb', line 502

def member_name(member)
  case member
  when AST::Members::Include, AST::Members::Extend, AST::Members::Prepend
    member.name
  when AST::Ruby::Members::IncludeMember, AST::Ruby::Members::ExtendMember, AST::Ruby::Members::PrependMember
    member.module_name
  else
    raise "Unknown member type: #{member.class}"
  end
end

#mixin_nameString

Returns:

  • (String)


513
514
515
516
517
518
519
520
521
522
523
524
# File 'lib/rbs/errors.rb', line 513

def mixin_name
  case member
  when AST::Members::Prepend, AST::Ruby::Members::PrependMember
    "prepend"
  when AST::Members::Include, AST::Ruby::Members::IncludeMember
    "include"
  when AST::Members::Extend, AST::Ruby::Members::ExtendMember
    "extend"
  else
    raise "Unknown member type: #{member.class}"
  end
end