Skip to content

Conversation

TysonAndre
Copy link
Contributor

@TysonAndre TysonAndre commented Dec 26, 2023

Using a class-like member in the wrong class-like is a compile-time error, not a parsing error. Tolerate it and parse the current/remaining statements and leave it to the applications to warn about using unexpected members in classes, traits, interfaces, or enums. (Or to tolerate them for stubs for editors/IDEs)

Related to #395

https://github.com/php/php-src/blob/PHP-8.3.1/Zend/zend_language_parser.y#L622-L638

https://github.com/php/php-langspec/blob/master/spec/15-interfaces.md exists but doesn't mention AST nodes that would become compilation errors

Using a class-like member in the wrong class-like is a compile-time
error, not a parsing error. Tolerate it and parse the current/remaining
statements and leave it to the applications to warn about using
unexpected members in classes, traits, interfaces, or enums.
(Or to tolerate them for stubs for editors/IDEs)

Related to microsoft#395
@TysonAndre TysonAndre force-pushed the unify-classlike-decl-statements branch from 049aa8d to 4cefb01 Compare December 26, 2023 19:31
@TysonAndre
Copy link
Contributor Author

I have mixed feelings about this. It's similar to what https://github.com/nikic/php-ast does (php's internal representation of its ast) but for many applications it'd add work in reintroducing the check of allowed class-like member types or adding new logic for class-like member types.

I'd expect a small benefit in doing a better job of parsing the remaining class-like members in some cases or in being able to stub interfaces such as UnitEnum/BackedEnum that have properties https://wiki.php.net/rfc/enumerations#new_interfaces .

@roblourens
Copy link
Member

This approach seems straightforward and makes sense to me- do you think we should do this or try to do a better job of parsing class-like members?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants