Skip to content

Commit 3c1dfb3

Browse files
committed
feat: Add field-docs gathering to dataclass-like decls and properly serialize them on events
1 parent 5427e1c commit 3c1dfb3

32 files changed

+351
-324
lines changed

examples/arc_28/contract.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,18 @@
44

55

66
class Swapped(arc4.Struct):
7+
"""This is a docstring for Swapped"""
8+
79
a: arc4.UInt64
810
b: arc4.UInt64
11+
"""These are field docs for Swapped.b"""
912

1013

1114
class NativeSwapped(Struct):
15+
"""This is a docstring for NativeSwapped"""
16+
1217
a: UInt64
18+
"These are field docs for NativeSwapped.a"
1319
b: UInt64
1420

1521

examples/arc_28/out/EventEmitter.approval.puya.map

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

examples/arc_28/out/EventEmitter.approval.teal

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
// algopy.arc4.ARC4Contract.approval_program() -> uint64:
55
main:
66
intcblock 8 1
7-
// arc_28/contract.py:16
7+
// arc_28/contract.py:22
88
// class EventEmitter(ARC4Contract):
99
txn NumAppArgs
1010
bz main___algopy_default_create@10
@@ -29,7 +29,7 @@ main___algopy_default_create@10:
2929

3030
// examples.arc_28.contract.EventEmitter.emit_swapped[routing]() -> void:
3131
emit_swapped:
32-
// arc_28/contract.py:17
32+
// arc_28/contract.py:23
3333
// @arc4.abimethod
3434
txna ApplicationArgs 1
3535
dup
@@ -43,7 +43,7 @@ emit_swapped:
4343
intc_0 // 8
4444
==
4545
assert // invalid number of bytes for arc4.uint64
46-
// arc_28/contract.py:19
46+
// arc_28/contract.py:25
4747
// arc4.emit(Swapped(b, a))
4848
swap
4949
concat
@@ -52,22 +52,22 @@ emit_swapped:
5252
concat
5353
dup
5454
log
55-
// arc_28/contract.py:20
55+
// arc_28/contract.py:26
5656
// arc4.emit("Swapped(uint64,uint64)", b, a)
5757
dup
5858
log
59-
// arc_28/contract.py:21
59+
// arc_28/contract.py:27
6060
// arc4.emit("Swapped", b, a)
6161
log
62-
// arc_28/contract.py:17
62+
// arc_28/contract.py:23
6363
// @arc4.abimethod
6464
intc_1 // 1
6565
return
6666

6767

6868
// examples.arc_28.contract.EventEmitter.emit_native_swapped[routing]() -> void:
6969
emit_native_swapped:
70-
// arc_28/contract.py:23
70+
// arc_28/contract.py:29
7171
// @arc4.abimethod
7272
txna ApplicationArgs 1
7373
dup
@@ -83,7 +83,7 @@ emit_native_swapped:
8383
==
8484
assert // invalid number of bytes for arc4.uint64
8585
btoi
86-
// arc_28/contract.py:25
86+
// arc_28/contract.py:31
8787
// arc4.emit(NativeSwapped(a=b, b=a))
8888
itob
8989
swap
@@ -93,15 +93,15 @@ emit_native_swapped:
9393
swap
9494
concat
9595
log
96-
// arc_28/contract.py:23
96+
// arc_28/contract.py:29
9797
// @arc4.abimethod
9898
intc_1 // 1
9999
return
100100

101101

102102
// examples.arc_28.contract.EventEmitter.emit_ufixed[routing]() -> void:
103103
emit_ufixed:
104-
// arc_28/contract.py:27
104+
// arc_28/contract.py:33
105105
// @arc4.abimethod()
106106
txna ApplicationArgs 1
107107
dup
@@ -115,14 +115,14 @@ emit_ufixed:
115115
intc_0 // 8
116116
==
117117
assert // invalid number of bytes for arc4.ufixed64x2
118-
// arc_28/contract.py:33
118+
// arc_28/contract.py:39
119119
// arc4.emit("AnEvent(ufixed256x16,ufixed64x2)", a, b)
120120
concat
121121
pushbytes 0x7389b1ba // method "AnEvent(ufixed256x16,ufixed64x2)"
122122
swap
123123
concat
124124
log
125-
// arc_28/contract.py:27
125+
// arc_28/contract.py:33
126126
// @arc4.abimethod()
127127
intc_1 // 1
128128
return

