Skip to content

Features

Alexander Liberov edited this page Oct 21, 2026 · 6 revisions

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....

Notes carried over from the hand-written page

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.

Linting

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 @hash was never computed (@0000, @xxxx), including an @0000 one written in a block comment, where no marker is read -- it suppresses nothing.

Diagrams and charts

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.


Indexing

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

Search and navigation

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

Linting

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

Documentation

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

Refactoring and code generation

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

Component conversion

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)

Graphs and reports

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

Diagrams and charts

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

Compiler integration

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

Database and Firebird

SQL scripts, live schema snapshots, ORM links.

Feature Surfaces Status
fb-snapshot fb-snapshot
link-orm link-orm

Editor integration

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

Maintenance and diagnostics

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.

Clone this wiki locally