Important: This documentation covers Yarn 1 (Classic).
For Yarn 2+ docs and migration guide, see yarnpkg.com.

Package detail

@rightcapital/phpdoc-parser

RightCapitalHQ3.3kMIT0.4.133TypeScript support: included

TypeScript version of PHPDoc parser with support for intersection types and generics

PHP, PHPDoc, PHPDoc Parser, Parser, TypeScript, PHPStan, AST, Lexer

readme

PHPDoc parser TypeScript version

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

Next-gen PHPDoc parser with support for intersection types and generics(TypeScript version)

What's that

This parser is inspired by the PHPStan's phpdoc-parser library: https://github.com/phpstan/phpdoc-parser

This library @rightcapital/phpdoc-parser represents PHPDocs with an AST (Abstract Syntax Tree). It supports parsing and modifying PHPDocs by using TypeScript/JavaScript.

For the complete list of supported PHPDoc features check out PHPStan documentation.

Installation

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

Basic usage

import {
  ConstExprParser,
  Lexer,
  PhpDocParser,
  TokenIterator,
  TypeParser,
} from '@rightcapital/phpdoc-parser';

// basic setup

const lexer = new Lexer();
const constExprParser = new ConstExprParser();
const typeParser = new TypeParser(constExprParser);
const phpDocParser = new PhpDocParser(typeParser, constExprParser);

// parsing and reading a PHPDoc string

const tokens = new TokenIterator(lexer.tokenize('/** @param Lorem $a */'));
const phpDocNode = phpDocParser.parse(tokens); // PhpDocNode
const paramTags = phpDocNode.getParamTagValues(); // ParamTagValueNode[]
console.log(paramTags[0].parameterName); // '$a'
console.log(paramTags[0].type); // IdentifierTypeNode { attributes: {}, name: 'Lorem' }

Format-preserving printer

This component can be used to modify the AST and print it again as close as possible to the original.

It's heavily inspired by format-preserving printer component in nikic/PHP-Parser.

import {
  CloningVisitor,
  ConstExprParser,
  IdentifierTypeNode,
  Lexer,
  NodeTraverser,
  PhpDocNode,
  PhpDocParser,
  TokenIterator,
  TypeParser,
  Printer,
} from '@rightcapital/phpdoc-parser';

const usedAttributes = { lines: true, indexes: true };

const lexer = new Lexer();
const constExprParser = new ConstExprParser(true, true, usedAttributes);
const typeParser = new TypeParser(constExprParser, true, usedAttributes);
const phpDocParser = new PhpDocParser(
  typeParser,
  constExprParser,
  true,
  true,
  usedAttributes,
);

const tokens = new TokenIterator(lexer.tokenize('/** @param Lorem $a */'));
const phpDocNode = phpDocParser.parse(tokens); // PhpDocNode

const cloningTraverser = new NodeTraverser([new CloningVisitor()]);

const [newPhpDocNode] = cloningTraverser.traverse([phpDocNode]) as [PhpDocNode];

// change something in newPhpDocNode
newPhpDocNode.getParamTagValues()[0].type = new IdentifierTypeNode('Ipsum');

// print changed PHPDoc
const printer = new Printer();
const newPhpDoc = printer.print(newPhpDocNode);
console.log(newPhpDoc);
// --- result ---
// /**
//  * @param Ipsum $a
//  */

const newPhpDocWithFormatPreserving = printer.printFormatPreserving(
  newPhpDocNode,
  phpDocNode,
  tokens,
);
console.log(newPhpDocWithFormatPreserving); // '/** @param Ipsum $a */'

Welcome to contribute

We are stilling waiting for someones to contribute, especially for the following features.

  • Doctrine Annotations support
  • More tests
  • More docs
  • A script to monitor upstream updates and notify the author to catch up.

Please check out our Contribution guide

How did we create the initial version of this project.

We created most of our code by using ChatGPT as a tool to transform most code from https://github.com/phpstan/phpdoc-parser to TypeScript version.

Our PHP API haven't used Doctrine, so Doctrine support are removed.

License

MIT License © 2023-Present

changelog

Change Log - @rightcapital/phpdoc-parser

0.4.132 (2025-4-28)

  • fix(deps): update dependency @types/node to v22.15.3 (ac5ede7)

