@rightcapital/php-parser
Version:
TypeScript types for PHP Parser JSON representation
97 lines (75 loc) • 2.83 kB
Markdown
# TypeScript types for PHP Parser JSON representation
<!-- Badges area start -->
[](https://rightcapital.com)

[](https://conventionalcommits.org)
[](https://github.com/RightCapitalHQ/frontend-style-guide)
<!-- Badges area end -->
# 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
```bash
# 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.
```typescript
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