Skip to content

kayw-geek/php-parser

 
 

Repository files navigation

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

About

PHP Parser TypeScript version

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • TypeScript 98.2%
  • JavaScript 1.4%
  • Other 0.4%