0.4.131 (2025-4-28)

  • chore(deps): update pnpm to v10.10.0 (916abc3)

0.4.130 (2025-4-25)

  • fix(deps): update dependency @types/node to v22.15.2 (d2ffc52)

0.4.129 (2025-4-23)

  • chore(deps): update node.js to v22.15.0 (014bf94)

0.4.128 (2025-4-21)

  • chore(deps): update pnpm to v10.9.0 (d232994)

0.4.127 (2025-4-14)

  • chore(deps): update automerge non-major updates (08c283a)

0.4.126 (2025-4-11)

  • fix(deps): update dependency @types/node to v22.14.1 (28ac30d)

0.4.125 (2025-4-7)

  • chore(deps): update pnpm to v10.8.0 (7a3038c)

0.4.124 (2025-4-5)

  • fix(deps): update dependency typescript to v5.8.3 (667151f)

0.4.123 (2025-4-2)

  • fix(deps): update dependency @types/node to v22.14.0 (7d27ef9)

0.4.122 (2025-4-1)

  • fix(deps): update automerge non-major updates (a8205ab)

0.4.121 (2025-3-27)

  • fix(deps): update dependency @types/node to v22.13.14 (980f20d)

0.4.120 (2025-3-26)

  • chore(deps): update pnpm to v10.7.0 (f65967d)

0.4.119 (2025-3-24)

  • fix(deps): update dependency @types/node to v22.13.13 (1b3087c)

0.4.118 (2025-3-21)

  • fix(deps): update dependency @types/node to v22.13.11 (6f7be58)

0.4.117 (2025-3-19)

  • chore(deps): update pnpm to v10.6.5 (67c5531)

0.4.116 (2025-3-17)

  • chore(deps): update pnpm to v10.6.4 (fef1fb0)

0.4.115 (2025-3-17)

  • chore(deps): update actions/setup-node action to v4.3.0 (47dcf0b)

0.4.114 (2025-3-13)

  • chore(deps): update pnpm to v10.6.3 (e7d829a)

0.4.113 (2025-3-10)

  • chore(deps): update pnpm to v10.6.2 (ecd6bf0)

0.4.112 (2025-3-8)

  • fix(deps): update dependency @types/node to v22.13.10 (8e30237)

0.4.111 (2025-3-7)

  • chore(deps): update pnpm to v10.6.1 (905bd49)

0.4.110 (2025-3-6)

  • chore(deps): update pnpm to v10.6.0 (12690de)

0.4.109 (2025-3-3)

  • fix(deps): update dependency @types/node to v22.13.9 (aba4114)

0.4.108 (2025-3-1)

  • fix(deps): update dependency @types/node to v22.13.8 (d7f92d0)

0.4.107 (2025-3-1)

  • fix(deps): update automerge non-major updates (05c3052)

0.4.106 (2025-2-27)

  • chore(deps): update pnpm to v10.5.2 (c05bb2a)

0.4.105 (2025-2-26)

  • chore(deps): update pnpm to v10.5.1 (66fae79)

0.4.104 (2025-2-25)

  • chore(deps): update pnpm to v10.5.0 (2c9d1f4)

0.4.103 (2025-2-22)

  • fix(deps): update dependency @types/node to v22.13.5 (f3c5578)

0.4.102 (2025-2-17)

  • chore(deps): update pnpm to v10.4.1 (26733ba)

0.4.101 (2025-2-14)

  • fix(deps): update automerge non-major updates (d06bfe9)

0.4.100 (2025-2-13)

  • fix(deps): update dependency @types/node to v22.13.2 (adc6e58)

0.4.99 (2025-2-11)

  • fix(deps): update automerge non-major updates (cafe1d7)

0.4.98 (2025-2-11)

  • chore(deps): update pnpm to v10 (a27a0d9)

0.4.97 (2025-1-8)

  • fix(deps): update dependency typescript to v5.7.3 (1ba02b8)

0.4.96 (2025-1-8)

  • chore(deps): update node.js to v22.13.0 (6906ffa)

0.4.95 (2025-1-6)

  • chore(deps): update pnpm to v9.15.3 (7119a8b)

