Skip to content

Unify the parsing of all class-like member declarations #408

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 1 commit into
base: main
Choose a base branch
from

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