Skip to content

Commit

Permalink
Merge pull request #54 from tompng/ver_0_2_2
Browse files Browse the repository at this point in the history
Ver 0 2 2
  • Loading branch information
tompng authored Oct 30, 2023
2 parents 12deaf6 + 95e1e03 commit 2396ae1
Show file tree
Hide file tree
Showing 4 changed files with 11 additions and 27 deletions.
2 changes: 1 addition & 1 deletion katakata_irb.gemspec
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ Gem::Specification.new do |spec|
# Uncomment to register a new dependency of your gem
spec.add_dependency 'irb', '>= 1.4.0'
spec.add_dependency 'reline', '>= 0.3.0'
spec.add_dependency 'prism', '>= 0.15.1'
spec.add_dependency 'prism', '>= 0.16.0'
spec.add_dependency 'rbs'

# For more information and examples about making a new gem, check out our
Expand Down
33 changes: 8 additions & 25 deletions lib/katakata_irb/type_analyzer.rb
Original file line number Diff line number Diff line change
Expand Up @@ -846,12 +846,7 @@ def assign_required_parameter(node, value, scope)
case node.type
when :required_parameter_node
scope[node.name.to_s] = value || KatakataIrb::Types::OBJECT
when :required_destructured_parameter_node # Revmoed in prism > 0.15.1
values = value ? sized_splat(value, :to_ary, node.parameters.size) : []
node.parameters.zip values do |n, v|
assign_required_parameter n, v, scope
end
when :multi_target_node # Added to parameters in prism > 0.15.1
when :multi_target_node
parameters = [*node.lefts, *node.rest, *node.rights]
values = value ? sized_splat(value, :to_ary, parameters.size) : []
parameters.zip values do |n, v|
Expand Down Expand Up @@ -986,11 +981,8 @@ def evaluate_match_pattern(value, pattern, scope)
KatakataIrb::Types::ARRAY
when Prism::HashPatternNode
# TODO
# assocs changed to elements in prism > 0.15.1
elements = pattern.respond_to?(:assocs) ? pattern.assocs : pattern.elements
elements.each { evaluate_match_pattern KatakataIrb::Types::OBJECT, _1, scope }
if pattern.respond_to?(:rest) && pattern.rest # prism > 0.15.1
# pattern.rest was included in pattern.assocs until prism <= 0.15.1
pattern.elements.each { evaluate_match_pattern KatakataIrb::Types::OBJECT, _1, scope }
if pattern.respond_to?(:rest) && pattern.rest
evaluate_match_pattern KatakataIrb::Types::OBJECT, pattern.rest, scope
end
KatakataIrb::Types::HASH
Expand Down Expand Up @@ -1049,18 +1041,10 @@ def evaluate_write(node, value, scope, evaluated_receivers)
end

def evaluate_multi_write(node, values, scope, evaluated_receivers)
if node.respond_to? :targets # prism <= 0.15.1
splat_index = node.targets.find_index { _1.is_a? Prism::SplatNode }
pre_targets = splat_index ? node.targets[0...splat_index] : node.targets
splat_target = node.targets[splat_index] if splat_index
post_targets = splat_index ? node.targets[splat_index + 1..] : []
size = node.targets.size
else # prism > 0.15.1
pre_targets = node.lefts
splat_target = node.rest
post_targets = node.rights
size = pre_targets.size + (splat_target ? 1 : 0) + post_targets.size
end
pre_targets = node.lefts
splat_target = node.rest
post_targets = node.rights
size = pre_targets.size + (splat_target ? 1 : 0) + post_targets.size
values = values.is_a?(Array) ? values.dup : sized_splat(values, :to_ary, size)
pre_pairs = pre_targets.zip(values.shift(pre_targets.size))
post_pairs = post_targets.zip(values.pop(post_targets.size))
Expand All @@ -1073,8 +1057,7 @@ def evaluate_multi_write(node, values, scope, evaluated_receivers)
def evaluate_multi_write_receiver(node, scope, evaluated_receivers)
case node
when Prism::MultiWriteNode, Prism::MultiTargetNode
# prism <= 0.15.1 has targets, prism > 0.15.1 has lefts, rest, rights
targets = node.respond_to?(:targets) ? node.targets : [*node.lefts, *node.rest, *node.rights]
targets = [*node.lefts, *node.rest, *node.rights]
targets.each { evaluate_multi_write_receiver _1, scope, evaluated_receivers }
when Prism::CallNode
if node.receiver
Expand Down
2 changes: 1 addition & 1 deletion lib/katakata_irb/version.rb
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# frozen_string_literal: true

module KatakataIrb
VERSION = "0.2.1"
VERSION = "0.2.2"
end
1 change: 1 addition & 0 deletions test/test_type_analyze.rb
Original file line number Diff line number Diff line change
Expand Up @@ -337,6 +337,7 @@ def test_massign
# incomplete massign
assert_analyze_type('a,b', :lvar_or_method, 'b')
assert_call('(a=1).b, a.', include: Integer)
assert_call('a=1; *a.', include: Integer)
end

def test_field_assign
Expand Down

0 comments on commit 2396ae1

Please sign in to comment.