0.4.94 (2025-1-3)

  • fix(deps): update dependency @types/node to v22.10.5 (d71acd1)

0.4.93 (2025-1-2)

  • fix(deps): update dependency @types/node to v22.10.4 (4c3839f)

0.4.92 (2025-1-1)

  • fix(deps): update dependency @types/node to v22.10.3 (6ccc4b9)

0.4.91 (2024-12-29)

  • chore(deps): update pnpm to v9.15.2 (e02284f)

0.4.90 (2024-12-20)

  • chore(deps): update pnpm to v9.15.1 (09da0ee)

0.4.89 (2024-12-18)

  • fix(deps): update node.js to v22 (2c0745b)

0.4.88 (2024-12-11)

  • fix(deps): update dependency @types/node to v20.17.10 (2c00cb5)

0.4.87 (2024-12-6)

  • chore(deps): update pnpm to v9.15.0 (3042b22)

0.4.86 (2024-11-29)

  • chore(deps): update pnpm to v9.14.4 (de83e63)

0.4.85 (2024-11-28)

  • chore(deps): update pnpm to v9.14.3 (18305bb)

0.4.84 (2024-11-28)

  • fix(deps): update dependency @types/node to v20.17.9 (fef0efd)

0.4.83 (2024-11-26)

  • fix(deps): update dependency @types/node to v20.17.8 (581d12b)

0.4.82 (2024-11-23)

  • fix(deps): update dependency @types/node to v20.17.7 (8467bd1)

0.4.81 (2024-11-22)

  • fix(deps): update dependency typescript to v5.7.2 (04e356c)

0.4.80 (2024-11-20)

  • chore(deps): update automerge non-major updates (6d8d88c)

0.4.79 (2024-11-20)

  • chore(deps): update pnpm to v9.14.1 (cc6708a)

0.4.78 (2024-11-15)

  • chore(deps): update pnpm to v9.13.2 (8af974f)

0.4.77 (2024-11-14)

  • chore(deps): update pnpm to v9.13.1 (835a4c8)

0.4.76 (2024-11-13)

  • chore(deps): update pnpm to v9.13.0 (954d8d9)

0.4.75 (2024-11-3)

  • fix(deps): update dependency @types/node to v20.17.6 (88d4f28)

0.4.74 (2024-11-1)

  • fix(deps): update automerge non-major updates (6c6a733)

0.4.73 (2024-10-16)

  • chore(deps): update pnpm to v9.12.2 (8890463)

0.4.72 (2024-10-9)

  • fix(deps): update dependency typescript to v5.6.3 (7ad05e5)

0.4.71 (2024-10-8)

  • fix(deps): update dependency @types/node to v20.16.11 (94cf3ca)

0.4.70 (2024-10-7)

  • chore(deps): update pnpm to v9.12.1 (44070fe)

0.4.69 (2024-10-3)

  • chore(deps): update dependency node to v20.18.0 (2367967)

0.4.68 (2024-10-2)

  • chore(deps): update pnpm to v9.12.0 (fa2ca4b)

0.4.67 (2024-9-30)

  • fix(deps): update automerge non-major updates (ffbad76)

0.4.66 (2024-8-28)

  • fix(deps): update dependency @types/node to v20.16.2 (561b9c0)

0.4.65 (2024-8-26)

  • chore(deps): update pnpm to v9.9.0 (065a5bc)

0.4.64 (2024-8-22)

  • chore(deps): update pnpm to v9.8.0 (7779dda)

0.4.63 (2024-8-21)

  • chore(deps): update dependency node to v20.17.0 (3fc8d80)

0.4.62 (2024-8-19)

  • fix(deps): update dependency @types/node to v20.16.1 (7f9ea0a)

0.4.61 (2024-8-18)

  • fix(deps): update dependency @types/node to v20.16.0 (7e137d5)

0.4.60 (2024-8-16)

  • fix(deps): update dependency @types/node to v20.15.0 (00c2489)

0.4.59 (2024-8-14)

  • chore(deps): update pnpm to v9.7.1 (fa4eda7)

0.4.58 (2024-8-9)

  • fix(deps): update dependency @types/node to v20.14.15 (cee8fa2)

0.4.57 (2024-8-7)

  • chore(deps): update pnpm to v9.7.0 (e0696da)

