Metadata-Version: 2.4
Name: rdlfmt
Version: 0.2.0
Classifier: Development Status :: 4 - Beta
Classifier: Environment :: Console
Classifier: Intended Audience :: Developers
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Rust
Classifier: Topic :: Scientific/Engineering :: Electronic Design Automation (EDA)
Classifier: Topic :: Software Development :: Quality Assurance
License-File: LICENSE-MIT
License-File: LICENSE-APACHE
Summary: A formatter for SystemRDL
Keywords: systemrdl,formatter,eda,registers,csr
Home-Page: https://fischeti.github.io/rdlfmt/
License-Expression: MIT OR Apache-2.0
Requires-Python: >=3.8
Description-Content-Type: text/markdown; charset=UTF-8; variant=GFM
Project-URL: Documentation, https://fischeti.github.io/rdlfmt
Project-URL: Homepage, https://fischeti.github.io/rdlfmt
Project-URL: Issues, https://github.com/fischeti/rdlfmt/issues
Project-URL: Repository, https://github.com/fischeti/rdlfmt

# rdlfmt

A formatter for [SystemRDL](https://www.accellera.org/downloads/standards/systemrdl) 2.0,
following the [PeakRDL style guide](https://peakrdl.readthedocs.io/en/latest/style-guide.html).

**[Documentation](https://fischeti.github.io/rdlfmt/)**

Before:

```systemrdl
addrmap top{
  reg {
      field{sw=rw;
    hw=r;} data[31:0];   // payload
  }ctrl @0x0;


  reg{field{sw=r;hw=w;}status[7:0];}stat@0x4;
};
```

After:

```systemrdl
addrmap top {
    reg {
        field {
            sw = rw;
            hw = r;
        } data[31:0]; // payload
    } ctrl @ 0x0;

    reg {
        field {
            sw = r; hw = w;
        } status[7:0];
    } stat @ 0x4;
};
```

Line breaks *between* statements are yours — note that the first register's
properties stay split and the second's stay joined. There is nothing to
configure, deliberately. See
[What it does](https://fischeti.github.io/rdlfmt/style.html).

## Install

A prebuilt binary, needing no toolchain of any kind:

```bash
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/fischeti/rdlfmt/releases/latest/download/rdlfmt-installer.sh | sh
```

Or, if you already manage `peakrdl` with a Python tool:

```bash
uv tool install rdlfmt
```

Installed alongside [PeakRDL](https://peakrdl.readthedocs.io), the same wheel
registers a `peakrdl fmt` subcommand. `cargo install rdlfmt` works too. See
[Installation](https://fischeti.github.io/rdlfmt/installation.html) for
Windows, PyPI and building from source.

## Usage

```bash
rdlfmt regs.rdl     # rewrite in place -- the default
rdlfmt .            # every .rdl file in the tree
rdlfmt --check .    # exit 1 if anything is unformatted; the one for CI
rdlfmt --diff .     # ...and show what would change
rdlfmt -            # filter stdin to stdout
```

That last one is what editors want:
[Editor integration](https://fischeti.github.io/rdlfmt/editors.html) has
format-on-save recipes for Neovim, Vim, VS Code, Zed, Helix and Emacs. Full
command line in [Usage](https://fischeti.github.io/rdlfmt/usage.html).

## Library

The formatter is also a library:

```rust
let formatted = rdlfmt::format(source)?;
```

`rdlfmt::syntax` exposes the lexer and the lossless CST underneath. API docs on
[docs.rs](https://docs.rs/rdlfmt).

## License

Dual-licensed under either of

- Apache License, Version 2.0 ([LICENSE-APACHE](LICENSE-APACHE))
- MIT license ([LICENSE-MIT](LICENSE-MIT))

at your option.

