Metadata-Version: 2.5
Name: sawmill-parser
Version: 0.6.3
Summary: A configurable TUI for post-processing and filtering structured tool logs
Project-URL: Homepage, https://github.com/sjalloq/sawmill
Project-URL: Documentation, https://sjalloq.github.io/sawmill
Project-URL: Repository, https://github.com/sjalloq/sawmill
Author: Sawmill Contributors
License: MIT
Keywords: eda,filter,log,terminal,tui
Classifier: Development Status :: 3 - Alpha
Classifier: Environment :: Console
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Topic :: Utilities
Requires-Python: >=3.10
Requires-Dist: pathspec>=0.12
Requires-Dist: pluggy>=1.3.0
Requires-Dist: pydantic>=2.0.0
Requires-Dist: rich-click>=1.7.0
Requires-Dist: rich>=13.0.0
Requires-Dist: textual>=0.40.0
Requires-Dist: tomli-w>=1.0.0
Requires-Dist: tomli>=2.0.0
Requires-Dist: tomlkit>=0.12
Provides-Extra: dev
Requires-Dist: mypy>=1.0.0; extra == 'dev'
Requires-Dist: pre-commit>=3.0.0; extra == 'dev'
Requires-Dist: pytest-asyncio>=0.21.0; extra == 'dev'
Requires-Dist: pytest-cov>=4.0.0; extra == 'dev'
Requires-Dist: pytest>=7.0.0; extra == 'dev'
Requires-Dist: ruff>=0.4.0; extra == 'dev'
Requires-Dist: sawmill-plugin-slang; extra == 'dev'
Requires-Dist: sawmill-plugin-vivado; extra == 'dev'
Provides-Extra: docs
Requires-Dist: furo; extra == 'docs'
Requires-Dist: sphinx; extra == 'docs'
Requires-Dist: sphinx-autodoc-typehints; extra == 'docs'
Requires-Dist: sphinx-copybutton; extra == 'docs'
Description-Content-Type: text/markdown

<p align="center">
  <img src="assets/sawmill.png" alt="Sawmill - Cutting through the noise" width="600">
</p>

<h1 align="center">Sawmill</h1>

<p align="center">
  <strong>A plugin-driven terminal log analyser</strong>
</p>

Sawmill filters, groups and waives messages from structured tool logs such as
Vivado and Slang output. A batch CLI gates CI pipelines on log
content; a terminal UI handles interactive triage. Plugins own the parsing,
so any log format can be supported.

## Install

```bash
uv tool install sawmill-parser sawmill-plugin-vivado
```

Or from a clone:

```bash
source sourceme     # creates .venv with uv and installs dev extras
```

## Usage

```bash
sawmill vivado.log                              # open one log in the TUI
sawmill init                                    # create .sawmill/manifest.toml
sawmill init --target pnr 'build/pnr/*.log'     # add a target
sawmill view                                    # TUI over every target
sawmill check --report build/report.json        # CI gate: exit 1 on unwaived failures
sawmill report --format junit -o build/sawmill.xml
sawmill rules unused                            # rules that matched nothing
sawmill plugins list
```

Targets and rules live in a checked-in `.sawmill/` directory: a
`manifest.toml` naming the targets (plugin plus log globs) and rule files
under `.sawmill/rules/` that waive expected messages.

Full documentation, including the manifest and rule formats, CLI reference,
TUI guide, CI integration and plugin authoring, is at
https://sjalloq.github.io/sawmill.

## Plugins

| Plugin | Repository |
|--------|------------|
| `vivado` | https://github.com/sjalloq/sawmill-plugin-vivado |
| `slang` | https://github.com/sjalloq/sawmill-plugin-slang |

Plugins register through the `sawmill.plugins` entry point and are
auto-detected from log content. `tools/sawmill-plugin-generator` scaffolds a
new one.

## Development

```bash
source sourceme
pytest tests/ -v
pre-commit run --all-files
```

## License

MIT
