Syntax for Static Import of User Define Attributes

Dennis dkorpel at gmail.com
Fri Jul 28 13:45:13 UTC 2023


On Friday, 28 July 2023 at 12:20:05 UTC, Steven Schveighoffer 
wrote:
> On 7/28/23 8:10 AM, Vijay Nayar wrote:
> It might be possible to expand the grammar. It seems very 
> specific to UDAs, as it doesn't just throw out `Expression` or 
> whatnot. It probably has to do with the spot that it's in 
> (declaration).

Yes, parsing arbitrary expressions after an `@` would result in 
this:
```D
void f(int x) @att in (x > 0) { }
```

Being parsed as:

```D
void f(int x) @(att in (x > 0)) { }
```

And things like `@3 + 3` don't look like they would be parsed as 
`@(3 + 3)`, it looks like `(@3) + 3`.

So the syntax as `@(expression)` to make it clear where the 
expression ends. Then there's `@identifier` and 
`@identifier(args)` as shorthand for common cases that do look 
clear. I recently added `@TemplateSingleArgument` so you can do 
`@"abc"` or `@3` as well. Perhaps the syntax can be expanded to 
allow `@a.b.c(d)` as well, as well as `@a.b.c!d`, though there's 
a risk of the rules getting convoluted.



More information about the Digitalmars-d-learn mailing list