Skip to content

Latest commit

 

History

History
95 lines (74 loc) · 2.68 KB

README.md

File metadata and controls

95 lines (74 loc) · 2.68 KB

PHP Parser TypeScript version

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 nicki's PHP-Parser
  • Sort of auto generated type definitions to annotate the AST (represented as JSON) from nicki'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,
  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(`echo "Hello";`)

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

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

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

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

License

MIT License © 2023-Present