返回 Skill 列表
extension
分类: 开发与工程无需 API Key

cargo-log-parser

解析和过滤cargo构建日志,以基于正则表达式的过滤方式提取错误、警告和诊断信息。在调试Rust项目、分析cargo构建输出、按文件路径或消息模式过滤错误,或帮助用户理解编译失败时使用。触发条件包括cargo构建错误、rustc诊断信息、Rust编译问题,或是请求解析来自cargo的.log文件。

person作者: jakexiaohubgithub

Cargo Log Parser

Parse cargo build logs to extract and filter errors/warnings with precise log boundaries.

Quick Start

# From file
python scripts/cargo_log_parser.py build.log --errors

# From stdin (pipe from cargo)
cargo build 2>&1 | python scripts/cargo_log_parser.py --errors

Key Filters

| Flag | Purpose | Example | |------|---------|---------| | -e, --errors | Errors only | --errors | | -w, --warnings | Warnings only | --warnings | | -f, --file PATTERN | Filter by file path regex | --file "tests/.*" | | -m, --message PATTERN | Filter by message regex | --message "cannot find" | | -c, --code PATTERN | Filter by error code | --code "E0425" |

Output Modes

| Flag | Output Style | |------|--------------| | (default) | Detailed LLM-friendly format with context | | --stream | Compact one-line-per-diagnostic | | --raw | Original log text for matches only | | --json | Structured JSON output | | -v, --verbose | Include raw log text in output |

Common Patterns

# Errors in test files only
python scripts/cargo_log_parser.py build.log --errors --file "tests/.*"

# Find "not found" errors
python scripts/cargo_log_parser.py build.log --errors --message "cannot find|not found"

# All E04xx errors (name resolution)
python scripts/cargo_log_parser.py build.log --code "E04\d\d"

# Group errors by file
python scripts/cargo_log_parser.py build.log --errors --group-by-file

# Group by error code
python scripts/cargo_log_parser.py build.log --errors --group-by-code

# Quick summary
python scripts/cargo_log_parser.py build.log --summary

Python API

from cargo_log_parser import CargoLogParser, LogQuery, DiagnosticLevel

parser = CargoLogParser()
parsed = parser.parse_file("build.log")
query = LogQuery(parsed)

# Filter errors
errors = query.find_errors(file_pattern=r"tests/.*", message_pattern=r"cannot find")

# Get exact log boundaries
for error in errors:
    bounds = query.get_error_boundaries(error)
    print(f"Lines {bounds['line_start']}-{bounds['line_end']}")
    print(bounds['raw_text'])

# Group and analyze
by_file = query.group_by_file(level=DiagnosticLevel.ERROR)
by_code = query.group_by_code()

Regex Reference

| Pattern | Matches | |---------|---------| | tests/.* | Test files | | src/.* | Source files | | .*/mod\.rs | Any mod.rs | | E03\d\d | Borrow checker errors | | E04\d\d | Name resolution errors | | unused_.* | Unused warnings |