TidyLint feature guide

What each rule looks for, how a fix chooses what to bind, and how the cleanup report works.

Scope

  • Name
    Selection
    Type
    free
    Description

    The selected layers and everything inside them.

  • Name
    Current page
    Type
    free
    Description

    Every layer on the page you are looking at.

  • Name
    All pages
    Type
    Pro
    Description

    Every page in the file. TidyLint loads all pages, walks them in chunks of 300 layers and gives Figma a moment between chunks, so the editor stays responsive. The status bar shows the page and layer count, and Cancel stops the scan and keeps what was found so far.

Layers inside an instance are skipped: they belong to the main component, so lint the component instead. Nothing inside a hidden layer is linted either.

The rules

  • Name
    Unbound fills
    Type
    fixable
    Description

    A visible solid fill with no paint style and no color variable. Gradient and image fills are not flagged. Instances, sections and component sets are skipped.

  • Name
    Unbound strokes
    Type
    fixable
    Description

    The same check for strokes.

  • Name
    Text without a style
    Type
    fixable
    Description

    A text layer with no text style. Layers that mix several fonts or sizes are listed but cannot be fixed automatically.

  • Name
    Effects without a style
    Type
    fixable
    Description

    A layer with visible effects, no effect style and no variables bound to its effects.

  • Name
    Unbound corner radius
    Type
    fixable
    Description

    A corner radius above 0 with no number variable bound to it. This rule only runs when the file has local number variables, so files without them are not flooded with results.

  • Name
    Detached instances
    Type
    report
    Description

    A frame that Figma marks as detached from a component, or a frame named exactly like a local component or component set.

  • Name
    Hidden layers
    Type
    report
    Description

    Any hidden layer. Its children are not checked.

  • Name
    Empty frames and groups
    Type
    report
    Description

    A frame or group with no children.

  • Name
    Default names
    Type
    report
    Description

    Names Figma generates, such as "Frame 123", "Rectangle 4", "Group", "Vector", "Ellipse 2" or "Union". Names like "Frame 12 copy" or "Hero Frame" are not flagged.

  • Name
    Mixed text styles
    Type
    report
    Description

    A text layer that uses several text styles, or several fonts or sizes.

Working with results

Results are grouped by rule in the order above, each group with a count. Click a group header to show or hide its layers; long groups show 100 rows at a time. Click a row to select the layer and zoom to it, switching page if needed. Select all selects every layer in the group that sits on the same page as the first one, and the status bar tells you how many are on other pages.

How fixes choose a match

  • Name
    Fills and strokes
    Type
    OKLab
    Description

    TidyLint compares the color with every local paint style that holds one solid color and every local color variable, measured as distance in OKLab, a color space where equal distances look equally different. The distance is scaled so that 1 is about the smallest difference you can see. The closest match within the Color match tolerance wins, and a variable wins a tie with a style. Opacity counts as part of the color. Variables are read in their collection's default mode, and their scopes are respected, so a variable scoped to strokes is never used for a fill. A layer with one fill can take a paint style or a variable; a layer with several fills is bound paint by paint to variables.

  • Name
    Text
    Type
    family, size, weight
    Description

    The local text style with the same font family, the same size and the same weight, with italic matching italic. "Bold" and "700" count as the same weight. When several styles qualify, the one with the exact style name and the same line height wins.

  • Name
    Effects
    Type
    identical
    Description

    The local effect style whose effects are identical: type, color, offset, radius, spread and blend mode.

  • Name
    Corner radius
    Type
    exact value
    Description

    A local number variable whose value equals the radius and that is scoped to corner radius. It is bound to all four corners. Layers with different radii per corner are not fixed automatically.

A fixed row leaves the list. Every fix is a normal Figma edit, so Cmd/Ctrl + Z undoes it. Fix all (Pro) runs the same fix on every fixable layer in the group and reports how many it fixed and why the rest were left.

CSV report (Pro)

Export CSV downloads tidylint-report.csv with one row per finding: rule, layer name, layer type, page, detail, whether it can be fixed, and the layer ID. Cells that a spreadsheet could read as a formula are escaped.

The cleanup report

The Cleanup tab always scans every page, in the same chunked way as a whole-file lint.

  • Name
    Unused styles
    Type
    paint, text, effect, grid
    Description

    Local styles that no layer uses, including styles applied to part of a text layer.

  • Name
    Unused variables
    Type
    all types
    Description

    Local variables that no layer binds and that no style or other variable refers to.

  • Name
    Duplicate styles
    Type
    identical values
    Description

    Local styles of the same kind with identical values. A paint style bound to a variable is not a duplicate of one with the raw color. Pick which style to keep with the radio button.

  • Name
    Hidden layers
    Type
    topmost only
    Description

    Hidden layers, listing only the topmost one when hidden layers are nested. Layers inside instances are left out because they cannot be deleted.

Tick items and click Delete selected, or click Merge duplicates (Pro). Before anything changes, TidyLint lists exactly what will be deleted or merged and waits for Confirm. A merge rebinds every usage of a duplicate to the style you kept, including ranges inside text layers, and then deletes the duplicate.

Styles published as a library can be unused in this file and still be used in other files. Check before deleting them.

What next?

Was this page helpful?