Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/rightcapitalhq/php-parser

TypeScript types for PHP Parser JSON representation
https://github.com/rightcapitalhq/php-parser

ast parser php php-parser phpparser static-analysis static-analyzer typescript

Last synced: 3 months ago
JSON representation

TypeScript types for PHP Parser JSON representation

Awesome Lists containing this project

README

        

# TypeScript types for PHP Parser JSON representation

[![made by RightCapital](https://img.shields.io/badge/made_by-RightCapital-5070e6)](https://rightcapital.com)
![GitHub Workflow Status (with event)](https://img.shields.io/github/actions/workflow/status/RightCapitalHQ/php-parser/ci.yml)
[![Conventional Commits](https://img.shields.io/badge/Conventional%20Commits-1.0.0-%23FE5196?logo=conventionalcommits&logoColor=white)](https://conventionalcommits.org)
[![RightCapital frontend style guide](https://img.shields.io/badge/code_style-RightCapital-5c4c64?labelColor=f0ede8)](https://github.com/RightCapitalHQ/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

```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
(
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(
echoNode!.exprs,
NodeType.Scalar_String,
);
console.log(scalarStringNode?.value);
// Hello
```

## License

MIT License © 2023-Present