Skip to content

Adiciona TaskProvider para executar/testar projetos Liquido pelo edit… - #124

Merged
leonelsanchesdasilva merged 1 commit into
DesignLiquido:principalfrom
oxbar:adiciona-task-provider-105
Jul 27, 2026
Merged

Adiciona TaskProvider para executar/testar projetos Liquido pelo edit…#124
leonelsanchesdasilva merged 1 commit into
DesignLiquido:principalfrom
oxbar:adiciona-task-provider-105

Conversation

@oxbar

@oxbar oxbar commented Jul 27, 2026

Copy link
Copy Markdown
Contributor

Executar e testar projetos Liquido a partir do editor (TaskProvider)

Fixes #105

Problema

A extensão não registrava TaskProvider, não criava terminais e não expunha botão de execução. Não havia caminho no editor para subir o servidor de desenvolvimento, criar um projeto (liquido novo), gerar código (liquido gerar), gerar documentação OpenAPI ou rodar a suíte de testes — todo o ciclo dependia de alternar para um terminal externo e decorar comandos. Havia ainda três activationEvents apontando para comandos inexistentes (getProgramName, runEditorContents, debugEditorContents).

Solução

Um TaskProvider que expõe os comandos do CLI liquido (servidor, novo, gerar, documentar, banco iniciar, testes), com estratégias distintas por ambiente — seguindo diretamente a orientação de viabilidade Web dada na issue:

Desktop (fontes/tarefas/provedor-tarefas-desktop.ts) → ShellExecution chamando o binário local node_modules/.bin/liquido. O servidor é marcado como tarefa de fundo (isBackground), em painel dedicado; os demais são de execução curta.

Web (fontes/tarefas/provedor-tarefas-web.ts) → o host de extensão Web não tem shell nem child_process, então ShellExecution não funciona. Cada comando usa CustomExecution: o callback devolve um Pseudoterminal (fontes/tarefas/pseudoterminal-liquido.ts) que roda como JS dentro do web worker. O servidor de desenvolvimento, que exige HTTP real, é corretamente omitido no Web.

Catálogo compartilhado (fontes/tarefas/comandos-liquido.ts) descreve cada comando, seus argumentos de CLI e sua disponibilidade por ambiente — a única fonte de verdade que os dois provedores consomem.

Contribuições no package.json

  • taskDefinitions do tipo liquido (com a propriedade comando);
  • seis comandos de conveniência extension.designliquido.liquido.* que disparam a tarefa correspondente (permitindo atalhos e botões);
  • botão iniciar servidor na barra de título do editor (editor/title/run) para arquivos Delégua e Pituguês;
  • remoção dos três activationEvents órfãos.

Correção acessória (activation events órfãos)

Os três activationEvents que apontavam para comandos inexistentes (getProgramName, runEditorContents, debugEditorContents) — vestígios de um modelo de execução nunca implementado — foram removidos, já que este PR entrega o modelo de execução de fato. Fecha também a issue de limpeza mencionada no corpo do #105.

Observação de escopo (ambiente Web)

O escopo Web foi implementado com honestidade sobre o que é verificável hoje:

  • a base já roteia as tarefas de scaffolding por CustomExecution e trata o servidor como indisponível no Web (com mensagem clara, não falha silenciosa);
  • a execução de fato dos comandos de scaffolding dentro do worker depende da API JS do Liquido publicada para Web, ainda não disponível no pacote — o pseudoterminal reporta esse estado explicitamente;
  • a evolução do servidor no Web (Service Worker interceptando fetch para um host virtual, ou WebContainers, conforme descrito na issue) fica para um passo seguinte, sobre a fundação que este PR estabelece.

No desktop, todos os comandos funcionam via ShellExecution sem ressalvas.

Testes

Novo testes/tarefas/provedores-tarefas.test.ts (12 casos):

  • catálogo: comandos essenciais presentes, só o servidor marcado como requerServidor, comandoPorId resolve e recusa desconhecido;
  • desktop: uma tarefa por comando, ShellExecution com o binário local e os argumentos corretos (incluindo banco iniciar como dois argumentos), servidor como isBackground em painel dedicado, resolveTask reconstrói conhecida e ignora desconhecida;
  • web: servidor omitido, scaffolding via CustomExecution, resolveTask recusa o servidor;
  • pseudoterminal: encerra com erro no servidor e reporta o comando de scaffolding.

