class Steep::Signature::Validator
def builder
def builder checker.factory.definition_builder end
def each_error(&block)
def each_error(&block) if block_given? @errors.each(&block) else enum_for :each_error end end
def env
def env checker.factory.env end
def factory
def factory checker.factory end
def has_error?
def has_error? !no_error? end
def initialize(checker:)
def initialize(checker:) @checker = checker @errors = [] end
def no_error?
def no_error? @errors.empty? end
def rescue_validation_errors
def rescue_validation_errors yield rescue RBS::InvalidTypeApplicationError => exn @errors << Errors::InvalidTypeApplicationError.new( name: factory.type_name(exn.type_name), args: exn.args.map {|ty| factory.type(ty) }, params: exn.params.each.map(&:name), location: exn.location ) rescue RBS::NoTypeFoundError => exn @errors << Errors::UnknownTypeNameError.new( name: factory.type_name(exn.type_name), location: exn.location ) end
def validate
def validate @errors = [] validate_decl validate_const validate_global end
def validate_alias
def validate_alias env.each_alias do |name, decl| rescue_validation_errors do Steep.logger.debug "#{Location.to_string decl.location}:\tValidating alias `#{name}`..." env.validate(decl.type, namespace: name.namespace) end end end
def validate_const
def validate_const env.each_constant do |name, decl| rescue_validation_errors do Steep.logger.debug "#{Location.to_string decl.location}:\tValidating constant `#{name}`..." env.validate(decl.type, namespace: name.namespace) end end end
def validate_decl
def validate_decl env.each_decl do |name, decl| validate_one_decl name, decl end end
def validate_global
def validate_global env.each_global do |name, decl| rescue_validation_errors do Steep.logger.debug "#{Location.to_string decl.location}:\tValidating global `#{name}`..." env.validate(decl.type, namespace: RBS::Namespace.root) end end end
def validate_one_decl(name, decl)
def validate_one_decl(name, decl) case decl when Declarations::Class rescue_validation_errors do Steep.logger.debug "#{Location.to_string decl.location}:\tValidating class definition `#{name}`..." builder.build_instance(decl.name.absolute!).each_type do |type| env.validate type, namespace: RBS::Namespace.root end builder.build_singleton(decl.name.absolute!).each_type do |type| env.validate type, namespace: RBS::Namespace.root end end when Declarations::Interface rescue_validation_errors do Steep.logger.debug "#{Location.to_string decl.location}:\tValidating interface `#{name}`..." builder.build_interface(decl.name.absolute!, decl).each_type do |type| env.validate type, namespace: RBS::Namespace.root end end end end