XRPLF / xrpl-py

A Python library to interact with the XRP Ledger (XRPL) blockchain
ISC License
151 stars 86 forks source link

dev: add definitions.json generation script #772

Open mvadari opened 1 week ago

mvadari commented 1 week ago

High Level Overview of Change

This PR adds a script to generate the definitions.json file from rippled source code.

Context of Change

Copied (and modified) from https://github.com/RichardAH/xrpl-codec-gen. It makes more sense to store this script in the library repo now.

Type of Change

Did you update HISTORY.md?

Test Plan

Works locally.

coderabbitai[bot] commented 1 week ago

Walkthrough

The changes include the addition of a new script, generate_definitions.py, which generates a definitions.json file from the source code of the rippled project. This script reads protocol-related headers and macro files, processes their contents, and outputs structured JSON data. Additionally, the definitions.json file has undergone significant modifications, with new entries added and several existing entries removed or retained across various sections, including TYPES, LEDGER_ENTRY_TYPES, FIELDS, TRANSACTION_RESULTS, and TRANSACTION_TYPES. Furthermore, updates were made to the generate_tx_models.py script, changing the source files for SFields and TxFormats, and modifying the type mapping.

Changes

File Change Summary
tools/generate_definitions.py New script created to generate definitions.json. It reads protocol-related files, processes data, and outputs structured JSON. Includes functions for reading files, translating formats, and extracting type information.
xrpl/core/binarycodec/definitions/definitions.json Modifications to definitions.json: new entries added in LEDGER_ENTRY_TYPES, several entries removed, and others retained. Changes also include removals in TRANSACTION_RESULTS and TRANSACTION_TYPES.
tools/generate_tx_models.py Significant modifications to _parse_rippled_source function to read SFields and TxFormats from new source files. Updated regex patterns and added new entry "UINT192": "str" to TYPE_MAP.

Poem

In the meadow, scripts do play,
Generating definitions, hip-hip-hooray!
New types hop in, old ones take flight,
JSON dances, oh what a sight!
With every change, we leap and bound,
In the world of code, joy is found! 🐇✨


📜 Recent review details **Configuration used: .coderabbit.yaml** **Review profile: CHILL**
📥 Commits Reviewing files that changed from the base of the PR and between 906cb050f2479d9b1d462e112d8efce8b2ee3681 and 4474908756beb9dfcfa9a3500f3077ed5f58c930.
📒 Files selected for processing (1) * `tools/generate_tx_models.py` (2 hunks)
🔇 Additional comments (4)
tools/generate_tx_models.py (4) `29-31`: **Update to source file path for SFields** The source file for SFields has been updated to `include/xrpl/protocol/detail/sfields.macro`, which aligns with the new directory structure of the `rippled` project. --- `63-63`: **Added `UINT192` to `TYPE_MAP`** The inclusion of `"UINT192": "str"` in `TYPE_MAP` is appropriate, expanding the mapping to support `UINT192` types. Ensure that any fields of this type are correctly handled elsewhere in the codebase. --- `42-47`: **Verify that the updated regex pattern correctly parses TxFormats** The regex pattern for extracting TxFormats has been updated to match the new structure in `transactions.macro`. Ensure that the pattern accurately captures all transaction definitions, including any new or complex transaction types. Run the following script to test the regex pattern against `transactions.macro`: --- `33-34`: **Verify that the updated regex pattern correctly parses SFields** The regex pattern for extracting SFields has been modified to accommodate the new format in `sfields.macro`. Please verify that the pattern accurately captures all necessary fields, including any edge cases or variations in formatting. Run the following script to test the regex pattern against `sfields.macro`:

Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media?

❤️ Share - [X](https://twitter.com/intent/tweet?text=I%20just%20used%20%40coderabbitai%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20the%20proprietary%20code.%20Check%20it%20out%3A&url=https%3A//coderabbit.ai) - [Mastodon](https://mastodon.social/share?text=I%20just%20used%20%40coderabbitai%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20the%20proprietary%20code.%20Check%20it%20out%3A%20https%3A%2F%2Fcoderabbit.ai) - [Reddit](https://www.reddit.com/submit?title=Great%20tool%20for%20code%20review%20-%20CodeRabbit&text=I%20just%20used%20CodeRabbit%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20proprietary%20code.%20Check%20it%20out%3A%20https%3A//coderabbit.ai) - [LinkedIn](https://www.linkedin.com/sharing/share-offsite/?url=https%3A%2F%2Fcoderabbit.ai&mini=true&title=Great%20tool%20for%20code%20review%20-%20CodeRabbit&summary=I%20just%20used%20CodeRabbit%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20proprietary%20code)
🪧 Tips ### Chat There are 3 ways to chat with [CodeRabbit](https://coderabbit.ai): - Review comments: Directly reply to a review comment made by CodeRabbit. Example: - `I pushed a fix in commit , please review it.` - `Generate unit testing code for this file.` - `Open a follow-up GitHub issue for this discussion.` - Files and specific lines of code (under the "Files changed" tab): Tag `@coderabbitai` in a new review comment at the desired location with your query. Examples: - `@coderabbitai generate unit testing code for this file.` - `@coderabbitai modularize this function.` - PR comments: Tag `@coderabbitai` in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples: - `@coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.` - `@coderabbitai read src/utils.ts and generate unit testing code.` - `@coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.` - `@coderabbitai help me debug CodeRabbit configuration file.` Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments. ### CodeRabbit Commands (Invoked using PR comments) - `@coderabbitai pause` to pause the reviews on a PR. - `@coderabbitai resume` to resume the paused reviews. - `@coderabbitai review` to trigger an incremental review. This is useful when automatic reviews are disabled for the repository. - `@coderabbitai full review` to do a full review from scratch and review all the files again. - `@coderabbitai summary` to regenerate the summary of the PR. - `@coderabbitai resolve` resolve all the CodeRabbit review comments. - `@coderabbitai configuration` to show the current CodeRabbit configuration for the repository. - `@coderabbitai help` to get help. ### Other keywords and placeholders - Add `@coderabbitai ignore` anywhere in the PR description to prevent this PR from being reviewed. - Add `@coderabbitai summary` to generate the high-level summary at a specific location in the PR description. - Add `@coderabbitai` anywhere in the PR title to generate the title automatically. ### Documentation and Community - Visit our [Documentation](https://docs.coderabbit.ai) for detailed information on how to use CodeRabbit. - Join our [Discord Community](http://discord.gg/coderabbit) to get help, request features, and share feedback. - Follow us on [X/Twitter](https://twitter.com/coderabbitai) for updates and announcements.