Search for struct(with #[near_bindgen]), return name and member list
(filename, only_near_bindgen=False)
| 313 | |
| 314 | |
| 315 | def findStruct(filename, only_near_bindgen=False) -> list: |
| 316 | """Search for struct(with #[near_bindgen]), return name and member list""" |
| 317 | line_number = 0 |
| 318 | results = [] |
| 319 | with open(filename, "r") as file: |
| 320 | # print(re.sub('//.+\n', '', file.read())) |
| 321 | struct_pat = (r"(#\[near_bindgen\]\s*)" if only_near_bindgen else "") + r"(#\[[^\]]+\]\s*)*pub\s+struct\s+(?P<name>\w+)\s*(?P<trait><[^>]+>)?\s*\{(?P<members>[^\}]+)\}" |
| 322 | member_pat = r"(?P<name>\w+)\s*:\s*(?P<type>.+)\s*," |
| 323 | st_matches = re.compile(struct_pat, re.MULTILINE | re.DOTALL) |
| 324 | for struct in st_matches.finditer(re.sub(r"/\*.+\*/", "", re.sub("//.+\n", "\n", file.read()))): # remove comment |
| 325 | members = [] |
| 326 | for member in re.findall(member_pat, struct.groupdict()["members"]): |
| 327 | members.append({"name": member[0], "type": member[1]}) |
| 328 | results.append({"name": struct.groupdict()["name"], "members": members, "file": filename}) |
| 329 | # print(results) |
| 330 | return results |
| 331 | |
| 332 | |
| 333 | def findCallbackFunc(filename) -> set: |