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

Reply via email to