Skip to content

Conversation

tjb9dc
Copy link
Collaborator

@tjb9dc tjb9dc commented Oct 17, 2025

Vapi's SDK was failing to compile

This commit fixes two critical bugs in the PHP generator:

1. **Enum string escaping**: Enum values containing quotes are now properly escaped
   - Before: case Foo = "bar[x="y"]";  (syntax error)
   - After:  case Foo = "bar[x=\"y\"]";  (valid PHP)
   - Fixed in: generators/php/codegen/src/ast/Enum.ts

2. **Reserved keyword handling**: PHP reserved keywords (e.g., "eval", "list")
   are now prefixed with the root namespace to avoid syntax errors
   - Before: class Eval { }  (syntax error - "eval" is reserved)
   - After:  class VapiEval { }  (valid PHP, assuming "Vapi" is root namespace)
   - Fixed in:
     - generators/php/base/src/context/AbstractPhpGeneratorContext.ts
     - generators/php/dynamic-snippets/src/context/DynamicSnippetsGeneratorContext.ts

These fixes were discovered when generating a PHP SDK for Vapi, which had:
- 5 enum files with unescaped quotes causing parse errors
- A type named "Eval" which is a PHP reserved keyword

Resolves syntax errors in generated PHP code that prevented compilation.
Changed the reserved keyword handling to use a trailing underscore
(e.g., Eval_) instead of namespace prefixing for class names. This
is more idiomatic in PHP and follows similar conventions in other
languages.

Updated changelog to reflect the new approach.
Moved PHP_RESERVED_KEYWORDS from inline definitions to a shared
constant in the codegen package to avoid duplication. This ensures
the keyword list is maintained in a single location and can be
imported by both the base and dynamic-snippets contexts.
Extracted the class name sanitization logic from both context
implementations into a shared getSafeClassName() utility function
in the codegen package. This eliminates code duplication and
provides a single, reusable implementation.
@tjb9dc tjb9dc enabled auto-merge (squash) October 17, 2025 20:53
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Development

Successfully merging this pull request may close these issues.

2 participants