Skip to content

RightCapitalHQ/php-parser

Folders and files

NameName
Last commit message
Last commit date

Latest commit

author
GitHub Actions[bot]
Apr 14, 2025
d635ba8 · Apr 14, 2025
Apr 14, 2025
Feb 4, 2024
Mar 3, 2025
Sep 13, 2023
Mar 3, 2025
Oct 12, 2024
Apr 14, 2025
Apr 14, 2025
Sep 13, 2023
Mar 26, 2024
Mar 26, 2024
Sep 14, 2023
Sep 13, 2023
Mar 3, 2025
Mar 3, 2025
Nov 1, 2024
Apr 14, 2025
Apr 14, 2025
Sep 13, 2023
Sep 30, 2024
Sep 13, 2023
Oct 12, 2024

Repository files navigation

TypeScript types for PHP Parser JSON representation

made by RightCapital GitHub Workflow Status (with event) Conventional Commits RightCapital frontend style guide

Introduction

This NPM package is focusing on providing to following abilities:

  • A TypeScript/JavaScript wrapper for calling nikic's PHP-Parser
  • Sort of auto generated type definitions to annotate the AST (represented as JSON) from nikic's PHP-Parser cli
  • Some util/helper functions to easily retrieving proper PHP AST node with correct type annotation

Installation

This package needs you have PHP with composer installed first

# pnpm
pnpm add @rightcapital/php-parser
# yarn
yarn add @rightcapital/php-parser
# npm
npm install --save @rightcapital/php-parser

Basic Usage

Supposed you have a PHP file named hello.php with the following content

 <?php
echo "Hello";

Here is your TypeScript code for parsing and retrieving the AST nodes of the above PHP file.

import {
  CliHelpers,
  FullyQualifiedScalarString,
  FullyQualifiedStmtEcho,
  NodeRetrieverHelpers,
  NodeType,
  NodeTypeInheritingFromNodeAbstract,
} from '@rightcapital/php-parser';

// Get the root AST nodes from PHP file
const rootNodes: NodeTypeInheritingFromNodeAbstract[] =
  CliHelpers.parsePhpFileToAst('./hello.php');
// or if you prefer to get AST from code string, just use
// CliHelpers.parsePhpCodeStringToAst(`<?php echo "Hello";`)

console.log(rootNodes);
// [
//   {
//     nodeType: "Stmt_Echo",
//     attributes: { startLine: 2, startFilePos: 6, endLine: 2, endTokenPos: 4, endFilePos: 18 },
//     exprs: [[Object]],
//   },
// ];

const echoNode =
  NodeRetrieverHelpers.findNodeByNodeType<FullyQualifiedStmtEcho>(
    rootNodes,
    NodeType.Stmt_Echo,
  );

// Get the specified node with type annotation
console.log(echoNode);
// {
//   nodeType: 'Stmt_Echo',
//   attributes: { startLine: 2, startFilePos: 6, endLine: 2, endTokenPos: 4, endFilePos: 18 },
//   exprs: [
//     { nodeType: 'Scalar_String', attributes: [Object], value: 'Hello' }
//   ]
// }

const scalarStringNode =
  NodeRetrieverHelpers.findNodeByNodeType<FullyQualifiedScalarString>(
    echoNode!.exprs,
    NodeType.Scalar_String,
  );
console.log(scalarStringNode?.value);
// Hello

License

MIT License © 2023-Present