0.4.56 (2024-8-2)

  • fix(deps): update dependency @types/node to v20.14.14 (5abf2f4)

0.4.55 (2024-7-28)

  • fix(deps): update dependency @types/node to v20.14.13 (0dd806a)

0.4.54 (2024-7-24)

  • chore(deps): update dependency node to v20.16.0 (8bee58f)

0.4.53 (2024-7-24)

  • fix(deps): update dependency @types/node to v20.14.12 (2666029)

0.4.52 (2024-7-23)

  • fix(deps): update dependency typescript to v5.5.4 (ad91f3f)

0.4.51 (2024-7-22)

  • chore(deps): update pnpm to v9.6.0 (b7ff15a)

0.4.50 (2024-7-17)

  • fix(deps): update dependency @types/node to v20.14.11 (92750f3)

0.4.49 (2024-7-9)

  • chore(deps): update actions/setup-node action to v4.0.3 (5a7dac1)

0.4.48 (2024-7-8)

  • chore(deps): update dependency node to v20.15.1 (f009965)

0.4.47 (2024-7-7)

  • chore(deps): update pnpm to v9.5.0 (15e0444)

0.4.46 (2024-7-6)

  • fix(deps): update dependency @types/node to v20.14.10 (0b6cb89)

0.4.45 (2024-7-2)

  • fix(deps): update dependency typescript to v5.5.3 (75b4282)

0.4.44 (2024-6-26)

  • fix(deps): update dependency @types/node to v20.14.9 (9b3bbe5)

0.4.43 (2024-6-22)

  • fix(deps): update dependency @types/node to v20.14.8 (44939fe)

0.4.42 (2024-6-21)

  • fix(deps): update automerge non-major updates (ed567c2)

0.4.41 (2024-6-19)

  • fix(deps): update dependency @types/node to v20.14.6 (58450e8)

0.4.40 (2024-6-18)

  • fix(deps): update dependency @types/node to v20.14.5 (89eaa37)

0.4.39 (2024-6-18)

  • fix(deps): update automerge non-major updates (3eedb19)

0.4.38 (2024-6-10)

  • chore(deps): update pnpm to v9.3.0 (aa21cb3)

0.4.37 (2024-6-5)

  • fix(deps): update automerge non-major updates (f482e88)

0.4.36 (2024-6-4)

  • fix(deps): update dependency @types/node to v20.14.1 (16fcd45)

0.4.35 (2024-6-3)

  • fix(deps): update dependency @types/node to v20.14.0 (63ee35d)

0.4.34 (2024-6-1)

  • fix(deps): update dependency @types/node to v20.13.0 (e0a9a4f)

0.4.33 (2024-5-30)

  • chore(deps): update pnpm to v9.1.4 (d74d629)

0.4.32 (2024-5-29)

  • fix(deps): update dependency @types/node to v20.12.13 (aaaa778)

0.4.31 (2024-5-28)

  • chore(deps): update dependency node to v20.14.0 (602e0f0)

0.4.30 (2024-5-27)

  • chore(deps): update pnpm to v9.1.3 (a53f714)

0.4.29 (2024-5-22)

  • chore(deps): update pnpm to v9 (5c9c3df)

0.4.28 (2024-5-14)

  • fix(deps): update dependency @types/node to v20.12.12 (62e9e9e)

0.4.27 (2024-5-9)

  • chore(deps): update dependency node to v20.13.1 (482bba1)

0.4.26 (2024-5-8)

  • fix(deps): update dependency @types/node to v20.12.11 (7d192df)

0.4.25 (2024-5-7)

  • chore(deps): update dependency node to v20.13.0 (aeb73c1)

0.4.24 (2024-5-6)

  • fix(deps): update dependency @types/node to v20.12.10 (2fb295b)

0.4.23 (2024-5-1)

  • fix(deps): update dependency @types/node to v20.12.8 (a70306f)

0.4.22 (2024-4-30)

  • chore(deps): update pnpm to v8.15.8 (cba7e8d)

0.4.21 (2024-4-13)

  • chore(deps): update pnpm to v8.15.7 (9370a3e)

0.4.20 (2024-4-10)

  • chore(deps): update automerge non-major updates (e441991)

