Se guardar um ficheiro gerado no VS Code no seu Mac continuar a alterar o respetivo conteúdo, identifique primeiro qual o formatador que está a ser executado. A definição editor.formatOnSave do VS Code aplica a formatação quando um ficheiro é guardado, mas o VS Code não disponibiliza um padrão de caminho integrado que isente ficheiros selecionados dessa definição. No caso de um formatador como o Prettier, utilize o seu próprio ficheiro ignore; caso contrário, desative o format-on-save num âmbito adequado aos ficheiros que precisa de proteger.

Identificar o que está a alterar o ficheiro

O VS Code pode formatar ao guardar através de editor.formatOnSave, e as extensões de linguagem podem fornecer formatadores. Uma Code Action no momento de guardar, como a organização de importações, é uma definição separada e também pode alterar o conteúdo do ficheiro. A documentação de edição do VS Code descreve o format-on-save; o seu guia de Code Actions on Save aborda as ações no momento de guardar.

Para identificar a causa, abra o ficheiro gerado, verifique o seu modo de linguagem na barra de estado e pesquise nas Definições (Settings) por formatOnSave e codeActionsOnSave. O filtro @modified nas Definições pode ajudar a revelar os valores configurados. Se o ficheiro se alterar apesar de a formatação estar desativada, inspecione as extensões instaladas e os scripts do projeto: um gerador ou outra ação ao guardar podem ser os responsáveis. Desativar a formatação não impedirá uma ferramenta independente de reescrever o ficheiro.

Excluir caminhos gerados ao utilizar o Prettier

Se o Prettier for o formatador, adicione o caminho gerado ao ficheiro .prettierignore na raiz do projeto. Por exemplo, para ignorar ficheiros gerados em src/generated, utilize esta entrada:

src/generated/

O Prettier documenta o .prettierignore como o seu mecanismo de exclusão de ficheiros e refere que as integrações de editores podem utilizá-lo. Os seus padrões usam a sintaxe do Git-ignore. Esta é a opção mais direcionada quando pretende que o format-on-save continue ativo para outros ficheiros geridos pelo Prettier. Confirme se o formatador selecionado para este ficheiro é realmente o Prettier; outro formatador poderá utilizar regras ou controlos de exclusão diferentes. Prettier: Ignoring Code

Desativar a formatação num âmbito adequado do VS Code

No Mac, prima ⇧⌘P e execute Preferences: Open User Settings (JSON) para uma alteração global, ou Preferences: Open Workspace Settings (JSON) para afetar apenas o projeto atual. O ficheiro da área de trabalho (workspace) é guardado na pasta .vscode do projeto. O VS Code documenta ambos os âmbitos de definições e os respetivos comandos para Mac em User and workspace settings.

Para parar a formatação ao guardar apenas nesta área de trabalho, adicione a definição abaixo ao seu objeto JSON existente. Mantenha as outras definições já existentes e adicione uma vírgula onde for necessário:

{
  "editor.formatOnSave": false
}

Para uma exceção ao nível de toda uma linguagem, restrinja antes a definição a essa linguagem. Substitua typescript pelo identificador de linguagem real do ficheiro no VS Code, o qual pode consultar na barra de estado:

{
  "[typescript]": {
    "editor.formatOnSave": false
  }
}

Isto desativa o format-on-save para todos os ficheiros dessa linguagem no âmbito escolhido, e não apenas para caminhos gerados. As definições também podem ser sobrepostas por âmbitos mais específicos; por isso, se o ficheiro continuar a alterar-se, pesquise por @modified e inspecione tanto as definições do utilizador como as da área de trabalho, bem como eventuais blocos específicos de linguagem. A referência de definições do VS Code documenta as definições específicas de linguagem e a sua precedência.

Verificar as ações ao guardar separadamente

Se a formatação já estiver desativada, mas o ato de guardar continuar a reorganizar importações ou a aplicar correções, procure por editor.codeActionsOnSave. Esta definição controla ações como organizar importações e aplicar todas as correções (fix-all). Remova ou altere apenas a ação que está a causar a reescrita; desativar esta definição por completo também pode remover comportamentos úteis no momento de guardar. A documentação de Code Actions on Save do VS Code explica os controlos suportados.

Não utilize files.exclude como proteção de formatação: o VS Code documenta-o como uma definição de visibilidade do Explorador, e não como um controlo sobre se um formatador edita ou não um ficheiro. Se o formatador não tiver uma funcionalidade de exclusão baseada em caminhos e apenas alguns ficheiros gerados forem afetados, a opção prática no VS Code é desativar o format-on-save para a respetiva linguagem ou área de trabalho e, em seguida, formatar os ficheiros normais manualmente com Format Document (⇧⌥F) quando necessário. O VS Code documenta esse comando em Basic editing.

Para ficheiros gerados que têm de se manter estritamente inalterados byte a byte, dê preferência ao mecanismo de ignore documentado do próprio formatador, sempre que disponível. Caso contrário, utilize o âmbito de definições do VS Code mais restrito possível, guarde um ficheiro gerado representativo e inspecione o diff para confirmar qual o comportamento responsável.

Fontes