This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
pnpm test- Run tests using Vitestpnpm run build- Build the TypeScript projectpnpm run clean- Clean build artifactspnpm run eslint- Run ESLint lintingpnpm run eslint:fix- Run ESLint with auto-fix
pnpm run change- Create a version plan (required for PRs with publishable changes)pnpm run check- Check that a version plan exists (used in CI)pnpm run commit- Interactive commit with conventional commit prompts
- Uses pnpm as package manager (required, enforced by preinstall hook)
pnpm install- Install dependencies
- Versioning: Nx Release with version plans (markdown files in
.nx/version-plans/) - Workflow: Create a
feature/*branch, make changes, runpnpm run changeto generate a version plan, open a PR tomain - Publishing: Merging the auto-created Release PR (
release→main) publishes to npm - Conventional commits are enforced via commitlint
This is a TypeScript implementation of PHPDoc parser inspired by PHPStan's phpdoc-parser, focusing on parsing PHPDoc comments into an Abstract Syntax Tree (AST).
Lexical Analysis (src/phpdoc-parser/lexer/)
lexer.ts- Tokenizes PHPDoc strings using regex patterns- Handles 20+ token types (identifiers, types, operators, brackets, etc.)
Parsing (src/phpdoc-parser/parser/)
php-doc-parser.ts- Main parser that converts tokens to AST nodestype-parser.ts- Handles type parsing (generics, unions, intersections)const-expr-parser.ts- Parses constant expressionstoken-iterator.ts- Token stream management with savepoint/rollbackstring-unescaper.ts- String literal processing
AST Nodes (src/phpdoc-parser/ast/)
- Base interfaces:
node.ts,base-node.ts - php-doc/: PHPDoc-specific nodes (tags, text, parameters, etc.)
- type/: Type system nodes (unions, intersections, generics, arrays)
- const-expr/: Constant expression nodes (strings, numbers, arrays)
Printing (src/phpdoc-parser/printer/)
printer.ts- Converts AST back to formatted PHPDocdiffer.ts- Format-preserving printing with diff tracking- Supports both clean formatting and original format preservation
Transpilation (src/phpdoc-parser/transpiler/)
php-doc-to-typescript-type-transpiler.ts- Converts PHPDoc types to TypeScript
- Three-phase processing: Lexing → Parsing → AST manipulation
- Visitor pattern:
node-traverser.tsandcloning-visitor.tsfor AST transformation - Attribute system: Nodes can store metadata (line numbers, indexes) for format preservation
- Error handling: Invalid syntax produces
InvalidTagValueNodeorInvalidTypeNoderather than throwing - Format preservation: Printer can maintain original formatting using token metadata
- Standard tags:
@param,@return,@var,@throws,@deprecated, etc. - Advanced types: Generics, union/intersection types, conditional types, array shapes
- Template types and type aliases
- PHPStan/Psalm extensions
- Assertion tags for static analysis
src/index.ts- Main entry point exporting all public APIstests/- Test files organized by component (lexer, parser, printer, transpiler)- TypeScript build configuration in
tsconfig.build.json