Skip to main content

A comprehensive Rust project analyzer for Solana development with multi-platform support

Project description

Solana Analyzer

用于分析 Solana/Rust 项目的 Python 包(已发布至 PyPI),封装了对定制版 rust-analyzer 的调用,提供符号查找、结构体提取与调用图分析三大能力。

功能特性

  • 符号查找: 在 Rust 项目中查找特定符号(函数、结构体等)
  • 结构体分析: 提取合约结构体、常量、Program ID(返回汇总信息)
  • 调用图分析: 生成函数调用关系图并输出为 JSON 文件
  • 多种使用方式: 支持 Python API 与命令行工具

安装

方式 A:通过 PyPI(推荐,自动构建)

pip install solana-fcg-tool
  • 当前版本:1.0.3
  • 项目主页:https://pypi.org/project/solana-fcg-tool/1.0.3/

新特性:从 v1.0.1 开始,pip install 会自动检测并安装 Rust 环境,然后构建定制版 rust-analyzer 二进制。无需手动配置!

自动安装流程

  1. 检测系统是否已安装 Rust/Cargo
  2. 如未安装,自动下载并安装 Rust(Unix/Linux/macOS)
  3. 自动构建定制版 rust-analyzer 二进制
  4. 将二进制文件集成到 Python 包中

系统要求

  • macOS/Linux: 支持自动安装 Rust 和构建
  • Windows: 需要手动安装 Rust(见下方说明)
  • 网络连接: 首次安装需要下载 Rust 工具链

Windows 用户: 如果您使用 Windows,请先手动安装 Rust:

  1. 访问 https://rustup.rs/
  2. 下载并运行 rustup-init.exe
  3. 重启终端后再运行 pip install solana-fcg-tool

方式 B:本地开发模式

pip install -e .

二进制依赖(重要)

本工具需要一个包含自定义子命令的 rust-analyzer 可执行文件。你可以:

  1. 在本仓库根目录构建二进制
cargo build --release
# 生成的二进制位于:target/release/rust-analyzer
  1. 让工具能找到该二进制(任选其一):
  • 放到 PATH 中,例如:cp target/release/rust-analyzer ~/.local/bin/(或 /usr/local/bin/
  • 放到包目录:
    python - <<'PY'
    import solana_fcg_tool, pathlib
    p = pathlib.Path(solana_fcg_tool.__file__).parent / 'bin'
    p.mkdir(exist_ok=True)
    print(p)
    PY
    # 将上一步打印的路径替换到下面命令
    cp target/release/rust-analyzer <打印出的路径>/rust-analyzer
    
  • 直接位于本仓库 target/release/rust-analyzer(开发模式下会自动发现)

提示:若使用系统 PATH 的 rust-analyzer,请确保该二进制就是本仓库构建出的定制版;官方发布版没有本工具需要的子命令。

快速开始

命令行(安装后提供 solana-fcg-tool 命令)

# 查找符号(逐行 JSON 输出)
solana-fcg-tool source-finder main /path/to/project

# 结构体分析(输出汇总信息到控制台)
solana-fcg-tool struct-analyzer /path/to/project

# 调用图分析(会在包目录 output 下生成 <project>_call_graph.json)
solana-fcg-tool call-graph /path/to/project

Python API

from solana_fcg_tool import SolanaAnalyzer

# 创建分析器实例
analyzer = SolanaAnalyzer("/path/to/your/rust/project")

# 符号查找:返回“多行 JSON 文本”(每行一个 JSON 对象)
symbols_text = analyzer.find_symbols("main")
print(symbols_text)

# 结构体分析:返回汇总字典(数量统计 + 文本摘要)
structs_summary = analyzer.analyze_structs()
print(structs_summary)

# 调用图分析:在包目录 output 中生成 <project>_call_graph.json
call_graph_info = analyzer.analyze_call_graph()
print(call_graph_info)

便捷函数

from solana_fcg_tool import find_symbols, analyze_structs, analyze_call_graph

symbols_text = find_symbols("/path/to/project", "main")
structs_summary = analyze_structs("/path/to/project")
call_graph_info = analyze_call_graph("/path/to/project")

输出说明

  • source-finder:标准输出为“逐行 JSON”,每行一个独立对象,表示一个符号命中;请按行解析。
  • struct-analyzer:当前返回汇总信息(结构体/常量/ProgramID 数量与摘要),用于快速评估工程特征。
  • call-graph:会在包目录 solana_fcg_tool/output/ 下生成 <project>_call_graph.json,包含函数到被调函数的映射关系。

示例

仓库内置示例工程,可直接运行:

python example_usage.py

# 或者使用 CLI 对示例工程分析
solana-fcg-tool call-graph ./2025-01-pump-science

项目结构(简要)

├── solana_fcg_tool/          # Python 包源码与 CLI
│   ├── __init__.py           # API 导出(SolanaAnalyzer 及便捷函数)
│   ├── cli.py                # 命令行入口(console_script: solana-fcg-tool)
│   ├── interface.py          # 统一封装,查找并调用 rust-analyzer
│   └── output/               # 调用图 JSON 输出目录
├── crates/                   # 定制 rust-analyzer 源码(含子命令)
└── example_usage.py          # 使用示例

版本与依赖

  • Python: >= 3.8
  • Rust/Cargo: 构建定制版 rust-analyzer 必需
  • rust-analyzer(定制版): 含 source-finder/function-analyzer 子命令

故障排除(FAQ)

  1. 找不到 rust-analyzer 或提示无子命令
    • 请使用本仓库 cargo build --release 构建的定制版,并放入 PATH 或包目录 bin/
    • 官方 rust-analyzer 不包含所需子命令
  2. 提示“不是 Rust 工程”
    • 传入的路径需包含 Cargo.toml
  3. 调用图分析失败
    • 检查二进制路径与权限:chmod +x target/release/rust-analyzer
    • 尝试在仓库根目录重新构建
  4. Python 包已安装但 CLI 不可用
    • 确认 solana-fcg-tool 在 PATH 中:which solana-fcg-tool

许可证

MIT License

贡献

欢迎提交 Issue 和 Pull Request!

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

solana_fcg_tool-1.0.3.tar.gz (80.5 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

solana_fcg_tool-1.0.3-py3-none-any.whl (78.9 MB view details)

Uploaded Python 3

File details

Details for the file solana_fcg_tool-1.0.3.tar.gz.

File metadata

  • Download URL: solana_fcg_tool-1.0.3.tar.gz
  • Upload date:
  • Size: 80.5 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for solana_fcg_tool-1.0.3.tar.gz
Algorithm Hash digest
SHA256 c8bd199f6e7f2c9a25509ec67546624555891d140cf8d68e4e517859a48a6ea6
MD5 81d70549bfa0dba9e1e7d0ab74ea6afa
BLAKE2b-256 54927c88e9c02faa829d62ed1af384c7cbce188ac84c92293be4da22c73998f3

See more details on using hashes here.

File details

Details for the file solana_fcg_tool-1.0.3-py3-none-any.whl.

File metadata

File hashes

Hashes for solana_fcg_tool-1.0.3-py3-none-any.whl
Algorithm Hash digest
SHA256 c2c0382350291c52af462d4d829bf8aeed280fa51a32ad8459ae7e6e0ffaf3bf
MD5 087707a5b335b61655a0c0645a9fdc3e
BLAKE2b-256 f736b2f38b1c6ef0b84b59cd5acb81cec6a766390dd7e3412c06fd58c5dcd90c

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page