Cleanup
Default: On | Severity:info
A multi-check rule that detects four types of structural clutter. Each sub-check targets a different kind of leftover that accumulates during normal design work.
What it detects
When to enable it
Keep this rule on (it is the default) for all production files. It catches low-effort cleanup opportunities that improve file quality immediately. Disable only for rough exploration files where structure does not matter yet.How to fix all cleanup findings at once
Review the findings
Click through each finding to verify nothing is hidden or empty intentionally. Pay special attention to hidden layers that might be variant states.
Bulk fix
Use bulk fix (Pro) to apply all cleanup fixes at once, or fix findings individually by clicking Apply Fix on each one.
Layer Naming
Default: On | Severity:info
Detects layers with default auto-generated names (like Frame 1 or Rectangle 47) and naming convention violations. This rule uses a two-phase detection system that first catches generic names, then detects your team’s naming convention and flags deviations from it.
What it detects
Layer naming catches two broad categories of problems:- Generic default names — Figma’s auto-generated names like
Frame 1,Rectangle 47,Group 3. These tell developers nothing about what the layer is. - Convention violations — If your file consistently uses
camelCasenaming, a layer namedhero-banner(kebab-case) is flagged as a deviation.
Phase 1: Pattern detection
LintKit ships with 28 built-in patterns organized into four categories:Default name patterns (21 patterns)
Default name patterns (21 patterns)
Matches Figma’s auto-generated names. These are the most common findings:
- Shape defaults:
Frame 1,Rectangle 47,Ellipse 1,Line 1,Polygon 1,Star 1,Vector 1 - Container defaults:
Group 3,Section 1 - Content defaults:
Text 1,Image 1 - Component defaults:
Component 1,Instance 1 - Other defaults:
Slice 1,Connector 1,Stamp 1,Sticky 1,Widget 1,Highlight 1,Shape with Text 1 - Boolean operation defaults:
Union,Subtract,Intersect,Exclude
Default name Frame 47 — 23 layers use Figma’s auto-generated names. Consider renaming to describe their purpose.
Copy and duplicate patterns (2 patterns)
Copy and duplicate patterns (2 patterns)
- Copy suffix (enabled by default) — flags names like
Button_copy,Card copy 2,Header Copy - Numbered suffix (disabled by default) — flags names like
Button 2,Card 3. This is disabled because numbering may be intentional in certain contexts.
Copy suffix Card copy 2 — 5 layers appear to be duplicates with copy suffixes. Consider renaming them.
Placeholder patterns (2 patterns)
Placeholder patterns (2 patterns)
- Temp names — flags
temp,tmp,test,TODO,FIXME,untitled,asdf, and similar placeholder text - Placeholder prefix — flags
WIP Button,DRAFT Header,DELETE Card,REMOVE Section,OLD Footer
Placeholder name TODO fix this layout — 3 layers have temporary names that should be cleaned up before handoff.
Ignore patterns (3 patterns)
Ignore patterns (3 patterns)
Layers matching these patterns are excluded from all naming checks:
- Dot prefix (
.layerName) — intentionally hidden layers (enabled by default) - Underscore prefix (
_layerName) — internal/private layers (disabled by default) - Hash prefix (
#layerName) — metadata layers (disabled by default)
Phase 2: Convention detection
When LintKit collects at least 5 naming samples with 70% or higher confidence, it detects the prevailing naming convention in your file. Supported conventions includecamelCase, PascalCase, kebab-case, snake_case, and others.
Once a convention is detected, any layer name that deviates is flagged. For example, if 80% of your layers use PascalCase, a layer named hero-banner (kebab-case) would be flagged.
Severity tiers
Layer naming severity scales based on where the layer sits in the hierarchy. Deeper, less important layers get lower severity:| Tier | Layer types | Severity | Rationale |
|---|---|---|---|
| 1 (highest) | Top-level frames, sections, components | error | These appear in dev handoff navigation and page overview. A default name here is a serious problem. |
| 2 | Shallow frames, groups, text nodes, instances | warn | Visible in the layer panel during development. Worth fixing before handoff. |
| 3 | Deep frames, deep groups | info | Buried in the layer tree. Nice to fix but low priority. |
| 4 (skipped) | Vectors, ellipses, shapes | Not flagged | Primitive shapes rarely need meaningful names. |
Component 1 is tier 1 (error), while a deeply nested group named Group 3 is tier 3 (info).
How to fix findings
Start with tier 1 findings
Focus on top-level frames, sections, and components first. These are the names that appear in navigation and dev tools.
Rename with intent
Choose names that describe what the layer is or does:
HeroSection, PrimaryButton, NavigationBar. Follow your team’s naming convention.Configuration
| Key | Default | Description |
|---|---|---|
naming.flagGenericNames | true | Flag default auto-generated names |
naming.flagSingleChildGroups | true | Flag single-child groups (also covered by the cleanup rule) |
| Custom forbidden patterns | [] | Add your own regex patterns in Settings |
Edge cases
Layer filter behavior
Layer filter behavior
- Naming checks respect your layer filters: hidden and locked layers are skipped if
layerFilters.includeHiddenLayersandlayerFilters.includeLockedLayersare set to false (the default). - Layers inside component instances are skipped by default — rename the source component instead.
- The maximum is 100 nodes per finding to keep the findings panel manageable.