Skip to main content
Drupal API
User account menu
  • Log in

Breadcrumb

  1. Drupal Core 11.1.x
  2. Parser.php

function Parser::parseJSXIdentifierOrMemberExpression

Parses a jsx identifier, namespaced identifier or member expression

Parameters

bool $allowMember True to allow member expressions:

Return value

\Peast\Syntax\Node\Node|null

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\JSX

Code

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;
}

API Navigation

  • Drupal Core 11.1.x
  • Topics
  • Classes
  • Functions
  • Constants
  • Globals
  • Files
  • Namespaces
  • Deprecated
  • Services
RSS feed
Powered by Drupal