Scanning is intentionally conservative because we have no way of rolling back an agressive block (at this time)
If a block was stopped for some trivial reason, (like an empty line) but the next line would have caused it to be balanced then we can check that condition and grab just one more line either up or down.
For example, below if we’re scanning up, line 2 might cause the scanning to stop. This is because empty lines might denote logical breaks where the user intended to chunk code which is a good place to stop and check validity. Unfortunately it also means we might have a “dangling” keyword or end.
1 def bark 2 3 end
If lines 2 and 3 are in the block, then when this method is run it would see it is unbalanced, but that acquiring line 1 would make it balanced, so that’s what it does.
Add the –clear-sources option
Add the –update-sources option
Print stats and dump exit locations
Dispatch enter and leave events for ClassVariableReadNode
nodes and continue walking the tree.
Dispatch enter and leave events for GlobalVariableReadNode
nodes and continue walking the tree.
Dispatch enter and leave events for LocalVariableReadNode
nodes and continue walking the tree.
Reset nil attributes to their default values to make the spec valid
Parses the most indented lines into blocks that are marked and added to the frontier
Returns the octet string representation of the elliptic curve point.
conversion_form specifies how the point is converted. Possible values are:
:compressed
:uncompressed
:hybrid
Compile a MatchLastLineNode
node
Dispatch enter and leave events for MatchLastLineNode
nodes and continue walking the tree.