0.4.19 (2024-4-10)

  • fix(deps): update dependency @types/node to v20.12.7 (f26c48a)

0.4.18 (2024-4-9)

  • fix(deps): update dependency @types/node to v20.12.6 (96f99d2)

0.4.17 (2024-4-6)

  • fix(deps): update dependency @types/node to v20.12.5 (7010baf)

0.4.16 (2024-4-4)

  • fix(deps): update dependency typescript to v5.4.4 (f8a4200)

0.4.15 (2024-4-4)

  • fix(deps): update dependency @types/node to v20.12.4 (670b551)

0.4.14 (2024-4-3)

  • chore(deps): update dependency node to v20.12.1 (0eb807f)

0.4.13 (2024-4-3)

  • fix(deps): update dependency @types/node to v20.12.3 (406652d)

0.4.12 (2024-4-2)

  • chore(deps): update pnpm to v8.15.6 (69a6d71)

0.4.11 (2024-4-1)

  • fix: modify generic type parsing (814d010)

0.4.10 (2024-3-30)

  • fix(deps): update dependency @types/node to v20.12.2 (2859be7)

0.4.9 (2024-3-26)

  • chore(deps): update dependency node to v20.12.0 (9c149fd)

0.4.8 (2024-3-20)

  • fix(deps): update dependency typescript to v5.4.3 (dfdbdf6)

0.4.7 (2024-3-19)

  • fix(deps): update dependency @types/node to v20.11.30 (75d6311)

0.4.6 (2024-3-19)

  • fix(deps): update dependency @types/node to v20.11.29 (03dfc3b)

0.4.5 (2024-3-18)

  • chore(deps): update pnpm to v8.15.5 (18d068d)

0.4.4 (2024-3-15)

  • fix(deps): update dependency @types/node to v20.11.28 (6dd9b46)

0.4.3 (2024-3-13)

  • fix(deps): update dependency @types/node to v20.11.27 (b300e29)

0.4.2 (2024-3-12)

  • fix(deps): update dependency @types/node to v20.11.26 (7120c0d)

0.4.1 (2024-3-8)

  • fix(deps): update dependency typescript to v5.4.2 (3db8b8b)

0.4.0 (2024-3-8)

  • feat: add PHP doc type node to TypeScript type node transpiler (342ce38)

0.3.52 (2024-3-6)

  • fix(deps): update dependency @types/node to v20.11.25 (aecb893)

0.3.51 (2024-2-29)

  • fix(deps): update dependency @types/node to v20.11.24 (413f0bf)

0.3.50 (2024-2-28)

  • fix(deps): update dependency @types/node to v20.11.22 (1fcb148)

0.3.49 (2024-2-28)

  • fix(deps): update dependency @types/node to v20.11.21 (a0ff357)

0.3.48 (2024-2-24)

  • chore(deps): update pnpm to v8.15.4 (62187cd)

0.3.47 (2024-2-22)

  • fix(deps): update dependency @types/node to v20.11.20 (1dc3b14)

0.3.46 (2024-2-15)

  • fix(deps): update dependency @types/node to v20.11.19 (8188adf)

0.3.45 (2024-2-15)

  • fix(deps): update non-major updates(auto merge) (c113c28)

0.3.44 (2024-2-14)

  • chore(deps): update dependency node to v20.11.1 (5147de0)

0.3.43 (2024-2-13)

  • chore(deps): update pnpm to v8.15.2 (f894920)

0.3.42 (2024-2-9)

  • fix(deps): update dependency @types/node to v20.11.17 (848cff1)

0.3.41 (2024-2-7)

  • chore(deps): update actions/setup-node action to v4.0.2 (9a74479)

0.3.40 (2024-2-1)

  • fix(deps): update dependency @types/node to v20.11.16 (2efc4b6)

0.3.39 (2024-2-1)

  • fix(deps): update dependency @types/node to v20.11.15 (b6e7440)

0.3.38 (2024-2-1)

  • fix(deps): update dependency @types/node to v20.11.14 (99341f8)

0.3.37 (2024-1-31)

  • fix(deps): update dependency @types/node to v20.11.13 (4f7b44d)

0.3.36 (2024-1-30)

  • chore(deps): update pnpm to v8.15.1 (bd8a1cd)

