class RBS::Subtractor
Public Class Methods
new(minuend, subtrahend)
click to toggle source
# File rbs-3.1.0/lib/rbs/subtractor.rb, line 5 def initialize(minuend, subtrahend) @minuend = minuend @subtrahend = subtrahend end
Public Instance Methods
call(minuend = @minuend, context: nil)
click to toggle source
# File rbs-3.1.0/lib/rbs/subtractor.rb, line 10 def call(minuend = @minuend, context: nil) minuend.map do |decl| case decl when AST::Declarations::Constant name = absolute_typename(decl.name, context: context) decl unless @subtrahend.constant_name?(name) when AST::Declarations::Interface name = absolute_typename(decl.name, context: context) decl unless @subtrahend.interface_name?(name) when AST::Declarations::Class, AST::Declarations::Module name = absolute_typename(decl.name, context: context) case when @subtrahend.class_decl?(name) && decl.is_a?(AST::Declarations::Class) filter_members(decl, context: context) when @subtrahend.module_decl?(name) && decl.is_a?(AST::Declarations::Module) filter_members(decl, context: context) when @subtrahend.constant_name?(name) nil else decl end when AST::Declarations::Global decl unless @subtrahend.global_decls[decl.name] when AST::Declarations::TypeAlias name = absolute_typename(decl.name, context: context) decl unless @subtrahend.type_alias_decls[name] when AST::Declarations::ClassAlias name = absolute_typename(decl.new_name, context: context) decl unless @subtrahend.class_alias?(name) || @subtrahend.class_decl?(name) when AST::Declarations::ModuleAlias name = absolute_typename(decl.new_name, context: context) decl unless @subtrahend.module_alias?(name) || @subtrahend.module_decl?(name) else raise "unknwon decl: #{(_ = decl).class}" end end.compact end