Skip to content

Commit

Permalink
Add DefinitionBuilder#update method
Browse files Browse the repository at this point in the history
  • Loading branch information
soutaro committed Feb 24, 2021
1 parent 05e51b0 commit ce92abd
Show file tree
Hide file tree
Showing 4 changed files with 37 additions and 0 deletions.
19 changes: 19 additions & 0 deletions lib/rbs/definition_builder.rb
Expand Up @@ -788,5 +788,24 @@ def expand_alias(type_name)
ensure_namespace!(type_name.namespace, location: entry.decl.location)
entry.decl.type
end

def update(env:, except:, ancestor_builder:)
method_builder = self.method_builder.update(env: env, except: except)

DefinitionBuilder.new(env: env, ancestor_builder: ancestor_builder, method_builder: method_builder).tap do |builder|
builder.instance_cache.merge!(instance_cache)
builder.singleton_cache.merge!(singleton_cache)
builder.singleton0_cache.merge!(singleton0_cache)
builder.interface_cache.merge!(interface_cache)

except.each do |name|
builder.instance_cache.delete([name, true])
builder.instance_cache.delete([name, false])
builder.singleton_cache.delete(name)
builder.singleton0_cache.delete(name)
builder.interface_cache.delete(name)
end
end
end
end
end
14 changes: 14 additions & 0 deletions lib/rbs/definition_builder/method_builder.rb
Expand Up @@ -219,6 +219,20 @@ def each_member_with_accessibility(members, accessibility: :public)
end
end
end

def update(env:, except:)
MethodBuilder.new(env: env).tap do |copy|
copy.instance_methods.merge!(instance_methods)
copy.singleton_methods.merge!(singleton_methods)
copy.interface_methods.merge!(interface_methods)

except.each do |type_name|
copy.instance_methods.delete(type_name)
copy.singleton_methods.delete(type_name)
copy.interface_methods.delete(type_name)
end
end
end
end
end
end
2 changes: 2 additions & 0 deletions sig/definition_builder.rbs
Expand Up @@ -44,5 +44,7 @@ module RBS
def define_methods: (Definition, interface_methods: Hash[Symbol, Definition::Method], methods: MethodBuilder::Methods, super_interface_method: bool) -> void

def expand_alias: (TypeName) -> Types::t

def update: (env: Environment, ancestor_builder: AncestorBuilder, except: _Each[TypeName]) -> DefinitionBuilder
end
end
2 changes: 2 additions & 0 deletions sig/method_builder.rbs
Expand Up @@ -66,6 +66,8 @@ module RBS
def build_method: (Methods, Methods::instance_type, member: AST::Members::MethodDefinition, accessibility: Methods::Definition::accessibility) -> void

def each_member_with_accessibility: (Array[AST::Members::t | AST::Declarations::t], ?accessibility: Definition::accessibility) { (AST::Members::t | AST::Declarations::t, Definition::accessibility) -> void } -> void

def update: (env: Environment, except: _Each[TypeName]) -> MethodBuilder
end
end
end

0 comments on commit ce92abd

Please sign in to comment.