0.3.35 (2024-1-28)

  • fix(deps): update dependency @types/node to v20.11.10 (68dadc1)

0.3.34 (2024-1-28)

  • fix(deps): update non-major updates(auto merge) (e4e03a9)

0.3.33 (2024-1-26)

  • fix(deps): update dependency @types/node to v20.11.7 (7c3b832)

0.3.32 (2024-1-24)

  • fix(deps): update dependency @types/node to v20.11.6 (2c2f1b0)

0.3.31 (2024-1-23)

  • chore(deps): update pnpm to v8.14.3 (2de338e)

0.3.30 (2024-1-22)

  • chore(deps): update pnpm to v8.14.2 (b4c45c3)

0.3.29 (2024-1-17)

  • fix(deps): update dependency @types/node to v20.11.5 (7af7ffe)

0.3.28 (2024-1-16)

  • fix(deps): update dependency @types/node to v20.11.4 (d320114)

0.3.27 (2024-1-16)

  • fix(deps): update dependency @types/node to v20.11.3 (aefb973)

0.3.26 (2024-1-15)

  • fix(deps): update dependency @types/node to v20.11.2 (933fe82)

0.3.25 (2024-1-11)

  • fix(deps): update dependency @types/node to v20.11.0 (f1da147)

0.3.24 (2024-1-10)

  • chore(deps): update non-major updates(auto merge) (e3ce83c)

0.3.23 (2024-1-9)

  • fix(deps): update dependency @types/node to v20.10.8 (0d10bfe)

0.3.22 (2024-1-9)

  • fix(parser): not able to correctly parse key in array shape and object shape node (0c9453c)

0.3.21 (2024-1-7)

  • fix(deps): update dependency @types/node to v20.10.7 (6bc8761)

0.3.20 (2024-1-3)

  • chore(deps): update pnpm to v8.14.0 (05d9c6e)

0.3.19 (2023-12-30)

  • fix(deps): update dependency @types/node to v20.10.6 (dee6b8c)

0.3.18 (2023-12-26)

  • chore(deps): update pnpm to v8.13.1 (b3c0037)

0.3.17 (2023-12-18)

  • chore(deps): update actions/setup-node action to v4.0.1 (5297d3b)

0.3.16 (2023-12-18)

  • fix(deps): update non-major updates(auto merge) (8649a69)

0.3.15 (2023-12-18)

  • chore(deps): update github/codeql-action action to v3 (43bc61c)

0.3.14 (2023-12-12)

  • chore(deps): update dessant/lock-threads action to v5 (0da9759)

0.3.13 (2023-12-12)

  • chore(deps): update actions/stale action to v9 (12d1706)

0.3.12 (2023-10-27)

  • chore(deps): update dependency node to v20 (620542c)

0.3.11 (2023-10-24)

  • chore(deps): update actions/setup-node action to v4 (f58ec44)

0.3.10 (2023-9-16)

  • chore(deps): update github/codeql-action action to v2 (2467904)

0.3.9 (2023-9-16)

  • chore(deps): update dessant/lock-threads action to v4 (1be4076)

0.3.8 (2023-9-16)

  • docs: update CI passing badge URL (0499d56)

0.3.7 (2023-9-16)

  • chore(deps): update actions/stale action to v8 (6fc1a59)

0.3.6 (2023-9-16)

  • chore(deps): update actions/checkout action to v4 (58896d4)

0.3.5 (2023-9-11)

  • docs: add badges area to README file (ca5c105)

0.3.4 (2023-9-7)

  • fix(deps): update dependency @types/node to v18 (56589dc)
  • fix(deps): pin dependencies (56589dc)
  • chore(deps): update actions/checkout action to v4 (56589dc)

0.3.2 (2023-9-5)

0.3.1 (2023-9-5)

  • chore: update the dependent package name for ESLint and Prettier config (2e9abfb)

0.3.0 (2023-9-4)

  • feat: add Printer feature to allow generate PHP code from AST (bb4df9e)

0.3.0 (2023-9-4)

  • fix: update NPM script name for beachball to be consistent with other projects (79c406f)

0.2.0 (2023-9-2)

  • feat: add and config beachball (0cd956b)