11 KiB
| id | ticket | title | status | created | resolved | decision | tags | |||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| AGD-0038 | pbs-lsp-editor-assistance-wave-1 | Wave 1 de assistencia editorial via LSP para PBS no VS Code | accepted | 2026-05-08 | 2026-05-08 | DEC-0035 |
|
Pain
O stack atual de PBS no VS Code ja entrega duas capacidades relevantes:
- diagnostics basicos;
- semantic highlighting com tema frontend-owned.
Mas ele ainda nao entrega o minimo de assistencia editorial para um fluxo real de escrita de codigo:
- nao existe
completion; hoverainda eh placeholder;- nao existe
signature help.
Sem isso, o editor continua servindo mais como viewer colorido com erros do que como ambiente minimamente utilizavel para escrever PBS com conforto.
Context
Domain owner: studio
Subdomains touched:
studio/lspcompiler/pbscompiler/general
Estado atual observado no codigo:
- o servidor anuncia
hoveresemanticTokens, mas nao anunciacompletionProvider,signatureHelpProvideroudocumentFormattingProvider; - o bridge interno do LSP so expõe
describeServer,analyzeDocument,hover,semanticTokenseonSave; hoverhoje retorna texto fixo, sem usar simbolo, assinatura, tipo ou docs;- o pipeline do compiler ja consegue analisar overlay do documento e possui superficies semanticas e de linking relevantes no PBS;
- o highlighting recente ja resolve bastante informacao lexical e parte da superficie stdlib/imports.
Esta agenda trata apenas da wave 1 de assistencia editorial. Ela nao tenta fechar todo o problema de IDE features.
Open Questions
- Qual deve ser o escopo minimo de
completionpara chamarmos essa wave de utilizavel? - Qual deve ser o escopo minimo de
completionpara chamarmos essa wave de utilizavel? R: keywords, nomes locais em escopo, simbolos importados/publicos, e members apos.para superfícies reconhecidas (service,host,builtin type,structe constructors/funcoes relacionados). Sem isso, a feature ainda nao ajuda na descoberta real da API. completiondeve nascer apenas com heuristicas lexicais/sintaticas, ou ja deve usar semantica e linking do compiler onde isso for viavel?completiondeve nascer apenas com heuristicas lexicais/sintaticas, ou ja deve usar semantica e linking do compiler onde isso for viavel? R: deve nascer compiler-backed sempre que a informacao ja existir de forma confiavel no pipeline semantico/linking. Heuristica local pode existir apenas como complemento estritamente limitado para casos ainda nao resolvidos, nunca como segunda semantica canônica.- Em
hover, quais informacoes sao obrigatorias na primeira entrega: assinatura, kind, modulo de origem, tipo inferido, documentacao? - Em
hover, quais informacoes sao obrigatorias na primeira entrega: assinatura, kind, modulo de origem, tipo inferido, documentacao? R: obrigatorios:kind, assinatura quando aplicavel, modulo/origem quando relevante, e tipo/shape basico quando houver. Documentacao textual eh desejavel para stdlib e builtins, mas nao deve bloquear a wave 1 se a infraestrutura de docstring ainda nao existir. Se a linguagem vier a adotar algo comoDocument(...)com markdown pronto para hover, isso deve nascer em discussao propria; nesta wave atual, basta preparar o local de consumo para documentacao opcional quando ela existir. signature helpdeve usar a mesma fonte semantica dehover/completion, ou pode nascer numa implementacao mais local para chamadas conhecidas?signature helpdeve usar a mesma fonte semantica dehover/completion, ou pode nascer numa implementacao mais local para chamadas conhecidas? R: deve usar a mesma base semantica. O objetivo da wave eh justamente evitar tres caminhos tecnicos diferentes para responder "qual assinatura esta sendo chamada?".- Como tratar membros de stdlib, aliases importados, services, hosts, builtin types e metodos de struct sem criar uma segunda semantica paralela no LSP?
- Como tratar membros de stdlib, aliases importados, services, hosts, builtin types e metodos de struct sem criar uma segunda semantica paralela no LSP? R: o LSP deve perguntar ao compiler por uma superficie editorial/resolutiva unica, derivada das mesmas fontes usadas para analise, linking, stdlib e metadata do frontend. O LSP nao deve reconstruir manualmente tabelas paralelas de membros.
- Esta wave deve incluir
go to definition, ou isso deve ficar explicitamente fora do escopo para nao diluir a entrega? - Esta wave deve incluir
go to definition, ou isso deve ficar explicitamente fora do escopo para nao diluir a entrega? R: deve ficar fora do escopo desta wave. Ele eh um proximo passo natural, mas nao eh requisito para chamarcompletion + hover + signature helpde minimamente utilizaveis. - Formatacao e identacao automatica devem ficar fora desta agenda como non-goal explicito?
- Formatacao e identacao automatica devem ficar fora desta agenda como non-goal explicito? R: sim. Podem virar discussao/plan posterior. Nesta wave, elas seriam custo adicional sem impacto proporcional comparado a completion/hover/signature help.
Options
Option A - Completion e hover por heuristica leve, com signature help posterior
- Approach: implementar
completionusando contexto local, imports, keywords e alguns casos de member access, implementarhovercom informacao minima, e deixarsignature helppara uma wave seguinte. - Pro: menor custo inicial e menor risco de travar na arquitetura semantica.
- Con: pode criar uma primeira entrega inconsistente, especialmente em chamadas de stdlib e tipos importados, e pode forcar refactor cedo demais depois.
- Maintainability: media.
Option B - Wave 1 coerente com completion, hover e signature help sobre uma mesma base semantica
- Approach: desenhar uma pequena superficie de assistencia editorial no LSP que use uma base comum para resolver simbolos, membros e assinaturas. Entregar juntos:
- completion minimo utilizavel;
- hover real;
- signature help em chamadas.
- Pro: evita duplicacao conceitual e produz uma experiencia de editor mais consistente desde a primeira wave.
- Con: custo maior de desenho e implementacao agora.
- Maintainability: forte.
Option C - Adiar assistencia semantica e depender do VS Code + snippets
- Approach: manter diagnostics e colors como estao, adicionar no maximo snippets ou pequenas ajudas na extensao.
- Pro: quase nenhum custo de backend.
- Con: nao resolve o problema real; o editor continua insuficiente para escrita cotidiana de PBS.
- Maintainability: fraca.
Tradeoffs
Option C nao fecha a dor real e deve ser descartada.
Option A parece atraente para ganhar velocidade, mas carrega um risco ruim:
- introduzir
completion,hovere depoissignature helppor caminhos tecnicos diferentes; - duplicar logica entre parser local, heuristicas e linking;
- e transformar a wave 2 num retrabalho de consolidacao.
Option B custa mais, mas o custo eh justificavel porque estas tres features se apoiam nas mesmas perguntas:
- o que este simbolo representa?
- quais membros ele expõe?
- qual eh a assinatura desta chamada?
- qual o modulo/origem deste item?
Se essas perguntas forem respondidas por uma base comum, a wave 1 fica mais coerente e abre caminho natural para futuras features como definition, references e inlay hints via LSP.
Recommendation
Seguir com Option B.
A recomendacao eh abrir uma wave 1 coerente de assistencia editorial com:
completionminimo utilizavel;hoverfuncional;signature helpfuncional.
Escopo minimo recomendado para completion:
- keywords;
- simbolos locais em escopo;
- nomes importados/publicos relevantes;
- members apos
.para stdlib, builtin types, structs e services/hosts reconhecidos.
Escopo minimo recomendado para hover:
- kind do simbolo;
- assinatura quando aplicavel;
- modulo/origem quando relevante;
- tipo ou shape basico quando isso existir de forma confiavel.
Escopo minimo recomendado para signature help:
- chamadas de funcao/metodo/construtor;
- parametro ativo;
- labels consistentes com a mesma representacao de assinatura usada no hover.
Discussion
O ponto principal desta agenda nao eh “adicionar IDE features” genericamente.
O ponto principal eh definir a primeira wave de superfícies de assistencia que tiram o PBS no VS Code do estado de:
- diagnostics + coloracao
para um estado de:
- escrita assistida minima, com descoberta de API e leitura de assinatura.
Isso exige disciplina de boundary.
O VS Code extension nao deve inventar semantica local. O servidor LSP deve continuar sendo o owner da assistencia editorial.
Da mesma forma, o LSP nao deve criar uma semantica paralela desconectada do compiler se ja existe informacao aproveitavel em parser, linking, stdlib e superficies semanticas do PBS.
Tambem vale explicitar o que fica fora desta agenda:
- formatter completo;
- identacao automatica robusta de documento;
- quick fixes;
- definition/references;
- rename;
- code actions mais amplas.
Esses itens podem virar agenda posterior.
Tambem fica registrado um criterio importante de arquitetura:
- o primeiro passo nao eh encher o protocolo de features;
- o primeiro passo eh criar uma base editorial coerente no lado
compiler/pbs+studio/lspque consiga responder simbolo, members e assinatura; completion,hoveresignature helpsao projeções diferentes sobre a mesma base.
E um criterio adicional de preparacao editorial:
- a wave 1 deve prever um campo/superficie opcional de documentacao no modelo editorial resolvido por simbolo;
- mas a autoria dessa documentacao na linguagem PBS, inclusive eventual anotacao
Document(...)com markdown, fica fora desta agenda e pode seguir para discussao separada.
Resolution
Resolucao preliminar:
- a wave 1 deve ser considerada valida quando o VS Code conseguir oferecer descoberta minima de API, leitura de assinatura e ajuda em chamadas sem depender de conhecimento local na extensao;
completion,hoveresignature helpdevem nascer sobre uma mesma base compiler-backed;go to definition, formatter e outras features de IDE ficam explicitamente fora do escopo.
Se esta leitura fizer sentido, o proximo passo eh aceitar a agenda e fechar uma decision que:
- defina o escopo normativo exato de
completion,hoveresignature help; - fixe o boundary entre
compiler/pbs,studio/lspetools/vscode-extension; - declare explicitamente os non-goals desta wave;
- determine se a base deve nascer compiler-backed desde o inicio ou com alguma heuristica local estritamente limitada.
Next Step
Se voce concordar com o enquadramento, eu converto esta agenda em accepted e escrevo a decision normativa da wave 1 de assistencia editorial para PBS no VS Code.