Delphi Code Navigation
Go to Definition, Find References e CodeLens para código Pascal/Delphi no VS Code e Cursor — com escopo por projeto (.dproj, monorepo), sem depender do RAD Studio ou do Code Insight.
Navegue no seu código Delphi como em um IDE moderno: Ctrl+click, F12, Shift+F12 e contagem de referências acima das declarações.
Recursos
| Recurso |
Atalho / gesto |
| Ir para definição |
Ctrl+click / F12 |
| Encontrar referências |
Shift+F12 |
| Referências na declaração |
Clique em "N referências" acima da linha (CodeLens) |
| Múltiplos resultados |
Peek automático (lista embutida) |
| Projeto ativo (monorepo) |
Status bar Delphi: NomeDoProjeto |
| Indexação completa |
Paleta → Delphi: Indexar projeto ativo |
Requisitos
- Extensão Pascal (syntax highlighting; dependência declarada)
- Abrir a pasta raiz do projeto Delphi no VS Code/Cursor (não apenas um arquivo solto)
- Arquivos
.pas, .dpr, .dpk, .inc com language ID pascal (padrão da extensão Pascal)
Início rápido
- Instale Delphi Code Navigation pela Marketplace do VS Code ou Cursor
- Abra a pasta do monorepo ou projeto Delphi
- Abra qualquer
.pas e use F12 / Shift+F12
A extensão detecta automaticamente o projeto ativo:
*.delphilsp.json (Delphi LSP no repo) — escopo via projectFiles
*.dproj — units em DelphiCompile / DCCReference
- Fallback —
.dpr mais próximo + manifesto gerado em cache local
Em monorepos, units compartilhadas resolvem para o projeto mais próximo na árvore de pastas. Clique na status bar para trocar manualmente quando necessário.
Após mudanças grandes no projeto (muitos arquivos novos ou alterados), rode Delphi: Indexar projeto ativo uma vez para navegação mais rápida (opcional no dia a dia).
Configuração
| Setting |
Padrão |
Descrição |
delphi.navigation.include |
**/*.{pas,dpr,dpk,inc} |
Arquivos incluídos na busca (modo workspace) |
delphi.navigation.exclude |
__history, Win32, dcu, etc. |
Pastas/arquivos excluídos |
delphi.navigation.maxResults |
200 |
Limite de resultados por busca |
delphi.navigation.codeLens |
true |
Mostrar "N referências" acima de declarações |
delphi.navigation.codeLensScope |
auto |
Contagem no CodeLens: auto (arquivo → projeto), project ou file (só arquivo) |
delphi.navigation.projectScope |
auto |
auto = projeto ativo; workspace = busca legada em todo o workspace |
delphi.navigation.includeLibraryPaths |
false |
Incluir paths -I do delphilsp (experimental) |
delphi.navigation.referencesOnComplete |
auto |
auto = abre Peek ao terminar (CodeLens); notify = toast com botão Mostrar |
delphi.navigation.referencesProgressDelayMs |
300 |
Atraso antes do toast de progresso na busca de referências |
{
"delphi.navigation.projectScope": "auto",
"delphi.navigation.include": ["**/*.{pas,dpr,dpk,inc}"],
"delphi.navigation.exclude": [
"**/{__history,Win32,Win64,node_modules,.git}/**",
"**/*.{dcu,exe,dll,res}"
],
"delphi.navigation.maxResults": 200
}
Comandos
| Comando |
Descrição |
Delphi: Mostrar Referências |
Abre referências (usado pelo CodeLens) |
Delphi: Selecionar projeto ativo |
Quick Pick para override manual |
Delphi: Indexar projeto ativo |
Rebuild completo do índice em globalStorage |
O índice é atualizado incrementalmente ao abrir/salvar arquivos.
Feedback na busca de referências
Ao buscar referências (CodeLens, Shift+F12 ou comando), a extensão mostra:
- Toast de progresso após ~300 ms (configurável) — "Buscando referências de Ident..."
- Status bar com spinner —
Delphi: buscando Ident...
Recliques durante a busca reutilizam a mesma requisição (sem reiniciar). Com referencesOnComplete: auto (padrão), o Peek abre automaticamente ao concluir.
No modo codeLensScope: auto (padrão), o CodeLens mostra primeiro a contagem no arquivo e atualiza para o total no projeto quando a busca termina — alinhado com Shift+F12.
Como funciona
- Resolve o projeto Delphi ativo pelo arquivo aberto
- Extrai o identificador sob o cursor
- Consulta índice persistente (se disponível) ou busca nos arquivos do projeto
- Filtra ocorrências em comentários e strings
- Classifica declarações vs usos e ranqueia resultados
- Retorna a melhor definição ou lista para Peek
Caso especial: uses
Ctrl+click em um nome de unit na cláusula uses busca unit Nome; no escopo do projeto — inclusive nomes com pontos (ex.: Gsoft.Libs.Consulta.View.Emitente).
Limitações
- Sem análise de escopo completa (variável local vs field com mesmo nome)
- Manifesto gerado não replica
dccOptions completo — só arquivos do projeto
- Generics,
with, {$IF} podem gerar falsos positivos
- Units em N projetos usam heurística de pasta; override manual na status bar