M Lens

Extensão gratuita para o VS Code que tira o Power Query de dentro do Power BI Desktop, com linter, preview dos dados e gravação segura de volta no projeto.

Contexto
Publicada no Marketplace do VS Code
Início
Tipo
Ferramenta de dev
Barra lateral do M Lens no VS Code ao lado do preview de uma query em tabela, com dados de exemplo.

Em números

instalações no Marketplace do VS Code
141
regras de linter para Power Query M
8
textos traduzidos entre inglês e português
200
linhas de TypeScript
4,6 mil

Contado no código em out 2026.

Arquitetura

A extensão lê os arquivos .tmdl do projeto e separa cada query num .pq. Enquanto você edita, o linter analisa a árvore sintática e o preview executa a query com o PQTest. Na volta, ela localiza cada bloco pelo nome, mostra o diff e grava só o que mudou, depois de salvar um backup.

Por que eu fiz

De vez em quando eu preciso mexer em relatórios do Power BI no trabalho, e editar Power Query pelo Power BI Desktop é sofrido: uma janela pequena, sem busca de verdade, sem git, sem jeito de revisar o que mudou. O formato .pbip guarda o modelo em texto, então a peça que faltava era uma ferramenta para editar esse texto com conforto e devolver sem quebrar nada.

O que ela faz

  • Extrai cada query dos arquivos .tmdl para um .pq e grava de volta só o que mudou, localizando o bloco pelo nome e preservando metadados e quebras de linha.
  • Linter em cima da AST do parser oficial da Microsoft, com correções rápidas: step sem uso, nomes genéricos (em inglês e português), Table.Buffer, caminhos fixos e possíveis segredos.
  • Preview dos dados rodando o PQTest do Power Query SDK, com credenciais guardadas no cofre do VS Code e restritas ao servidor de origem.
  • Diff lado a lado antes de aplicar e backup automático de cada arquivo alterado.
  • Barra lateral nativa e painéis que seguem o tema, em inglês e português.

O que eu aprendi

A primeira versão publicada tinha um bug sério: no layout que o Power BI Desktop grava de verdade, ela lia as queries compartilhadas como vazias, e aplicar sem editar nada estragava os metadados do modelo. Os testes passavam porque usavam um exemplo que eu mesmo tinha escrito. Corrigi testando contra arquivos reais, e hoje todo caso novo entra como teste antes da correção.

A outra lição foi de produto: a extensão funcionava, mas era difícil de usar. Ela trocava o tema de ícones de quem instalava, só falava português e tinha 16 comandos. A versão 0.2 é mais sobre tirar coisa do caminho do que sobre feature nova.

gabriel@maciel: ~