Repository navigation
Features
Everything drag-lint does, grouped. Counts on this page were taken from the
running build (drag-lint rules --json), not written by hand.
Three surfaces expose these: the CLI (drag-lint <verb>), the RAD Studio
plugin (see IDE Menu Reference), and the language
server (drag-lint lsp).
Inside the plugin, not everything lives on the main menu. Auto-fix and "allow this finding" are reachable only by right-clicking a node in the Structure form -- see Fix it, Fix all in unit, Fix all in project and Allow this message. There is also a Project Manager right-click item, drag-lint: Project Rules....
These were prose on the hand-written Features page and have no registry field. Each belongs on the page that owns its topic; move it there and delete it here.
Newest -- the coupling rules. global-only-uses-edge (a global variable is
the only reason unit A depends on unit B, so relocating it deletes the uses
edge), uses-global-census (how heavy that edge is), duplicate-global-decl
(the same interface-level name in two units, so uses order decides which one
compiles), with-hides-outer-symbol and stat-gated-destructive. The first
three are project-wide and therefore only reachable through lint-all --
lint <path> is a genuine subset and never runs them.
Formatting: drag-lint drives YADF (the Delphi formatter) for the current
unit or the whole active project, straight from the IDE menu -- see
Format with YADF and
Format Whole Project with YADF.
Formatting does not invalidate suppressions. A dl:ok hash is computed over
a normalised line -- whitespace stripped, identifiers lowercased -- so
reindenting and re-spacing cannot change it. Verified on a real file: 10 markers
in, 10 markers out, whitespace the only difference.
Suppression:
-
// drag-lint:ignore [rule-id ...]-- silence a line. -
// dl:ok <rule-id>@<hash> -- reason-- a reviewed marker: it carries a hash of the line's code tokens and re-reports itself if the code changes, so a review cannot outlive the code it reviewed. Reindentation and case changes do not invalidate it. -
REVIEWED <yyyy-mm-dd>anywhere in a marker's reason records when a human last re-read it (-- REVIEWED 2026-09-23 the loop is bounded). It is a comment, so it never changes the hash.review-marker-reason-unreviewed(OFF by default) reports a missing, invalid, future or too-old stamp (max_age_days, default 180). -
review-marker-placeholder-hash(ON) reports a marker whose@hashwas never computed (@0000,@xxxx), including an@0000one written in a block comment, where no marker is read -- it suppresses nothing.
Ask a formal question about one symbol and get a clickable chart back. In RAD
Studio, put the caret on the symbol and pick the question from drag-lint >
Reports; the chart opens in the browser and the text answer is copied as a
DocInsight /// <remarks> block that Auto Document leaves alone. Outside the IDE,
charts\src\Ask-Report.ps1 asks the same questions. Twenty-five questions: round-trip, butterfly,
who-calls, what-it-calls, who-writes, who-reads, change-impact,
tested-by, effects, touches-tables, class-surface, hierarchy, deps,
cycles, wiring, lifecycle, event-wiring, architecture,
protocol-trace, crosses-boundary, shown-where, exception-paths,
consumers, feeds-from and lands-where. Every row in a chart is a fact with a file and a line, and links
back to it.
Build and maintain the per-project and library indexes.
| Feature | Surfaces | Status |
|---|---|---|
| Auto-Document Whole Project | drag-lint > Generate & Export > Auto-Document Whole Project...; index; document
|
|
| migrate-dbs | migrate-dbs |
|
| pp-profile | pp-profile |
|
| purge-locals | purge-locals |
|
| Rebuild Index for This Project | drag-lint > Index & Maintenance > Rebuild Index for This Project; index
|
|
| register-project | register-project |
|
| schema | schema |
|
| Show Resolved DBs (debug) | drag-lint > Index & Maintenance > Show Resolved DBs (debug)...; resolve-dbs
|
Find symbols, callers, callees, text and types in the index.
| Feature | Surfaces | Status |
|---|---|---|
| call-path | call-path |
|
| Class Surface | drag-lint > Inspect Symbol > Class Surface...; surface
|
|
| Compiler Hints | drag-lint > Code Quality > Compiler Hints...; query hints
|
|
| context | context |
|
| Find Undocumented (public) | drag-lint > Code Quality > Find Undocumented (public)...; query find
|
|
| Find Usages | drag-lint > Find Usages... | |
| Find Usages | Structure form: Find Usages; usages
|
|
| find-callees | find-callees |
|
| find-unit | find-unit |
|
| Go to Declaration | Structure form: Go to Declaration | |
| Go to Definition | drag-lint > Go to Definition | |
| Go to Implementation | Structure form: Go to Implementation | |
| helpers-of | helpers-of |
|
| Hover at Cursor | drag-lint > Hover at Cursor; hover
|
|
| outline | outline |
|
| query --kind --all | query |
|
| query --name-like | query |
|
| query ancestors | query ancestors |
|
| query descendants | query descendants |
|
| query find-callers | query find-callers |
|
| query type-usage | query type-usage |
|
| query typecat | query typecat |
|
| query unit-usage | query unit-usage |
|
| Show Completion | drag-lint > Show Completion | |
| Show Signature Help | drag-lint > Show Signature Help | |
| Show Structure | drag-lint > Show Structure | |
| Symbol Search | drag-lint > Symbol Search...; query
|
|
| Symbol Slice | drag-lint > Inspect Symbol > Symbol Slice...; slice
|
|
| Type at Cursor | drag-lint > Inspect Symbol > Type at Cursor; typeat
|
|
| usages | usages |
|
| wiki | wiki |
Rules, autofix, suppression markers and project-wide checks.
190 rules. 23 have an auto-fix. 160 are on by default. 137 are built-in checks; 53 are external tree-sitter .scm rules you can read and extend in rules\. Run drag-lint rules for the always-current catalogue.
| Category | Rules | With auto-fix |
|---|---|---|
| bug-patterns | 54 | 6 |
| complexity | 11 | - |
| data-flow | 9 | - |
| dead-code | 12 | 6 |
| documentation | 5 | 2 |
| firedac | 3 | - |
| metrics | 8 | - |
| naming | 11 | 8 |
| other | 6 | - |
| platform | 10 | - |
| project-wide | 20 | - |
| refactoring | 11 | - |
| resource-lifetime | 8 | 1 |
| review-markers | 5 | - |
| security | 10 | - |
| structure | 7 | - |
| Total | 190 | 23 |
| Feature | Surfaces | Status |
|---|---|---|
| Copy All Diagnostics | Structure form: Copy All Diagnostics; lint
|
|
| Copy Diagnostics (Current File) | About window: Copy Diagnostics (Current File); lint
|
|
| Copy Selected Diagnostics | Structure form: Copy | |
| drag-lint: Project Rules | Project Manager: drag-lint: Project Rules; rules
|
|
| exceptions-sync | exceptions-sync |
|
| Fix all in project | Structure form: Fix all in project; lint-all
|
|
| Fix all in unit | Structure form: Fix all in unit; lint
|
|
| Fix all reliability (1.31.3) | Structure form: Fix all in unit; lint
|
|
| Fix it | Structure form: Fix it; lint; uses-fix
|
|
| Format Whole Project with YADF | drag-lint > Format Whole Project with YADF...; format; index
|
|
| Format with YADF | drag-lint > Format with YADF; format
|
|
| Lint Buffer (Unsaved) | About window: Lint Buffer (Unsaved); lint
|
|
| Lint rules | 190 rules, 23 fixable; rules
|
|
| lint-project | lint-project |
|
| lint-tree | lint-tree |
|
| Rename across every project that compiles a shared unit |
lint; Structure form: Fix it; Structure form: Fix all in unit |
|
| Rescan this unit | Structure form: Rescan this unit; index
|
|
| Run AST Checks | About window: Run AST Checks; check-ast
|
|
| Run Diagnostics (didSave) | About window: Run Diagnostics (didSave) | |
| Run Lint All (Full Report) | drag-lint > Code Quality > Run Lint All (Full Report)...; lint-all
|
|
| type-name-prefix: expected letter from the ancestor chain |
lint; lint-all; lint
|
DocInsight comments generated from the index, and drift detection.
| Feature | Surfaces | Status |
|---|---|---|
| dl:wiki concept blocks |
wiki; procedure: docs\wiki\Wiki-Blocks-Authoring.md
|
|
| Doc Comment Stub (symbol) | drag-lint > Generate & Export > Doc Comment Stub (symbol)...; generate-docs
|
|
| doc-drift | doc-drift |
|
| doc-forget | doc-forget |
|
| Document it | Structure form: Document it; document
|
|
| Document project | Structure form: Document project; document
|
|
| Document unit | Structure form: Document unit; document
|
|
| document-all | document-all |
|
| Effect Summary Legend | procedure: docs\wiki\Effect-Summary-Legend.md
|
|
| shared-unit | shared-unit |
Rename, extract, safe delete, uses cleanup and code stubs.
| Feature | Surfaces | Status |
|---|---|---|
| Allow this message | Structure form: Allow this message; allow
|
|
| allow | allow |
|
| Create helper class | Structure form: Create helper class; create-enum-helper
|
|
| create-enum-helper | create-enum-helper |
|
| extract-method | extract-method |
|
| Quick-Fix: Add Unit for Inline Hint (H2443) at Cursor | drag-lint > Uses & Dependencies > Quick-Fix: Add Unit for Inline Hint (H2443) at Cursor | |
| Quick-Fix: Add Unit for Undeclared at Cursor (Ctrl+Alt+U) | drag-lint > Uses & Dependencies > Quick-Fix: Add Unit for Undeclared at Cursor (Ctrl+Alt+U) | |
| Quick-Fix: Convert Public Field to Property at Cursor | drag-lint > Convert Public Field to Property at Cursor | |
| Reconcile Project Members (.dpr/.dproj) | drag-lint > Uses & Dependencies > Reconcile Project Members (.dpr/.dproj)...; reconcile-project
|
|
| Rename Symbol | drag-lint > Rename Symbol...; rename
|
|
| safe-delete | safe-delete |
|
| Unit Test Stub (symbol) | drag-lint > Generate & Export > Unit Test Stub (symbol)...; generate-test
|
|
| Uses & Deps Tab | drag-lint > Uses & Dependencies > Uses & Deps Tab -- review & apply fixes... | |
| Uses Audit -- interface->impl moves + unused (this unit) | drag-lint > Uses & Dependencies > Uses Audit -- interface->impl moves + unused (this unit)...; uses-audit
|
|
| Uses Cleanup Preview (compiler-verified, this unit) | drag-lint > Uses & Dependencies > Uses Cleanup Preview (compiler-verified, this unit)...; uses-fix
|
Rule-driven migration of legacy component types.
| Feature | Surfaces | Status |
|---|---|---|
| Convert progress |
ConvRulesEditor.exe (Convert tab progress line) |
|
| convert-apply #migrate (member rename / DL_NONE) | convert-apply |
|
| convert-apply | convert-apply |
|
| convert-reemit | convert-reemit |
internal |
| convert-scaffold | convert-scaffold |
|
| convert-validate | convert-validate |
|
| ConvRulesEditor |
ConvRulesEditor.exe; ConvRulesEditor.exe (Convert tab (--convert-request ; the IDE plugin probes --write-capabilities ))
|
|
| glyph-vacuum | glyph-vacuum |
|
| proptree | proptree |
|
| Qualify #convert quick fix |
ConvRulesEditor.exe (Convert tab > Qualify #convert...); ConvRulesEditor.exe (Convert tab > Qualify all...) |
|
| Reindex project |
ConvRulesEditor.exe (Conversion > Reindex project) |
|
| Work list |
ConvRulesEditor.exe (View > Work list) |
Call graphs, dependency reports, dead code, tester spreadsheets.
| Feature | Surfaces | Status |
|---|---|---|
| butterfly | butterfly |
|
| Call Graph (Butterfly) | drag-lint > Uses & Dependencies > Call Graph (Butterfly)...; reverse-calltree
|
|
| callgraph | callgraph |
|
| Circular Dependency Report (worked example) | procedure: docs\wiki\Circular-Dependency-Report.md
|
|
| Circular Uses Report (cycles + fix plan) | drag-lint > Uses & Dependencies > Circular Uses Report (cycles + fix plan)...; cycles
|
|
| Cycles fix (mechanical, compile-gated) |
cycles; drag-lint > Uses & Dependencies > Fix Circular Uses Mechanically (dry run)...; View > Tool Windows > drag-lint > Uses & Deps > This project -- Circular uses (cycles --fix); Structure form: Fix this cycle (dry run)...; Structure form: Apply cycle fix...; charts\src\Emit-Cycles.ps1
|
|
| deps-report |
deps-report; drag-lint > Uses & Dependencies > Dependency Report (third-party rollup)... |
|
| Export Enums (Delphi const) | drag-lint > Generate & Export > Export Enums (Delphi const)...; export enums
|
|
| Export Graph (DOT) | drag-lint > Generate & Export > Export Graph (DOT)...; graph
|
|
| Export to Obsidian | drag-lint > Generate & Export > Export to Obsidian...; export obsidian
|
|
| Find Dead Code | drag-lint > Code Quality > Find Dead Code...; find-deadcode
|
|
| Forms for testers (CSV) | drag-lint > Reports > Forms for testers (CSV)...; forms-csv
|
|
| Impact / Blast Radius (symbol) | drag-lint > Uses & Dependencies > Impact / Blast Radius (symbol)...; impact
|
|
| Reverse Call Tree (clickable, Messages window) | reverse-calltree |
|
| Reverse Call Tree (who calls this, N-deep) | drag-lint > Uses & Dependencies > Reverse Call Tree (who calls this, N-deep)...; reverse-calltree
|
|
| Scan TODOs / FIXMEs | drag-lint > Code Quality > Scan TODOs / FIXMEs...; todos
|
|
| Show in Call Graph | Structure form: Show in Call Graph; reverse-calltree
|
|
| Show Wiring (Spring4D DI + DFM events) | drag-lint > Uses & Dependencies > Show Wiring (Spring4D DI + DFM events)...; wiring
|
|
| Top Symbols (fan-in) | drag-lint > Code Quality > Top Symbols (fan-in)...; top
|
|
| Uses Report (CSV) | drag-lint > Uses & Dependencies > Uses Report (CSV)...; uses-report
|
Ask a question about a symbol and get a clickable chart.
| Feature | Surfaces | Status |
|---|---|---|
| ask |
ask; drag-lint > Reports |
|
| Chart questions | 26 questions; ask
|
|
| Charts and the IDE | procedure: docs\wiki\Charts-and-the-IDE.md
|
|
| Click-to-source: the draglint:// handler |
protocol; drag-lint-open.exe
|
|
| Compare a report with current code | compare |
|
| Where the charts find the engine and Graphviz | procedure: charts\README.md
|
Compile, fold compiler output into findings, preprocess.
| Feature | Surfaces | Status |
|---|---|---|
| Add Missing Units to uses (whole unit) | drag-lint > Uses & Dependencies > Add Missing Units to uses (whole unit)...; check-unit
|
|
| Compile & Diagnose | drag-lint > Compile & Diagnose | |
| Compile Buffer (unsaved) | drag-lint > Compile Buffer (unsaved) | |
| Compile Dependents | drag-lint > Compile Dependents | |
| compile-check | compile-check |
|
| Full Compile Sweep | drag-lint > Full Compile Sweep; refresh-findings
|
|
| ghost-check | ghost-check |
|
| ghost-recover | ghost-recover |
|
| Import Build Log | About window: Import Build Log...; import-log
|
|
| preprocess-file | preprocess-file |
|
| project-facts | project-facts |
|
| Recover Buffer-Compile Files | About window: Recover Buffer-Compile Files |
SQL scripts, live schema snapshots, ORM links.
| Feature | Surfaces | Status |
|---|---|---|
| fb-snapshot | fb-snapshot |
|
| link-orm | link-orm |
The RAD Studio plugin, the language server, MCP and workspaces.
| Feature | Surfaces | Status |
|---|---|---|
| drag-lint Graph (dockable) | drag-lint > drag-lint Graph (dockable) | |
| drag-lint Graph | View > Tool Windows > drag-lint Graph | |
| drag-lint Options | drag-lint > drag-lint Options... | |
| drag-lint Panel (dockable) | drag-lint > drag-lint Panel (dockable) | |
| drag-lint | View > Tool Windows > drag-lint | |
| IDE Menu Reference | procedure: docs\wiki\IDE-Menu-Reference.md
|
|
| ide-release | ide-release |
|
| Installation |
drag-lint.exe; procedure: docs\wiki\Installation.md
|
|
| lsp | lsp |
|
| MCP server |
mcp find_symbol; mcp find_callers; mcp lint; mcp get_symbol_doc; mcp find_by_doc_tag; mcp find_undocumented; mcp get_impact; mcp get_wiring; mcp get_surface; mcp get_slice; mcp get_context_bundle; mcp get_type_at_position; mcp rename_symbol; mcp run_ast_checks; mcp run_compile_check
|
|
| Register the MCP server (Claude Code, VS Code) | mcp-config |
|
| serve | serve |
|
| Setup installer | procedure: docs\wiki\Setup-Installer.md
|
experimental |
| workspace add | workspace add |
|
| workspace index | workspace index |
|
| workspace status | workspace status |
Which databases cover what, drift checks, raw dumps, self-tests.
| Feature | Surfaces | Status |
|---|---|---|
| About and Status | drag-lint > About; info; About window: Check for Updates; About window: Close; About window: Copy Diagnostics (Current File); About window: Copy Report; About window: Diagnose Current State; About window: Import Build Log...; About window: Lint Buffer (Unsaved); About window: Open Plugin Log; About window: Recover Buffer-Compile Files; About window: Refresh; About window: Run AST Checks; About window: Run Diagnostics (didSave) |
|
| ambiguous-calls | ambiguous-calls |
|
| bench-context | bench-context |
|
| contrast-selftest | contrast-selftest |
internal |
| diff | diff |
|
| doc-facts-selftest | doc-facts-selftest |
internal |
| dump-call-edges | dump-call-edges |
|
| dump-pp-eval | dump-pp-eval |
internal |
| dump-pp-lex | dump-pp-lex |
internal |
| dump-refs | dump-refs |
|
| Feature registry |
tools\publish-release.ps1 -Version -DryRun; procedure: docs\wiki\Feature-Registry.md
|
|
| featuregen |
featuregen.exe; build\_build_featuregen_local.bat builds featuregen.exe from this checkout; tools\featuregen-gate.ps1 -Repo -Full; procedure: docs\wiki\featuregen.md
|
internal |
| info | info |
|
| Library Drift Check | drag-lint > Index & Maintenance > Library Drift Check...; library-drift
|
|
| Maintenance | procedure: docs\wiki\Maintenance.md
|
|
| Open Plugin Log | About window: Open Plugin Log | |
| resolve-uses | resolve-uses |
internal |
| selftest | selftest |
internal |
| shutdown | shutdown |
|
| sql | sql |
|
| test-store-freshness | test-store-freshness |
internal |
Generated by featuregen build --all from features\; counts come from drag-lint rules --json at generation time. Do not edit by hand.