Class: Literally::Processor

Inherits:
BaseProcessor show all
Defined in:
lib/literally/processor.rb

Constant Summary

Constants inherited from BaseProcessor

BaseProcessor::EVAL_METHODS

Instance Attribute Summary

Attributes inherited from BaseProcessor

#annotations

Instance Method Summary collapse

Methods inherited from BaseProcessor

call, #initialize

Constructor Details

This class inherits a constructor from Literally::BaseProcessor

Instance Method Details

#visit_def_node(node) ⇒ Object

: (Prism::DefNode) -> void



5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# File 'lib/literally/processor.rb', line 5

def visit_def_node(node)
  return super unless node.equal_loc
  return super unless node in {
    body: {
      body: [
        Prism::CallNode[
          block: Prism::BlockNode[
            body: Prism::StatementsNode
          ] => block
        ] => call
      ]
    }
  }

  if (keywords = node.parameters&.keywords)
    foo = keywords.map do |keyword|
      loc = keyword.value.location
      @annotations << [loc.start_offset, loc.end_offset - loc.start_offset, "nil"]
      "#{keyword.name}: #{keyword.value.slice}"
    end.join(", ")
  end

  @annotations << [
    start = node.rparen_loc.start_offset + 1,
    block.opening_loc.end_offset - start,
    ";binding.assert(#{foo});__literally_returns__ = (;"
  ]

  @annotations << [
    block.closing_loc.start_offset,
    0,
    ";);binding.assert(__literally_returns__: #{call.name});__literally_returns__;"
  ]
end