Pre-defined Filters

What are pre-defined filters?

Plugins can ship pre-defined filters — named regex patterns that match common categories of messages. For example, a Vivado plugin might define filters for timing, drc, and synth message categories.

Each filter has:

  • id — unique identifier (used with --category).

  • name — human-readable display name.

  • pattern — a regular expression.

  • description — what the filter matches.

Listing filters

Use --show-info to see what filters a plugin provides:

$ sawmill --show-info --plugin vivado

The output includes a table of all filters with their IDs, names, and descriptions.

Using filters

Activate a pre-defined filter with --category:

$ sawmill build.log --category timing
$ sawmill build.log --category drc --category synth

Multiple --category flags can be combined. Messages matching any of the selected categories are included.

Pre-defined filters compose with other filters:

$ sawmill build.log --category timing --severity warning

This shows only warning-level (and above) messages that match the timing category.

Worked example

Suppose a plugin defines these filters:

@hookimpl
def get_filters(self):
    return [
        FilterDefinition(
            id="timing",
            name="Timing",
            pattern=r"\[Timing \d+-\d+\]",
            source="plugin:example",
            description="Timing analysis messages",
        ),
        FilterDefinition(
            id="drc",
            name="Design Rule Checks",
            pattern=r"\[DRC ",
            source="plugin:example",
            description="Design rule check messages",
        ),
    ]

A user can then run:

$ sawmill build.log --category timing

to see only messages whose content matches \[Timing \d+-\d+\].