Skip to content

fix: detectar projetos Líquido por configuracao.delprops - #136

Merged
leonelsanchesdasilva merged 1 commit into
DesignLiquido:principalfrom
oxbar:fix/108-deteccao-projeto-liquido
Aug 5, 2026
Merged

fix: detectar projetos Líquido por configuracao.delprops#136
leonelsanchesdasilva merged 1 commit into
DesignLiquido:principalfrom
oxbar:fix/108-deteccao-projeto-liquido

Conversation

@oxbar

@oxbar oxbar commented Aug 5, 2026

Copy link
Copy Markdown
Contributor

Detecção real de projetos Líquido por configuracao.delprops

Fixes #108

Problema

A extensão identificava o contexto de um projeto Líquido verificando se o caminho do arquivo continha uma pasta chamada rotas/.

Essa heurística era frágil em três direções:

  1. Ignorava arquivos em modelos/, visoes/, parciais/, estilos/ e outras camadas que também fazem parte de uma aplicação Líquido;
  2. Não consultava configuracao.delprops, que é o marcador real do projeto e contém as propriedades de arquétipo e linguagem;
  3. Produzia falso positivo em qualquer projeto não Líquido que tivesse uma pasta chamada rotas/.

Na prática, o contexto especializado de Líquido ficava limitado à organização física das pastas, em vez de ser determinado pela configuração real da aplicação. Isso impedia que modelos, visões, parciais e estilos recebessem o mesmo tratamento das rotas e ainda permitia ativar o comportamento Líquido em projetos que não eram Líquido.

A mesma heurística também era usada na reanálise disparada após alterações em configuracao.delprops, mantendo a inconsistência tanto na extensão desktop quanto na extensão web.

Solução

A heurística baseada em /rotas/ foi substituída pela detecção real do projeto, procurando configuracao.delprops do diretório do documento até a raiz do workspace.

fontes/liquido/configuracao-projeto-liquido.ts — concentra a lógica pura de leitura e localização da configuração:

  • extrai liquido.arquetipo e liquido.linguagem;
  • normaliza caixa e acentuação (Deléguadelegua, Pituguêspitugues);
  • usa Delégua como linguagem padrão quando liquido.linguagem não está declarada;
  • ignora comentários // sem quebrar sequências que estejam dentro de strings;
  • procura a configuração do diretório mais próximo até a raiz do workspace;
  • prioriza o configuracao.delprops mais próximo, permitindo projetos aninhados em monorepos.

fontes/liquido/deteccao-projeto-liquido.ts — integra a detecção ao sistema de arquivos do VS Code:

  • usa vscode.workspace.fs, mantendo compatibilidade com desktop, web e workspaces virtuais;
  • preserva scheme e authority das URIs;
  • mantém cache da detecção por workspace e diretório;
  • identifica alterações relacionadas especificamente a configuracao.delprops;
  • verifica se a linguagem configurada corresponde à extensão do arquivo analisado;
  • mantém comportamento defensivo para ambientes de teste com mocks parciais do VS Code.

fontes/analise-codigo/index.ts — passa a selecionar o contexto especializado de Delégua e Pituguês pela configuração real do projeto:

  • remove a dependência da regex de caminho /rotas/;
  • ativa o contexto Líquido para qualquer camada situada sob a raiz detectada;
  • mantém o analisador normal em projetos sem configuracao.delprops;
  • evita ativar Delégua Líquido em um projeto configurado para Pituguês, e vice-versa;
  • inclui raiz, arquétipo e linguagem na chave do cache de definições;
  • permite injetar opcionalmente a função de detecção em testes, mantendo detectarProjetoLiquido como implementação padrão em produção.

A injeção opcional deixa os testes determinísticos e evita dependência de ordem de importação, cache de módulos, jest.mock, jest.spyOn ou simulações completas de workspace.fs.

fontes/liquido/reanalisar-documentos-projeto-liquido.ts — centraliza a invalidação de cache e a reanálise dos documentos abertos afetados:

  • invalida o cache de detecção antes da nova análise;
  • restringe a reanálise às linguagens suportadas;
  • considera a raiz afetada pela configuração criada, salva, removida ou renomeada;
  • também reanalisa documentos que deixaram de pertencer a um projeto após a remoção ou renomeação do marcador.

fontes/extensao.ts e fontes/extensao-web.ts — passam a usar o mesmo fluxo para:

  • salvar configuracao.delprops;
  • criar configuracao.delprops;
  • excluir configuracao.delprops;
  • renomear de ou para configuracao.delprops.

Com isso, desktop e web passam a atualizar o contexto Líquido sem exigir a reinicialização da extensão.

Testes

Este PR adiciona testes/liquido/configuracao-projeto-liquido.test.ts, com 7 casos de regressão:

  1. Lê arquétipo e linguagem Delégua, normalizando acentuação e ignorando comentários;
  2. Normaliza Pituguês e preserva o arquétipo MVC;
  3. Usa Delégua como linguagem padrão quando a propriedade não existe;
  4. Procura a configuração do diretório do arquivo até a raiz do workspace;
  5. Detecta um projeto para arquivos em modelos/, sem depender de rotas/;
  6. Não produz falso positivo para uma pasta rotas/ sem configuracao.delprops;
  7. Prioriza o projeto aninhado mais próximo em monorepos.