Mock de vscode.tasks adicionado aos testes de extensão (extensao.test.ts e extensao-web.test.ts), pois o activate agora registra o provedor de tarefas.

testes/tarefas + extensão: 37 testes passando
Suíte de produção: 980 testes passando (970 originais + 10 novos)
tsc --noEmit: sem novos erros de tipo

Nota sobre a suíte de LMHT

Na execução completa da suíte, dois casos da versão atual de testes/completude/lmht-provedor-completude.test.ts na principal falham de forma sensível à ordenação de suítes (vazamento de jest.mock entre workers). É pré-existente e não causado por este PR — reproduz-se na principal sem esta mudança, e é justamente o que o PR do achado A4 (completude de LMHT) reescreve e elimina.

Checklist

  • TaskProvider com servidor, novo, gerar, documentar, banco iniciar e testes
  • Desktop via ShellExecution; Web via CustomExecution + Pseudoterminal
  • Servidor de desenvolvimento omitido no Web (exige HTTP real)
  • Botão de execução na barra de título do editor
  • Três activationEvents órfãos removidos
  • 12 testes de regressão novos; ambiente Web documentado com honestidade

…or (DesignLiquido#105)

A extensão não tinha como executar um projeto Liquido a partir do
editor: sem TaskProvider, sem terminal, sem botão. Todo o ciclo
dependia de um terminal externo. Havia ainda três activationEvents
apontando para comandos inexistentes (getProgramName,
runEditorContents, debugEditorContents).

Este commit adiciona tarefas para os comandos do CLI liquido (servidor,
novo, gerar, documentar, banco iniciar, testes), com estratégias
distintas por ambiente, seguindo a orientação de viabilidade Web da
issue:

- Desktop (fontes/tarefas/provedor-tarefas-desktop.ts): ShellExecution
  chamando o binário local node_modules/.bin/liquido. O servidor é
  marcado como tarefa de fundo, em painel dedicado; os demais são de
  execução curta.
- Web (fontes/tarefas/provedor-tarefas-web.ts): o host Web não tem
  shell nem child_process, então usa CustomExecution — o callback
  devolve um Pseudoterminal que roda como JS no web worker
  (fontes/tarefas/pseudoterminal-liquido.ts). O servidor de
  desenvolvimento, que exige HTTP real, é omitido no Web.
- Catálogo compartilhado (fontes/tarefas/comandos-liquido.ts) descreve
  cada comando, seus argumentos de CLI e sua disponibilidade por
  ambiente.

Contribuições no package.json: taskDefinitions do tipo 'liquido', seis
comandos de conveniência (extension.designliquido.liquido.*) que
disparam a tarefa correspondente, e um botão de iniciar servidor na
barra de título do editor para arquivos Delégua e Pituguês. Os três
activationEvents órfãos foram removidos.

Escopo honesto sobre o ambiente Web: a base já roteia as tarefas de
scaffolding por CustomExecution e o servidor é corretamente tratado
como indisponível no Web, mas a execução de fato dos comandos de
scaffolding dentro do worker depende da API JS do Liquido publicada
para Web, ainda não disponível — o pseudoterminal reporta esse estado
com clareza, em vez de falhar em silêncio. A evolução do servidor no
Web (Service Worker interceptando fetch, ou WebContainers) fica para um
passo seguinte.

Testes: novo testes/tarefas/provedores-tarefas.test.ts (12 casos)
cobrindo o catálogo, o provedor desktop (ShellExecution com os
argumentos corretos, servidor como background/painel dedicado,
resolveTask), o provedor Web (CustomExecution, servidor omitido) e o
pseudoterminal. Mock de vscode.tasks adicionado aos testes de extensão.

Fixes DesignLiquido#105

@leonelsanchesdasilva leonelsanchesdasilva left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Obrigado!

@leonelsanchesdasilva
leonelsanchesdasilva merged commit f249146 into DesignLiquido:principal Jul 27, 2026
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Não é possível executar/testar um projeto Liquido a partir do editor

2 participants