Class: RBI::Rewriters::RemoveKnownDefinitions
- Defined in:
- lib/rbi/rewriters/remove_known_definitions.rb
Overview
Remove all definitions existing in the index from the current tree
Let’s create an ‘Index` from two different `Tree`s: ~~~rb tree1 = Parse.parse_string(<<~RBI)
class Foo
def foo; end
end
RBI
tree2 = Parse.parse_string(<<~RBI)
FOO = 10
RBI
index = Index.index(tree1, tree2) ~~~
We can use ‘RemoveKnownDefinitions` to remove the definitions found in the `index` from the `Tree` to clean: ~~~rb tree_to_clean = Parser.parse_string(<<~RBI)
class Foo
def foo; end
def ; end
end
FOO = 10
BAR = 42
RBI
cleaned_tree, operations = RemoveKnownDefinitions.remove(tree_to_clean, index)
assert_equal(<<~RBI, cleaned_tree)
class Foo
def ; end
end
BAR = 42
RBI
assert_equal(<<~OPERATIONS, operations.join(“n”))
Deleted ::Foo#foo at -:2:2-2-16 (duplicate from -:2:2-2:16)
Deleted ::FOO at -:5:0-5:8 (duplicate from -:1:0-1:8)
OPERATIONS ~~~
Defined Under Namespace
Classes: Operation
Instance Attribute Summary collapse
-
#operations ⇒ Object
readonly
: Array.
Class Method Summary collapse
-
.remove(tree, index) ⇒ Object
: (Tree tree, Index index) -> [Tree, Array].
Instance Method Summary collapse
-
#initialize(index) ⇒ RemoveKnownDefinitions
constructor
: (Index index) -> void.
-
#visit(node) ⇒ Object
: (Node? node) -> void.
-
#visit_all(nodes) ⇒ Object
: (Array nodes) -> void.
Methods inherited from Visitor
Constructor Details
#initialize(index) ⇒ RemoveKnownDefinitions
: (Index index) -> void
53 54 55 56 57 |
# File 'lib/rbi/rewriters/remove_known_definitions.rb', line 53 def initialize(index) super() @index = index @operations = T.let([], T::Array[Operation]) end |
Instance Attribute Details
#operations ⇒ Object (readonly)
: Array
50 51 52 |
# File 'lib/rbi/rewriters/remove_known_definitions.rb', line 50 def operations @operations end |
Class Method Details
.remove(tree, index) ⇒ Object
: (Tree tree, Index index) -> [Tree, Array]
61 62 63 64 65 |
# File 'lib/rbi/rewriters/remove_known_definitions.rb', line 61 def remove(tree, index) v = RemoveKnownDefinitions.new(index) v.visit(tree) [tree, v.operations] end |
Instance Method Details
#visit(node) ⇒ Object
: (Node? node) -> void
75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 |
# File 'lib/rbi/rewriters/remove_known_definitions.rb', line 75 def visit(node) return unless node case node when Scope visit_all(node.nodes) previous = previous_definition_for(node) delete_node(node, previous) if previous && can_delete_node?(node, previous) when Tree visit_all(node.nodes) when Indexable previous = previous_definition_for(node) delete_node(node, previous) if previous && can_delete_node?(node, previous) end end |
#visit_all(nodes) ⇒ Object
: (Array nodes) -> void
69 70 71 |
# File 'lib/rbi/rewriters/remove_known_definitions.rb', line 69 def visit_all(nodes) nodes.dup.each { |node| visit(node) } end |