Também atualiza os testes de testes/analise-codigo/index.test.ts para validar o comportamento da análise após a troca da heurística:

  1. Adiciona o alias liquido quando a classe Liquido está disponível em um projeto detectado;
  2. Adiciona os aliases requisicao e resposta;
  3. Adiciona todos os aliases de contexto quando as três classes estão disponíveis;
  4. Confirma que uma pasta rotas/ sem configuracao.delprops não ativa o contexto;
  5. Confirma que a ausência das classes de contexto não provoca erro;
  6. Confirma que os aliases são objetos distintos e possuem o lexema em minúsculas.

Os testes de testes/extensao.test.ts cobrem o fluxo de ativação e os eventos de invalidação e reanálise relacionados à configuração do projeto.

Validação focada da issue

Para executar somente as suítes diretamente relacionadas à issue #108:

yarn jest \
  testes/liquido/configuracao-projeto-liquido.test.ts \
  testes/analise-codigo/index.test.ts \
  testes/extensao.test.ts \
  --runInBand

Resultado obtido:

Test Suites: 3 passed, 3 total
Tests:       49 passed, 49 total
Snapshots:   0 total
Time:        4.292 s

A validação focada foi executada com sucesso em 5 de agosto de 2026.

Se a quantidade de testes mudar por atualizações posteriores da branch, o requisito continua sendo que as três suítes listadas terminem sem falhas.

Validações adicionais antes do merge

yarn typecheck
yarn testes-unitarios --runInBand
yarn build-base
yarn compilar-web

Validação manual recomendada

  1. Abrir um projeto Líquido com configuracao.delprops na raiz;
  2. Confirmar o contexto especializado em arquivos de modelos/, visoes/, parciais/, estilos/ e rotas/;
  3. Abrir um projeto comum com uma pasta rotas/, mas sem configuracao.delprops, e confirmar que o contexto Líquido não é ativado;
  4. Alterar liquido.linguagem entre Delégua e Pituguês e confirmar a reanálise dos documentos abertos;
  5. Criar, salvar, renomear e excluir configuracao.delprops e confirmar a atualização sem reiniciar o VS Code;
  6. Repetir o fluxo na extensão desktop e no VS Code Web.

Observação de escopo

Esta mudança implementa a fundação solicitada na issue: detecção confiável do projeto e leitura de arquétipo e linguagem.

A navegação entre camadas (rota ↔ visão ↔ estilo ↔ modelo) e o painel lateral com o mapa da aplicação tornam-se possíveis a partir desse contexto, mas não fazem parte deste PR.

Checklist

  • Detecção baseada na presença de configuracao.delprops
  • Leitura de liquido.arquetipo e liquido.linguagem
  • Normalização de Delégua e Pituguês com ou sem acentuação
  • Contexto Líquido disponível fora de rotas/
  • Falso positivo de pasta rotas/ eliminado
  • Correspondência entre linguagem configurada e extensão analisada
  • Suporte a projetos aninhados e monorepos
  • Cache de detecção por workspace e diretório
  • Invalidação após salvar, criar, excluir ou renomear a configuração
  • Implementação compartilhada pelas extensões desktop e web
  • Injeção de dependência opcional para testes determinísticos da análise
  • 7 testes unitários novos para leitura e localização da configuração
  • Testes de aliases atualizados para a detecção real do projeto
  • yarn typecheck executado com sucesso
  • Validação focada da issue executada com sucesso — 49/49 testes
  • Suíte unitária completa executada com sucesso
  • Builds desktop e web executados com sucesso
  • Validação manual realizada no VS Code

@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 0be4319 into DesignLiquido:principal Aug 5, 2026
6 checks passed
leonelsanchesdasilva added a commit that referenced this pull request Aug 5, 2026
- LMHT:
  - Nova estrutura `titulo`/`título`, de uso contextual: título do documento, legenda do formulário ou da tabela, dependendo da estrutura pai.
- Liquido:
  - Completude de FolEs passa a ser contextual e a sugerir valores (#138);
  - Detecção de projetos Líquido passa a considerar `configuracao.delprops` (#136).
- Núcleo de Delégua atualizado para a versão 1.26.2:
  - Salvaguarda em tradução de Delégua para JavaScript quando `argumentos` de dicionário poderia estar indefinido (resolve DesignLiquido/delegua#1404);
  - Correção em tradução de Delégua para Python em caso de Fibonacci (resolve DesignLiquido/delegua#1403);
  - Correção em tradução de JavaScript para Delégua que permitia `x[1]` virar `x.1`, o que não é código JS válido (resolve DesignLiquido/delegua#1401);
  - Reestruturação do tradutor x64.
- Atualização periódica de pacotes.
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.

Detecção de projeto Liquido é heurística de caminho frágil, não detecção real

2 participants