examples/arc_28/out/EventEmitter.arc56.json

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -34,9 +34,11 @@
3434
},
3535
{
3636
"type": "uint64",
37-
"name": "b"
37+
"name": "b",
38+
"desc": "These are field docs for Swapped.b"
3839
}
39-
]
40+
],
41+
"desc": "This is a docstring for Swapped"
4042
},
4143
{
4244
"name": "Swapped",
@@ -82,13 +84,15 @@
8284
"args": [
8385
{
8486
"type": "uint64",
85-
"name": "a"
87+
"name": "a",
88+
"desc": "These are field docs for NativeSwapped.a"
8689
},
8790
{
8891
"type": "uint64",
8992
"name": "b"
9093
}
91-
]
94+
],
95+
"desc": "This is a docstring for NativeSwapped"
9296
}
9397
],
9498
"recommendations": {}
@@ -199,7 +203,7 @@
199203
}
200204
},
201205
"source": {
202-
"approval": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuYXBwcm92YWxfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIGludGNibG9jayA4IDEKICAgIC8vIGFyY18yOC9jb250cmFjdC5weToxNgogICAgLy8gY2xhc3MgRXZlbnRFbWl0dGVyKEFSQzRDb250cmFjdCk6CiAgICB0eG4gTnVtQXBwQXJncwogICAgYnogbWFpbl9fX2FsZ29weV9kZWZhdWx0X2NyZWF0ZUAxMAogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0CiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0CiAgICBwdXNoYnl0ZXNzIDB4MGE5NTQyY2QgMHg3OWM1YmEzMiAweDcxYTMxNTFmIC8vIG1ldGhvZCAiZW1pdF9zd2FwcGVkKHVpbnQ2NCx1aW50NjQpdm9pZCIsIG1ldGhvZCAiZW1pdF9uYXRpdmVfc3dhcHBlZCh1aW50NjQsdWludDY0KXZvaWQiLCBtZXRob2QgImVtaXRfdWZpeGVkKHVmaXhlZDI1NngxNix1Zml4ZWQ2NHgyKXZvaWQiCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBtYXRjaCBlbWl0X3N3YXBwZWQgZW1pdF9uYXRpdmVfc3dhcHBlZCBlbWl0X3VmaXhlZAogICAgZXJyCgptYWluX19fYWxnb3B5X2RlZmF1bHRfY3JlYXRlQDEwOgogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICEKICAgICYmCiAgICByZXR1cm4KCgovLyBleGFtcGxlcy5hcmNfMjguY29udHJhY3QuRXZlbnRFbWl0dGVyLmVtaXRfc3dhcHBlZFtyb3V0aW5nXSgpIC0+IHZvaWQ6CmVtaXRfc3dhcHBlZDoKICAgIC8vIGFyY18yOC9jb250cmFjdC5weToxNwogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18wIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18wIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICAvLyBhcmNfMjgvY29udHJhY3QucHk6MTkKICAgIC8vIGFyYzQuZW1pdChTd2FwcGVkKGIsIGEpKQogICAgc3dhcAogICAgY29uY2F0CiAgICBwdXNoYnl0ZXMgMHgxY2NiZDkyNSAvLyBtZXRob2QgIlN3YXBwZWQodWludDY0LHVpbnQ2NCkiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGR1cAogICAgbG9nCiAgICAvLyBhcmNfMjgvY29udHJhY3QucHk6MjAKICAgIC8vIGFyYzQuZW1pdCgiU3dhcHBlZCh1aW50NjQsdWludDY0KSIsIGIsIGEpCiAgICBkdXAKICAgIGxvZwogICAgLy8gYXJjXzI4L2NvbnRyYWN0LnB5OjIxCiAgICAvLyBhcmM0LmVtaXQoIlN3YXBwZWQiLCBiLCBhKQogICAgbG9nCiAgICAvLyBhcmNfMjgvY29udHJhY3QucHk6MTcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIGV4YW1wbGVzLmFyY18yOC5jb250cmFjdC5FdmVudEVtaXR0ZXIuZW1pdF9uYXRpdmVfc3dhcHBlZFtyb3V0aW5nXSgpIC0+IHZvaWQ6CmVtaXRfbmF0aXZlX3N3YXBwZWQ6CiAgICAvLyBhcmNfMjgvY29udHJhY3QucHk6MjMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMCAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBsZW4KICAgIGludGNfMCAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgLy8gYXJjXzI4L2NvbnRyYWN0LnB5OjI1CiAgICAvLyBhcmM0LmVtaXQoTmF0aXZlU3dhcHBlZChhPWIsIGI9YSkpCiAgICBpdG9iCiAgICBzd2FwCiAgICBpdG9iCiAgICBjb25jYXQKICAgIHB1c2hieXRlcyAweDliN2FkODU1IC8vIG1ldGhvZCAiTmF0aXZlU3dhcHBlZCh1aW50NjQsdWludDY0KSIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICAvLyBhcmNfMjgvY29udHJhY3QucHk6MjMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIGV4YW1wbGVzLmFyY18yOC5jb250cmFjdC5FdmVudEVtaXR0ZXIuZW1pdF91Zml4ZWRbcm91dGluZ10oKSAtPiB2b2lkOgplbWl0X3VmaXhlZDoKICAgIC8vIGFyY18yOC9jb250cmFjdC5weToyNwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBwdXNoaW50IDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVmaXhlZDI1NngxNgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBsZW4KICAgIGludGNfMCAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVmaXhlZDY0eDIKICAgIC8vIGFyY18yOC9jb250cmFjdC5weTozMwogICAgLy8gYXJjNC5lbWl0KCJBbkV2ZW50KHVmaXhlZDI1NngxNix1Zml4ZWQ2NHgyKSIsIGEsIGIpCiAgICBjb25jYXQKICAgIHB1c2hieXRlcyAweDczODliMWJhIC8vIG1ldGhvZCAiQW5FdmVudCh1Zml4ZWQyNTZ4MTYsdWZpeGVkNjR4MikiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgLy8gYXJjXzI4L2NvbnRyYWN0LnB5OjI3CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgo=",
206+
"approval": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuYXBwcm92YWxfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIGludGNibG9jayA4IDEKICAgIC8vIGFyY18yOC9jb250cmFjdC5weToyMgogICAgLy8gY2xhc3MgRXZlbnRFbWl0dGVyKEFSQzRDb250cmFjdCk6CiAgICB0eG4gTnVtQXBwQXJncwogICAgYnogbWFpbl9fX2FsZ29weV9kZWZhdWx0X2NyZWF0ZUAxMAogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0CiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0CiAgICBwdXNoYnl0ZXNzIDB4MGE5NTQyY2QgMHg3OWM1YmEzMiAweDcxYTMxNTFmIC8vIG1ldGhvZCAiZW1pdF9zd2FwcGVkKHVpbnQ2NCx1aW50NjQpdm9pZCIsIG1ldGhvZCAiZW1pdF9uYXRpdmVfc3dhcHBlZCh1aW50NjQsdWludDY0KXZvaWQiLCBtZXRob2QgImVtaXRfdWZpeGVkKHVmaXhlZDI1NngxNix1Zml4ZWQ2NHgyKXZvaWQiCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBtYXRjaCBlbWl0X3N3YXBwZWQgZW1pdF9uYXRpdmVfc3dhcHBlZCBlbWl0X3VmaXhlZAogICAgZXJyCgptYWluX19fYWxnb3B5X2RlZmF1bHRfY3JlYXRlQDEwOgogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICEKICAgICYmCiAgICByZXR1cm4KCgovLyBleGFtcGxlcy5hcmNfMjguY29udHJhY3QuRXZlbnRFbWl0dGVyLmVtaXRfc3dhcHBlZFtyb3V0aW5nXSgpIC0+IHZvaWQ6CmVtaXRfc3dhcHBlZDoKICAgIC8vIGFyY18yOC9jb250cmFjdC5weToyMwogICAgLy8gQGFyYzQuYWJpbWV0aG9kCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18wIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18wIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICAvLyBhcmNfMjgvY29udHJhY3QucHk6MjUKICAgIC8vIGFyYzQuZW1pdChTd2FwcGVkKGIsIGEpKQogICAgc3dhcAogICAgY29uY2F0CiAgICBwdXNoYnl0ZXMgMHgxY2NiZDkyNSAvLyBtZXRob2QgIlN3YXBwZWQodWludDY0LHVpbnQ2NCkiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGR1cAogICAgbG9nCiAgICAvLyBhcmNfMjgvY29udHJhY3QucHk6MjYKICAgIC8vIGFyYzQuZW1pdCgiU3dhcHBlZCh1aW50NjQsdWludDY0KSIsIGIsIGEpCiAgICBkdXAKICAgIGxvZwogICAgLy8gYXJjXzI4L2NvbnRyYWN0LnB5OjI3CiAgICAvLyBhcmM0LmVtaXQoIlN3YXBwZWQiLCBiLCBhKQogICAgbG9nCiAgICAvLyBhcmNfMjgvY29udHJhY3QucHk6MjMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIGV4YW1wbGVzLmFyY18yOC5jb250cmFjdC5FdmVudEVtaXR0ZXIuZW1pdF9uYXRpdmVfc3dhcHBlZFtyb3V0aW5nXSgpIC0+IHZvaWQ6CmVtaXRfbmF0aXZlX3N3YXBwZWQ6CiAgICAvLyBhcmNfMjgvY29udHJhY3QucHk6MjkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMCAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBsZW4KICAgIGludGNfMCAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgLy8gYXJjXzI4L2NvbnRyYWN0LnB5OjMxCiAgICAvLyBhcmM0LmVtaXQoTmF0aXZlU3dhcHBlZChhPWIsIGI9YSkpCiAgICBpdG9iCiAgICBzd2FwCiAgICBpdG9iCiAgICBjb25jYXQKICAgIHB1c2hieXRlcyAweDliN2FkODU1IC8vIG1ldGhvZCAiTmF0aXZlU3dhcHBlZCh1aW50NjQsdWludDY0KSIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICAvLyBhcmNfMjgvY29udHJhY3QucHk6MjkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZAogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIGV4YW1wbGVzLmFyY18yOC5jb250cmFjdC5FdmVudEVtaXR0ZXIuZW1pdF91Zml4ZWRbcm91dGluZ10oKSAtPiB2b2lkOgplbWl0X3VmaXhlZDoKICAgIC8vIGFyY18yOC9jb250cmFjdC5weTozMwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBwdXNoaW50IDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVmaXhlZDI1NngxNgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBsZW4KICAgIGludGNfMCAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVmaXhlZDY0eDIKICAgIC8vIGFyY18yOC9jb250cmFjdC5weTozOQogICAgLy8gYXJjNC5lbWl0KCJBbkV2ZW50KHVmaXhlZDI1NngxNix1Zml4ZWQ2NHgyKSIsIGEsIGIpCiAgICBjb25jYXQKICAgIHB1c2hieXRlcyAweDczODliMWJhIC8vIG1ldGhvZCAiQW5FdmVudCh1Zml4ZWQyNTZ4MTYsdWZpeGVkNjR4MikiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgLy8gYXJjXzI4L2NvbnRyYWN0LnB5OjMzCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgo=",
203207
"clear": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBhbGdvcHkuYXJjNC5BUkM0Q29udHJhY3QuY2xlYXJfc3RhdGVfcHJvZ3JhbSgpIC0+IHVpbnQ2NDoKbWFpbjoKICAgIHB1c2hpbnQgMQogICAgcmV0dXJuCg=="
204208
},
205209
"byteCode": {
@@ -224,9 +228,11 @@
224228
},
225229
{
226230
"type": "uint64",
227-
"name": "b"
231+
"name": "b",
232+
"desc": "These are field docs for Swapped.b"
228233
}
229-
]
234+
],
235+
"desc": "This is a docstring for Swapped"
230236
},
231237
{
232238
"name": "Swapped",
@@ -246,13 +252,15 @@
246252
"args": [
247253
{
248254
"type": "uint64",
249-
"name": "a"
255+
"name": "a",
256+
"desc": "These are field docs for NativeSwapped.a"
250257
},
251258
{
252259
"type": "uint64",
253260
"name": "b"
254261
}
255-
]
262+
],
263+
"desc": "This is a docstring for NativeSwapped"
256264
},
257265
{
258266
"name": "AnEvent",

examples/arc_28/out/EventEmitter.ir/EventEmitter.approval.000.ssa.ir

Lines changed: 16 additions & 16 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)