Skip to content

Commit

Permalink
Combine require detection to case-when for other node types
Browse files Browse the repository at this point in the history
  • Loading branch information
tompng committed Oct 26, 2023
1 parent ec8bfe5 commit bdc544f
Showing 1 changed file with 10 additions and 7 deletions.
17 changes: 10 additions & 7 deletions lib/katakata_irb/completor.rb
Original file line number Diff line number Diff line change
Expand Up @@ -224,15 +224,18 @@ def self.analyze(code, binding = Object::TOPLEVEL_BINDING)
calculate_scope = -> { KatakataIrb::TypeAnalyzer.calculate_target_type_scope(binding, parents, target_node).last }
calculate_type_scope = ->(node) { KatakataIrb::TypeAnalyzer.calculate_target_type_scope binding, [*parents, target_node], node }

if target_node.is_a?(Prism::StringNode) || target_node.is_a?(Prism::InterpolatedStringNode)
args_node = parents[-1]
call_node = parents[-2]
case target_node
when Prism::StringNode, Prism::InterpolatedStringNode
call_node, args_node = parents.last(2)
return unless call_node.is_a?(Prism::CallNode) && call_node.receiver.nil?
return unless args_node.is_a?(Prism::ArgumentsNode) && args_node.arguments.size == 1
return unless call_node.is_a?(Prism::CallNode) && call_node.receiver.nil? && (call_node.message == 'require' || call_node.message == 'require_relative')
return [call_node.message.to_sym, name.rstrip]
end

case target_node
case call_node.name
when :require
[:require, name.rstrip]
when :require_relative
[:require_relative, name.rstrip]
end
when Prism::SymbolNode
if parents.last.is_a? Prism::BlockArgumentNode # method(&:target)
receiver_type, _scope = calculate_type_scope.call target_node
Expand Down

0 comments on commit bdc544f

Please sign in to comment.