aspObelisk (extensão VSCode)
Esboço inicial (v0.1) de integração do VSCode com a CLI aspObelisk.Cli. Cobre os itens de menor esforço/maior valor imediato.
Funcionalidades
Comandos na paleta
Disponíveis via Ctrl+Shift+P:
aspObelisk: Generate Models → aspobelisk generate
aspObelisk: Run Migrations → aspobelisk migrate
aspObelisk: Rollback Last Migration → aspobelisk migrate:rollback
aspObelisk: New Migration... → pede um nome e roda aspobelisk make:migration <nome>
Todos procuram o aspobelisk.json mais próximo no workspace e rodam o comando já na pasta certa (perguntam se encontrarem mais de um).
Arquivos de migration
Suporte a migrations/*.sql:
- Highlighting reaproveitando a gramática SQL nativa do VSCode
- Destaque visual pros marcadores
-- UP/-- DOWN
- Folding do bloco
UP (o bloco DOWN ainda não tem um marcador de fechamento próprio, então não dobra sozinho - ver Limitações)
Autocomplete nos models gerados
A extensão escaneia todo .asp do workspace procurando Class Model_X + Function X(), e monta uma tabela de símbolos (colunas, relações) por model. Ao digitar . (ou " dentro de Include(/Related() logo após uma chamada encadeada a partir da função-fábrica gerada (Usuarios().Where(...).), sugere:
- as colunas do model (
Nome, Email, ...);
- os métodos fluentes fixos (
Where, OrderBy, Include, Find, Save, ...), como snippets já com os parênteses/placeholders;
- os nomes de relação registrados (
BelongsTo/HasMany), tanto como argumento de Include("...")/Related("...") quanto como atalho Include("pedidos") pronto.
A tabela de símbolos é reconstruída sempre que um .asp muda, é criado ou é apagado.
Rastreio de variável
Também funciona quando o resultado da fábrica é guardado numa variável antes de usar (Set u = Usuarios().Find(9) ... depois u. completa igual). A extensão varre o arquivo atual procurando Set var = <cadeia> e propaga esse mapeamento até por variáveis encadeadas (Set y = u.Where(...)). É heurística de arquivo inteiro, "última atribuição antes do cursor vence" — sem noção de escopo (Sub/Function) ou de branch (If/Else), o suficiente pro uso comum de guardar o resultado e usar pouco depois.
Colunas dentro de argumentos que esperam nome de coluna
Em SelectFields("...") (lista separada por vírgula, exclui as colunas já listadas), e no primeiro argumento de Where, OrWhere, WhereIn, WhereNull, WhereNotNull, WhereBetween, OrderBy e Value — sempre os nomes de coluna reais do model (id, nome, email, ...), não as propriedades PascalCase (Nome), já que é isso que a API espera como string. WhereRaw fica de fora de propósito — o primeiro argumento dele é um fragmento de SQL livre, não um nome de coluna.
Obelisk. (o client gerado)
Digitar Obelisk. sozinho sugere o nome de cada model (Usuarios, Pedidos, ...) mais Configure/GetConnection. Continuar a partir daí (Obelisk.Usuarios.Where(...).) funciona igual a Usuarios().Where(...). — é o mesmo model, só um caminho de acesso diferente. Case-insensitive (obelisk.usuarios funciona igual), consistente com o VBScript.