Skip to content

Commit

Permalink
prism 0.14.0 and 0.15.0
Browse files Browse the repository at this point in the history
  • Loading branch information
tompng committed Oct 18, 2023
1 parent 75673a4 commit 67a1d4f
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 8 deletions.
20 changes: 14 additions & 6 deletions lib/katakata_irb/type_analyzer.rb
Original file line number Diff line number Diff line change
Expand Up @@ -306,12 +306,20 @@ def evaluate_and_or(node, scope, and_op:)
end
end

def evaluate_call_operator_write_node(node, scope) = evaluate_call_write(node, scope, :operator)
def evaluate_call_and_write_node(node, scope) = evaluate_call_write(node, scope, :and)
def evaluate_call_or_write_node(node, scope) = evaluate_call_write(node, scope, :or)
def evaluate_call_write(node, scope, operator)
def evaluate_call_operator_write_node(node, scope) = evaluate_call_write(node, scope, :operator, node.write_name)
def evaluate_call_and_write_node(node, scope) = evaluate_call_write(node, scope, :and, node.write_name)
def evaluate_call_or_write_node(node, scope) = evaluate_call_write(node, scope, :or, node.write_name)
def evaluate_index_operator_write_node(node, scope) = evaluate_call_write(node, scope, :operator, :[]=)
def evaluate_index_and_write_node(node, scope) = evaluate_call_write(node, scope, :and, :[]=)
def evaluate_index_or_write_node(node, scope) = evaluate_call_write(node, scope, :or, :[]=)
def evaluate_call_write(node, scope, operator, write_name)
receiver_type = evaluate node.receiver, scope
args_types, kwargs_types, block_sym_node, has_block = evaluate_call_node_arguments node, scope
if node.respond_to? :arguments
# Prism >= 0.15.0, Call{Operator,And,Or}WriteNode does not have arguments
args_types, kwargs_types, block_sym_node, has_block = evaluate_call_node_arguments node, scope
else
args_types = []
end
if block_sym_node
block_sym = block_sym_node.value
call_block_proc = ->(block_args, _self_type) do
Expand All @@ -321,7 +329,7 @@ def evaluate_call_write(node, scope, operator)
elsif has_block
call_block_proc = ->(_block_args, _self_type) { KatakataIrb::Types::OBJECT }
end
method = node.write_name.to_s.delete_suffix('=')
method = write_name.to_s.delete_suffix('=')
left = method_call receiver_type, method, args_types, kwargs_types, call_block_proc, scope
case operator
when :and
Expand Down
4 changes: 2 additions & 2 deletions test/test_katakata_irb.rb
Original file line number Diff line number Diff line change
Expand Up @@ -57,11 +57,11 @@ def test_prism_node_names
codes = files.map do |file|
File.read File.join(File.dirname(__FILE__), '../lib/katakata_irb', file)
end
ignore_class_names = ['Prism::BlockLocalVariableNode', 'Prism::IndexAndWriteNode', 'Prism::IndexOperatorWriteNode', 'Prism::IndexOrWriteNode']
implemented_node_class_names = [
*codes.join.scan(/evaluate_[a-z_]+/).grep(/_node$/).map { "Prism::#{_1[9..].split('_').map(&:capitalize).join}" },
*codes.join.scan(/Prism::[A-Za-z]+Node/)
].uniq.sort
ignore_class_names = ['Prism::BlockLocalVariableNode']
].uniq.sort - ignore_class_names
all_node_class_names = Prism.constants.grep(/Node$/).map { "Prism::#{_1}" }.sort - ['Prism::Node'] - ignore_class_names
assert_empty implemented_node_class_names - all_node_class_names
assert_empty all_node_class_names - implemented_node_class_names
Expand Down

0 comments on commit 67a1d4f

Please sign in to comment.