Diffdown is a real-time collaborative Markdown editor/previewer built on the AT Protocol
diffdown.com
1# Decorators on classes and class fields
2
3@d1 class Foo {
4 @d2 bar() {}
5 @d3 get baz() { return 1 }
6 @d4 quux = 1
7}
8
9==>
10
11Script(ClassDeclaration(
12 Decorator(VariableName),
13 class,VariableDefinition,ClassBody(
14 MethodDeclaration(Decorator(VariableName),PropertyDefinition,ParamList,Block),
15 MethodDeclaration(Decorator(VariableName),get,PropertyDefinition,ParamList,Block(
16 ReturnStatement(return,Number))),
17 PropertyDeclaration(Decorator(VariableName),PropertyDefinition,Equals,Number))))
18
19# Multiple decorators
20
21@d1 @d2 class Y {}
22
23==>
24
25Script(ClassDeclaration(Decorator(VariableName),Decorator(VariableName),class,VariableDefinition,ClassBody))
26
27# Member decorators
28
29@one.two class X {}
30
31==>
32
33Script(ClassDeclaration(Decorator(MemberExpression(VariableName,PropertyName)),class,VariableDefinition,ClassBody))
34
35# Call decorators
36
37@d(2) @a.b() class Z {}
38
39==>
40
41Script(ClassDeclaration(
42 Decorator(CallExpression(VariableName,ArgList(Number))),
43 Decorator(CallExpression(MemberExpression(VariableName,PropertyName),ArgList)),
44 class,VariableDefinition,ClassBody))
45
46# Parenthesized decorators
47
48@(a instanceof Array ? x : y)(2) class P {}
49
50==>
51
52Script(ClassDeclaration(
53 Decorator(CallExpression(ParenthesizedExpression(
54 ConditionalExpression(BinaryExpression(VariableName,instanceof,VariableName),LogicOp,VariableName,LogicOp,VariableName)),
55 ArgList(Number))),
56 class,VariableDefinition,ClassBody))
57
58# Parameter decorators
59
60function foo(@d bar) {}
61
62==>
63
64Script(FunctionDeclaration(function,VariableDefinition,ParamList(Decorator(VariableName),VariableDefinition),Block))