drag-lint help
drag-lint is developed alongside Micronite, our quality and production-control software (www.htrmicronite.com).
Indexing
Build and maintain the per-project and library indexes.
| Feature | What it does | Since |
|---|---|---|
| Auto-Document Whole Project | Writes DocInsight documentation into every public declaration a project owns | 0.1.0-alpha |
| migrate-dbs | Moves project index databases into each project's own D-RAG folder, matching the current index layout | 1.3.0-alpha |
| pp-profile | Diagnostic that prints the resolved preprocessor define profile for a project, one symbol per line | 0.92.0-alpha |
| purge-locals | A size escape hatch for an index database that has grown too large: it drops local-variable and parameter symbols and runs VACUUM to reclaim space | 0.91.0-alpha |
| Rebuild Index for This Project | Walks a project's .dproj compile closure and (re)builds its index | 0.1.0-alpha |
| register-project | Add a new project to the manifest so index --all and the IDE can see it | 1.20.4-alpha |
| schema | Prints the live schema of an index database: schemaversion, every table and column, and row counts | 0.3.0-alpha |
| Show Resolved DBs (debug) | Prints which database(s) drag-lint would actually use for a given project, file, or platform, without running a real query | 0.60.0-alpha |
Search and navigation
Find symbols, callers, callees, text and types in the index.
| Feature | What it does | Since |
|---|---|---|
| call-path | Finds the shortest resolved call path from one symbol to another | 0.91.0-alpha |
| Class Surface | Shows the public surface of a class: its members and signatures, without the method bodies | 0.1.0-alpha |
| Compiler Hints | Uses query hints to surface compiler hint/warning findings that have been imported into the index, filtered by code or severity | 0.1.0-alpha |
| context | Returns a compact context bundle for a symbol -- its doc comment, class surface (signatures), the target's own body, and a capped list of callers | 0.6.0-alpha |
| find-callees | Lists the resolved outgoing calls of one routine | 0.91.0-alpha |
| Find Undocumented (public) | Uses query find to list indexed symbols filtered by documentation state, kind, or visibility | 0.1.0-alpha |
| find-unit | Finds which indexed unit declares a symbol, and adds that unit to a file's uses clause | 0.69.0-alpha |
| Find Usages | Lists every reference to the symbol under the editor caret across the indexed project | 0.33.0-alpha |
| Find Usages | Lists references to the symbol represented by a Structure-tree node | 0.33.0-alpha |
| Go to Declaration | Jumps the editor caret to the declaration of the symbol represented by a Structure-tree node | 0.0.0 |
| Go to Definition | Jumps the editor caret to the declaration of the symbol under the cursor | 0.0.0 |
| Go to Implementation | Jumps the editor caret to the implementation of the symbol represented by a Structure-tree node | 0.43.0-alpha |
| helpers-of | Lists record/class helper edges targeting a given type, anywhere in the index | 0.94.0-alpha |
| Hover at Cursor | Shows a hover card for the symbol under the editor caret: signature, documentation, and callers | 0.7.0-alpha |
| outline | Prints the file-scoped symbol outline for one Pascal unit | 0.86.0-alpha |
| query ancestors | Resolves the transitive class/interface hierarchy of a type | 0.1.0-alpha |
| query descendants | The reverse of query ancestors: lists every class that descends from a given ancestor, across all scanned databases | 0.1.0-alpha |
| query find-callers | Lists callers of a routine by name, with an option to restrict results to precise, resolved callers | 0.1.0-alpha |
| query --kind --all | Lists every symbol of one kind -- every unit, every class, every enum -- with no name, no doc clause and no row cap | 0.1.0-alpha |
| query --name-like | Case-insensitive substring search over symbol names | 0.1.0-alpha |
| query type-usage | Answers one question, of a list of type names, about one file | 0.1.0-alpha |
| query typecat | Resolves a type's category -- float, string, class, interface, and so on | 0.1.0-alpha |
| query unit-usage | Answers one question, about one unit and one file | 0.1.0-alpha |
| Show Completion | Shows an index-backed completion list at the editor caret | 0.21.0-alpha |
| Show Signature Help | Shows parameter help for the call being typed at the editor caret | 0.21.0-alpha |
| Show Structure | Shows a structural outline of the current unit | 0.30.0-alpha |
| Symbol Search | Searches symbols by name across the indexed projects | 0.1.0-alpha |
| Symbol Slice | Shows the slice of code relevant to one symbol: its declaration, body, and immediate context | 0.17.0-alpha |
| Type at Cursor | Resolves the static type of the expression under the editor caret | 0.19.0-alpha |
| usages | Finds usage sites of a named symbol, with a choice of report width | 0.33.0-alpha |
| wiki | Looks up the dl:wiki concept topics a team has written into their own doc comments, and routes a human phrase to the code that implements it | 1.7.0-alpha |
Linting
Rules, autofix, suppression markers and project-wide checks.
| Feature | What it does | Since |
|---|---|---|
| Copy All Diagnostics | Puts every lint finding for the current unit onto the clipboard, starting from the Structure form | 0.1.0-alpha |
| Copy Diagnostics (Current File) | Puts the current file's lint findings onto the clipboard | 0.1.0-alpha |
| Copy Selected Diagnostics | Copies only the Diagnostics rows selected in the Structure form (Ctrl/Shift-click, Ctrl+C) to the clipboard | 1.28.3-alpha |
| drag-lint: Project Rules | Shows the catalog of lint rules in the context of a specific project | 0.2.0-alpha |
| exceptions-sync | Declare one exception class per distinct raise Exception.Create message, then rewrite the raise sites | 1.8.0-alpha |
| Fix all in project | Applies autofixes for every fixable finding across the whole project, starting from the Structure form | 0.61.0-alpha |
| Fix all in unit | Applies autofixes for every fixable finding in the current unit, starting from the Structure form | 0.1.0-alpha |
| Fix all reliability (1.31.3) | Fix all no longer drops every rename for library-root members, shows a wait cursor and refuses a second fix, and keeps E-prefixed exception classes | 1.31.3-alpha |
| Fix it | Applies the fix for the single lint finding on a Structure-tree node; an unused unit is removed or moved to implementation by compiling | 0.1.0-alpha |
| Format Whole Project with YADF | Runs YADF formatting across a project's files, with indexing involved as part of the same action | 0.1.0-alpha |
| Format with YADF | Reformats one Pascal unit by driving the external YADF formatter | 0.16.0-alpha |
| Lint Buffer (Unsaved) | Lints the current editor buffer's in-memory content, including unsaved edits, without writing it to disk first | 0.1.0-alpha |
| lint-project | Runs project-scoped structural lint rules against an index -- checks such as god-class, unused-public-symbol | 0.48.0-alpha |
| Lint rules | Every lint rule the engine ships, imported from rules --json | 0.2.0-alpha |
| lint-tree | Answers one question lint-all cannot: does an interface edit to this unit reach any dependent? | 1.11.0-alpha |
| Rename across every project that compiles a shared unit | A naming fix on a unit several project indexes own renames it in every owner or in none, after an IDE confirmation listing the projects | 1.29.0-alpha |
| Rescan this unit | Re-indexes the active project and re-lints the current unit on demand, so the Diagnostics panel drops findings already fixed | 1.28.3-alpha |
| Run AST Checks | Runs drag-lint's AST-level checks against a file | 0.31.0-alpha |
| Run Diagnostics (didSave) | Runs drag-lint's diagnostics pass on a file automatically when it is saved, mirroring the LSP textDocument/didSave notification | 0.0.0 |
| Run Lint All (Full Report) | Runs the whole rule catalog against a project's indexed code and reports every surviving finding -- the overall project health check | 0.61.0-alpha |
| type-name-prefix: expected letter from the ancestor chain | type-name-prefix picks E or T from the ancestor chain (project, then library index); untraceable ancestors are an index gap; autofix uses the finding's letter | 1.31.4-alpha |
Documentation
DocInsight comments generated from the index, and drift detection.
| Feature | What it does | Since |
|---|---|---|
| Doc Comment Stub (symbol) | Uses generate-docs to produce a doc-comment stub for one qualified symbol | 0.25.0-alpha |
| doc-drift | Diagnostic that computes deterministic doc-vs-code drift findings for one symbol | 0.93.0-alpha |
| doc-forget | Reap or rename the project tags on inbound documentation facts; a dry run unless told to apply | 1.17.0-alpha |
| document-all | Documents every public declaration in every indexed unit, with no project scope | 0.93.0-alpha |
| Document it | Generates or repairs a managed DocInsight comment on the single symbol represented by a Structure-tree node | 0.90.0-alpha |
| Document project | Generates or repairs managed DocInsight comments for every public declaration the project owns, starting from a Structure-tree node's project | 0.90.0-alpha |
| Document unit | Generates or repairs managed DocInsight comments for every public declaration in the unit represented by a Structure-tree node (facts-only) | 0.90.0-alpha |
| Effect Summary Legend | The purity analysis writes a short token string for every routine it judges -- symbolfacts.effectsummary in the index | 0.0.0 |
| shared-unit | Reads or extends the dl:shared marker on a unit, recording which projects share it | 1.10.0-alpha |
| dl:wiki concept blocks | The format of a dl:wiki block -- the concept notes the wiki verb reads | 1.7.0-alpha |
Refactoring and code generation
Rename, extract, safe delete, uses cleanup and code stubs.
| Feature | What it does | Since |
|---|---|---|
| allow | Records a dl:ok review of one finding, so it stops being reported without being fixed | 0.54.0-alpha |
| Allow this message | Records a dl:ok review of one finding, so it stops being reported without being fixed | 0.54.0-alpha |
| create-enum-helper | Generates a Byte-family record helper (ToByte/FromByte/ToInteger/ FromInteger/ToString/FromString) for an enum type | 0.94.0-alpha |
| Create helper class | Generates a Byte-family record helper for an enum type represented by a Structure-tree node | 0.94.0-alpha |
| extract-method | Pulls a run of statements out of a routine into a new method | 0.85.0-alpha |
| Quick-Fix: Add Unit for Inline Hint (H2443) at Cursor | The same idea as the undeclared-identifier quick-fix, but for compiler hint H2443 -- an inline routine whose declaring unit is not in scope | 0.0.0 |
| Quick-Fix: Add Unit for Undeclared at Cursor (Ctrl+Alt+U) | Finds which unit declares the identifier under the caret and adds that unit to the current unit's uses clause | 0.0.0 |
| Quick-Fix: Convert Public Field to Property at Cursor | Rewrites a public field under the caret as a property | 0.0.0 |
| Reconcile Project Members (.dpr/.dproj) | Compares a project file's declared member list against what is on disk and in the compile closure | 1.18.0-alpha |
| Rename Symbol | Renames a symbol across the whole indexed project | 0.24.0-alpha |
| safe-delete | Deletes a symbol if and only if it has zero references in the index | 0.69.0-alpha |
| Unit Test Stub (symbol) | Uses generate-test to produce a unit-test skeleton for one qualified symbol | 0.27.0-alpha |
| Uses Audit -- interface->impl moves + unused (this unit) | For one unit, reports which uses entries could move from the interface section to implementation, and which are unused entirely | 0.43.0-alpha |
| Uses Cleanup Preview (compiler-verified, this unit) | The removals a Uses Audit suggests, but verified by actually compiling | 0.43.0-alpha |
| Uses & Deps Tab | Open the Uses & Deps tab to review uses-clause fixes and apply them | 0.0.0 |
Component conversion
Rule-driven migration of legacy component types.
| Feature | What it does | Since |
|---|---|---|
| convert-apply | Locates .dfm component instances that match a #convert rule from a conversion-rules file and rewrites all five surfaces: declaration retype, uses-add | 1.2.0-alpha |
| convert-apply #migrate (member rename / DL_NONE) | #migrate Old -> New / Old -> DL_NONE inside a #convert block renames or deliberately breaks a member at every bound .pas access site | 1.22.0-alpha |
| convert-scaffold | Auto-generates a valid conversion-rules file from the real property trees of a from-type and a to-type | 1.1.0-alpha |
| convert-validate | Parses and validates a conversion-rules file (a reFind-superset DSL), checking its #link/#default paths against the real property trees | 1.1.0-alpha |
| Convert progress | ConvRulesEditor Convert tab: per-step progress (unit, book, phase, elapsed) on the status bar and the tab | 1.26.7-alpha |
| ConvRulesEditor | Visual rulebook editor for the conversion rules; its Convert tab reports StripDB value casts, cast sites to convert by hand and uses changes (engine 1.27) | 0.0.0 |
| Qualify #convert quick fix | ConvRulesEditor Convert tab: one click writes the engine's qualified #convert line (apply/1 qualify_fixes) into the open book | 1.31.5-alpha |
| Reindex project | ConvRulesEditor command: incremental index --project of the editor's project index, cancellable | 1.26.7-alpha |
| Work list | ConvRulesEditor tab: what the last Convert run's converted code still uses from the old components (engine pas_uses) | 1.28.2-alpha |
| glyph-vacuum | Measure every streamed glyph or picture under a tree before writing a glyph rule | 1.15.0-alpha |
| proptree | Recursive deep-property enumerator for a class: flattens its own and inherited properties into dotted paths, recursing into class-typed properties | 1.1.0-alpha |
Graphs and reports
Call graphs, dependency reports, dead code, tester spreadsheets.
| Feature | What it does | Since |
|---|---|---|
| butterfly | Composes a symbol's callers (upward wing) and callees (downward wing) into one combined chart in a single command | 0.99.0-alpha |
| Call Graph (Butterfly) | Shows callers and callees of one symbol together in a single "butterfly" view | 0.96.0-alpha |
| callgraph | Prints an N-deep resolved call tree for a symbol, in either direction | 0.91.0-alpha |
| Circular Dependency Report (worked example) | A worked example: a real four-unit uses cycle, and the report drag-lint produces for it | 0.0.0 |
| Circular Uses Report (cycles + fix plan) | Finds uses cycles among indexed units and, on request, proposes a followable refactoring plan to break them | 0.43.0-alpha |
| Cycles fix (mechanical, compile-gated) | Plans, compile-gates and (with --apply) writes the mechanical fix of one circular uses group, verified against the predicted cycles output | 1.33.0-alpha |
| deps-report | Produces a third-party dependency rollup from an index: which external units/libraries an indexed codebase depends on | 0.95.0-alpha |
| Export Enums (Delphi const) | Uses export enums with --format delphi-const to dump indexed enum types as Delphi const declarations | 0.6.0-alpha |
| Export Graph (DOT) | Uses graph to export the indexed call/reference graph in DOT format, either whole or rooted at a name substring | 0.6.0-alpha |
| Export to Obsidian | Uses export obsidian to write the indexed project out as a set of Obsidian vault markdown pages | 0.6.0-alpha |
| Find Dead Code | Scans the index for code with no references -- candidates to delete | 0.25.0-alpha |
| Forms for testers (CSV) | A CSV of a project's forms, one row per form, telling a tester how to reach each one from the main form | 0.44.0-alpha |
| Impact / Blast Radius (symbol) | Reports what would be affected if a chosen symbol changes -- the set of code to retest | 0.17.0-alpha |
| Reverse Call Tree (clickable, Messages window) | The same reverse call tree, rendered into the IDE's Messages window so each line navigates to the caller | 0.96.0-alpha |
| Reverse Call Tree (who calls this, N-deep) | Builds the tree of callers of a chosen symbol, transitively, to a chosen depth | 0.96.0-alpha |
| Scan TODOs / FIXMEs | Scans source for TODO/FIXME/HACK/XXX/REVIEW/NOTE markers | 0.12.0-alpha |
| Show in Call Graph | Opens the call graph rooted at the symbol represented by a Structure-tree node | 0.96.0-alpha |
| Show Wiring (Spring4D DI + DFM events) | Surfaces bindings the compiler does not make obvious: Spring4D container registrations and DFM event hookups for a type | 0.21.0-alpha |
| Top Symbols (fan-in) | Ranks indexed symbols by fan-in -- how many places reference them | 0.6.0-alpha |
| Uses Report (CSV) | Exports the project's unit-dependency data as a CSV file | 0.40.5-alpha |
Diagrams and charts
Ask a question about a symbol and get a clickable chart.
| Feature | What it does | Since |
|---|---|---|
| ask | Ask one report question and print the answer as text | 1.30.0-alpha |
| Where the charts find Graphviz | The charts find dot.exe by DRAGLINT_DOT, settings.json, the installed layout, PATH, then the shared default | 1.26.1-alpha |
| Chart questions | Every chart question of the Reports submenu and drag-lint ask, imported from REPORT_QUESTIONS | 1.20.2-alpha |
| Charts and the IDE | Ask a chart question, open the answer, read a round-trip trace, jump to RAD Studio | 1.20.1-alpha |
| Compare a report with current code | Reruns a saved or pasted report and shows before / delta / after | 1.28.0-alpha |
| Click-to-source: the draglint:// handler | Registers draglint:// so a chart row opens its line in RAD Studio; a GUI helper exe, no PowerShell | 1.31.0-alpha |
Compiler integration
Compile, fold compiler output into findings, preprocess.
| Feature | What it does | Since |
|---|---|---|
| Add Missing Units to uses (whole unit) | The whole-unit form of the undeclared-identifier quick-fix: resolves every unresolved name in a unit at once and adds the units that declare them | 0.43.0-alpha |
| Compile Buffer (unsaved) | Compiles a project with the current editor buffer's unsaved content substituted for its file on disk, then restores the original file unchanged | 0.0.0 |
| compile-check | Runs a compiler-backed check against a single Delphi project (.dproj) or source file (.pas) and reports the result | 0.26.0-alpha |
| Compile Dependents | Check the units that depend on the one being edited now, instead of waiting for the automatic quiet-period pass (lint-tree tier 3) | 0.0.0 |
| Compile & Diagnose | Compiles a project or unit and folds the compiler's errors and warnings into drag-lint findings | 0.0.0 |
| Full Compile Sweep | Recompiles a project's stale units and refreshes its stored compiler findings, forcing a full build rather than the default stale-count threshold | 1.2.0-alpha |
| ghost-check | Compiles a project with one or more units' content temporarily replaced by their unsaved editor buffers, then restores the original files unchanged | 1.8.0-alpha |
| ghost-recover | Scans a project's hidden D-RAG folder for recovery journals left behind when a ghost-check overlay was interrupted by a crash | 0.64.1-alpha |
| Import Build Log | Parses an external dcc or msbuild build log and folds its errors and warnings into drag-lint's stored findings | 0.8.0-alpha |
| preprocess-file | Diagnostic that prints a file's {$IFDEF}-resolved source to stdout under a given define set | 0.92.0-alpha |
| project-facts | Report what the build does: defines that are on and what sets each, imports, output paths and packages | 1.20.0-alpha |
| Recover Buffer-Compile Files | Restores any file left holding unsaved-buffer content after a Compile Buffer (unsaved) run was interrupted (for example by a crash) | 0.0.0 |
Database and Firebird
SQL scripts, live schema snapshots, ORM links.
| Feature | What it does | Since |
|---|---|---|
| fb-snapshot | Connects to a Firebird database and captures a snapshot into a sqlite index | 0.40.5-alpha |
| link-orm | Links a project's code index to a SQL index so ORM-style relationships between Delphi symbols and SQL objects can be resolved across both | 0.40.5-alpha |
Editor integration
The RAD Studio plugin, the language server, MCP and workspaces.
| Feature | What it does | Since |
|---|---|---|
| drag-lint | This page documents the "View > Tool Windows > drag-lint" menu entry -- the main drag-lint dockable tool window | 0.2.0-alpha |
| drag-lint Graph | This page documents the "View > Tool Windows > drag-lint Graph" menu entry -- the drag-lint graph viewer | 0.10.0-alpha |
| drag-lint Graph (dockable) | Opens the drag-lint graph viewer as a dockable window inside the IDE, so it can sit beside Structure | 0.0.0 |
| drag-lint Options | The plugin's settings dialog for drag-lint: lets you browse and toggle the lint rule catalog | 0.95.0-alpha |
| drag-lint Panel (dockable) | Opens the main drag-lint dockable tool window inside the IDE | 0.0.0 |
| IDE Menu Reference | What every item in the drag-lint menu does | 0.0.0 |
| ide-release | Asks a running drag-lint Delphi IDE plugin not to respawn its drag-lint.exe child processes for a while -- and to drop the running one on its next request | 1.13.0-alpha |
| Installation | Getting the CLI, the IDE plugin, or the LSP running | 0.21.0-alpha |
| lsp | Starts the LSP (Language Server Protocol) stdio server | 0.6.0-alpha |
| Register the MCP server (Claude Code, VS Code) | Adds drag-lint serve to Claude Code and VS Code MCP config: merged, backed up, idempotent, removable | 1.26.1-alpha |
| MCP server | Exposes the index to MCP clients as 15 tools | 0.4.0-alpha |
| serve | Starts the MCP (Model Context Protocol) stdio server, for AI clients such as Claude or Cursor to query a drag-lint index | 0.4.0-alpha |
| Setup installer | One Inno Setup installer for the engine, Graphviz dot, the IDE plugin, ConvRulesEditor, drag-lint-graph and YADF | 1.28.3-alpha |
| workspace add | Registers a project file into a .drag-lint-workspace.json workspace config, so multi-project workspace commands know about it | 0.6.0-alpha |
| workspace index | Indexes every project registered in a .drag-lint-workspace.json workspace config in one pass | 0.6.0-alpha |
| workspace status | Reports the status of every project registered in a .drag-lint-workspace.json workspace config | 0.6.0-alpha |
Maintenance and diagnostics
Which databases cover what, drift checks, raw dumps, self-tests.
| Feature | What it does | Since |
|---|---|---|
| About and Status | The plugin's status window -- versions, connection health, and which indexes are actually in use | 0.15.0-alpha |
| ambiguous-calls | Resolver-coverage diagnostic that reports call sites the engine could not pin to exactly one target -- unresolved or ambiguous calls | 0.91.0-alpha |
| bench-context | Benchmarks the context command by building context bundles for a sample of symbols against a database | 0.18.0-alpha |
| diff | Compares two index databases and reports what changed between them -- for example an index snapshot taken before and after a refactor | 0.13.0-alpha |
| dump-call-edges | Diagnostic that dumps every resolved call edge in the index as refid|targetqname|confidence rows | 0.91.0-alpha |
| dump-refs | Diagnostic that dumps every ref in a file together with its enclosingsymbolid attribution | 0.82.0-alpha |
| Feature registry | The machine-checked master list of every feature, and the generator of the index pages | 1.22.0-alpha |
| info | Prints engine self-info: version, build date, license (MIT), tree-sitter details, and capabilities | 0.19.0-alpha |
| Library Drift Check | Flags registered library roots that have source on disk but nothing in the index | 0.0.0 |
| Maintenance | Indexes, the manifest, reindexing, and what to do when something looks wrong | 0.0.0 |
| Open Plugin Log | Opens the drag-lint plugin's own log file | 0.39.0-alpha |
| shutdown | Ask running lsp engines to close their indexes and stand down, so an index can be rebuilt without killing them | 0.6.0-alpha |
| sql | Runs one read-only SQL statement against an index database and prints the result set | 0.40.5-alpha |