ArrayGetExprRector support for variable and funccall array keys
Change how buildPathArgNode() generates an Arg node - as we introduce support for more complicated expressions in array keys to be converted to string path expressions, a simple implode() is no longer sufficient. The following changes are introduced:
buildPathStringNode() function added that aggregates successive string keys into a single delimited path String_ node
buildPathStringEncapsedNode() function added that uses buildPathStringNode to generate EncapsedStringPart nodes, aggregating them along with successive Variables and String_s as parts in an Encapsed node, adding delimiters as appropriate to String_ parts
buildPathEncapsedOrStringNode() function added that builds either a plain String_ or Encapsed node as appropriate from the consumed nodes
buildPathConcatNode() function added which creates a string Concat node from the first node and second node in the list, aggregating the second node on into either a String_ or Encapsed node with helpers as appropriate
appendDelimiter() and prependDelimiter() functions added that will prepend or append a delimiter to a String_ or to the appropriate part of an Encapsed node, creating an additional String_ part if necessary for it
buildPathArgNode() is modified to generate a String_, Encapsed, or Concat root node as appropriate depending on the input nodes, and properly nest Concat nodes into a root Concat node until all input nodes have been consumed by helpers
With these changes additional tests are provided to validate the desired output is generated for a number of cases, using the variable 'config' for reference fixtures.
ArrayGetExprRector support for variable and funccall array keys
Change how buildPathArgNode() generates an Arg node - as we introduce support
for more complicated expressions in array keys to be converted to string path
expressions, a simple implode() is no longer sufficient. The following changes
are introduced:
into a single delimited path String_ node
generate EncapsedStringPart nodes, aggregating them along with successive
Variables and String_s as parts in an Encapsed node, adding delimiters as
appropriate to String_ parts
String_ or Encapsed node as appropriate from the consumed nodes
the first node and second node in the list, aggregating the second node on
into either a String_ or Encapsed node with helpers as appropriate
append a delimiter to a String_ or to the appropriate part of an Encapsed
node, creating an additional String_ part if necessary for it
root node as appropriate depending on the input nodes, and properly nest
Concat nodes into a root Concat node until all input nodes have been consumed
by helpers
With these changes additional tests are provided to validate the desired output
is generated for a number of cases, using the variable 'config' for reference
fixtures.