function Parser::parseJSXIdentifierOrMemberExpression
Parses a jsx identifier, namespaced identifier or member expression
Parameters
bool $allowMember True to allow member expressions:
Return value
2 calls to Parser::parseJSXIdentifierOrMemberExpression()
- Parser::parseJSXAttribute in vendor/
mck89/ peast/ lib/ Peast/ Syntax/ JSX/ Parser.php - Parses a jsx spread attribute
- Parser::parseJSXElement in vendor/
mck89/ peast/ lib/ Peast/ Syntax/ JSX/ Parser.php - Parses a jsx element
File
-
vendor/
mck89/ peast/ lib/ Peast/ Syntax/ JSX/ Parser.php, line 254
Class
- Parser
- JSX parser trait
Namespace
Peast\Syntax\JSXCode
protected function parseJSXIdentifierOrMemberExpression($allowMember = true) {
$idToken = $this->scanner
->reconsumeCurrentTokenInJSXMode();
if (!$idToken || $idToken->type !== Token::TYPE_JSX_IDENTIFIER) {
return null;
}
$this->scanner
->consumeToken();
$idNode = $this->createJSXNode("JSXIdentifier", $idToken);
$idNode->setName($idToken->value);
$idNode = $this->completeNode($idNode);
//Namespaced identifier
if ($this->scanner
->consume(":")) {
$idToken2 = $this->scanner
->reconsumeCurrentTokenInJSXMode();
if (!$idToken2 || $idToken2->type !== Token::TYPE_JSX_IDENTIFIER) {
$this->error();
}
$this->scanner
->consumeToken();
$idNode2 = $this->createJSXNode("JSXIdentifier", $idToken2);
$idNode2->setName($idToken2->value);
$idNode2 = $this->completeNode($idNode2);
$node = $this->createJSXNode("JSXNamespacedName", $idToken);
$node->setNamespace($idNode);
$node->setName($idNode2);
return $this->completeNode($node);
}
//Get following identifiers
$nextIds = array();
if ($allowMember) {
while ($this->scanner
->consume(".")) {
$nextId = $this->scanner
->reconsumeCurrentTokenInJSXMode();
if (!$nextId || $nextId->type !== Token::TYPE_JSX_IDENTIFIER) {
$this->error();
}
$this->scanner
->consumeToken();
$nextIds[] = $nextId;
}
}
//Create the member expression if required
$objectNode = $idNode;
foreach ($nextIds as $nid) {
$propEnd = $nid->location->end;
$propNode = $this->createJSXNode("JSXIdentifier", $nid);
$propNode->setName($nid->value);
$propNode = $this->completeNode($propNode, $propEnd);
$node = $this->createJSXNode("JSXMemberExpression", $objectNode);
$node->setObject($objectNode);
$node->setProperty($propNode);
$objectNode = $this->completeNode($node, $propEnd);
}
return $objectNode;
}