Hi internals,
I had thought of another alternative syntax - `/** @@MyAttribute */`, which
would solve some of the problems I mentioned about `#[`.
```
namespace My\NS;
use Other\MyAttribute;
/**
* Use @@ or << at the start of a line. (To be determined)
* Resolve the names in the comment relative to the scope of the function, like
the current attribute implementation.
* @@MyAttribute(expr, expr)
* Extra *s are allowed
*** @@AnotherAttribute
* Tokenizing should continue until a matching ) is found
* @@YetAnotherAttribute(
* expr
*)
*/
function my_function() {
}
```
Pros:
- Doc comments are already the recommended way to associate information with a
named element.
- Most code modifying tools will preserve doc comments
- This can go on the same line as a closure/short arrow function without lexing
ambiguity.
- Frameworks can use `Reflection*->getDocComment()` and update their checks to
also allow `@@` for attribute-like annotations when run in PHP 7.
They don't have to repeat both `@@MyAttribute` and `/** @MyAttribute */` or
risk it going out of sync
(Symfony would already have to parse the `use` clauses to find out what
`@MyAttribute` resolves to for Symfony attributes)
- Does not affect lexing outside of the doc comment
- I don't believe @@ is common. To minimize the impact on ascii art, this can
be initially limited to @@ at the start of a comment line (spaces and `*`s)
immediately followed by \ or the start of an identifier
Cons:
- Need to run the lexer twice on a T_DOC_COMMENT token, but only if the comment
string contains `@@` and is associated with an element.
Emitting T_DOC_COMMENT_START and T_DOC_COMMENT_END and T_DOC_COMMENT_INNER
and T_DOC_COMMENT_ATTRIBUTE
T_DOC_COMMENT_ATTRIBUTE_ERROR might make this technically feasible (similar
to heredoc having complicated logic)
- I prefer `@@` and `<<>>` over this proposal long-term, after php 7.4 support
is dropped.
But I prefer `/** @@MyAttr */` over `#[MyAttr]`.
- Would end up emitting parse errors for some existing code in the second lexer
pass.
- Syntax highlighting might be hard to implement in editors, but probably
tractable.
I don't remember seeing this proposed before. I believe @@ isn't used by
mainstream frameworks in doc comments right now, but correct me if it is.
Thanks,
- Tyson
--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: https://www.php.net/unsub.php