DEV Community

Cover image for Configurando ESLint + Prettier + Husky no Angular(20)
Gustavo Machado
Gustavo Machado

Posted on

Configurando ESLint + Prettier + Husky no Angular(20)

O que são cada item e para que serve?

Confira a definição e função básica de cada item presente neste artigo, que compõe a arquitetura de um projeto Frontend.

1. ESLint

Definição
  • É um linter (ou seja, um analisador de código) que percorre o código procurando por problemas.
  • Baseia-se em regras configuráveis, que podem ser habilitadas ou desativadas conforme a necessidade do projeto.
Função
  • Garantir qualidade do código
  • Manter consistência
  • Prevenir bugs
  • Melhorar a manutenção
  • Integração com o fluxo de trabalho

2. Prettier

Definição
  • O Prettier é um formatador de código opinativo.
  • Ele não analisa regras de qualidade ou possíveis bugs como o ESLint.
  • O foco dele é padronizar a formatação do código automaticamente, sem precisar discutir estilo no time.
Função
  • Formatação consistente
    • Decide automaticamente coisas como:
    • Tamanho da indentação (2 ou 4 espaços)
    • Uso de ponto e vírgula no final de linhas
    • Aspas simples ou duplas
    • Quebra de linha em funções longas
    • Espaços em branco e vírgulas finais
  • Economizar tempo
  • Integração automática

3. Husky

Definição
  • O Husky é uma ferramenta que permite configurar Git hooks facilmente.
  • Git hooks são scripts que o Git executa automaticamente em momentos específicos, como antes de um commit (pre-commit) ou antes de um push (pre-push).
Função
  • Garantir qualidade no commit
    • Rodar o ESLint e o Prettier antes de permitir o commit.
  • Rodar testes automaticamente
    • Impedir que alguém faça commit/push se os testes quebraram.
  • Aplicar verificações personalizadas
    • Conferir mensagens de commit.
    • Rodar ferramentas de segurança ou de build.

Passos para instalação das ferramentas no Angular:

  1. Adicionar e Configurar o ESLint
  2. Adicionar e configurar o Prettier
  3. Configuração da integração do ESLint
  4. Configuração de scripts no package.json
  5. Instalar e configurar o husky

1. Adicionar e Configurar o ESLint

Começamos instalando o ESLint no projeto Angular. Isso irá criar um arquivo eslint.config.js no seu diretório raiz.

ng add @angular-eslint/schematics
Enter fullscreen mode Exit fullscreen mode

2. Adicionar e configurar o Prettier

Agora, vamos instalar o Prettier junto com as recomendadas integrações com o ESLint.

Instale o prettier:

npm install --save-dev prettier
Enter fullscreen mode Exit fullscreen mode

Também instale o pretty-quick:

npm install --save-dev pretty-quick
Enter fullscreen mode Exit fullscreen mode

👉 pretty-quick é bem útil porque ele roda só nos arquivos staged, e não no projeto inteiro.

Depois instale os plugins para compatibilidade com o ESLint:

npm install --save-dev eslint-config-prettier eslint-plugin-prettier
Enter fullscreen mode Exit fullscreen mode

Crie um arquivo chamado .prettierrc no diretório raiz do seu projeto:

{
  "printWidth": 100,
  "tabWidth": 2,
  "useTabs": false,
  "singleQuote": true,
  "trailingComma": "all",
  "semi": true,
  "bracketSpacing": true,
  "arrowParens": "always",
  "endOfLine": "auto",
  "htmlWhitespaceSensitivity": "ignore",
  "embeddedLanguageFormatting": "auto"
}
Enter fullscreen mode Exit fullscreen mode

Crie um arquivo chamado .prettierignore para que o prettier os ignore e não os formate:

package.json
package-lock.json
dist
node_modules
Enter fullscreen mode Exit fullscreen mode

3. Configuração da integração do ESLint

// @ts-nocheck
const eslint = require("@eslint/js");
const tseslint = require("typescript-eslint");
const angular = require("angular-eslint");
const prettierPlugin = require("eslint-plugin-prettier");
const prettierConfig = require("eslint-config-prettier");

module.exports = tseslint.config(
  {
    files: ["**/*.ts"],
    extends: [
      eslint.configs.recommended,
      ...tseslint.configs.recommended,
      ...tseslint.configs.stylistic,
      ...angular.configs.tsRecommended,
      prettierConfig,
    ],
    plugins: {
      prettier: prettierPlugin,
    },
    processor: angular.processInlineTemplates,
    rules: {
      "@angular-eslint/directive-selector": [
        "error",
        {
          type: "attribute",
          prefix: "app",
          style: "camelCase",
        },
      ],
      "@angular-eslint/component-selector": [
        "error",
        {
          type: "element",
          prefix: "app",
          style: "kebab-case",
        },
      ],
      "prettier/prettier": [
        "error",
        {
          endOfLine: "auto",
        },
      ],
      "@typescript-eslint/no-explicit-any": "error", // Forbid usage of 'any'
    },
  },
  {
    files: ["**/*.html"],
    extends: [
      ...angular.configs.templateRecommended,
      ...angular.configs.templateAccessibility,
    ],
    rules: {},
  },
);
Enter fullscreen mode Exit fullscreen mode

4. Configuração de scripts no package.json

Nesta etapas vamos automatizar alguns comandos da aplicação para serem executadas através de scripts no package.json.

"lint": "ng lint",
"pretty-quick": "pretty-quick --staged",
"lint:fix": "ng lint --fix",
"format": "prettier --write .",
"format:staged": "pretty-quick --staged",
Enter fullscreen mode Exit fullscreen mode

Agora tente rodar o comando do lint:

npm run lint
Enter fullscreen mode Exit fullscreen mode

Caso erros de formatação aparecer do Prettier, rode o comando:

npm run format
Enter fullscreen mode Exit fullscreen mode

5. Instalar e configurar o husky

No passo 5, vamos instalar e configurar o husky para podermos executar as ferramentas anteriores ao fazer commits e pushes.

npx husky-init && npm install

#ou

npx husky-init; npm install
Enter fullscreen mode Exit fullscreen mode

Isso cria um arquivo .husky e um arquivo de hook (gancho) para pre-commit.

Agora edite o arquivo de pre-commit:

#!/usr/bin/env sh
. "$(dirname -- "$0")/_/husky.sh"

npm run format:staged
npm run lint
Enter fullscreen mode Exit fullscreen mode

Além do pre-commit, adicionaremos também um pre-push:

npx husky add .husky/pre-push "npm run test"
Enter fullscreen mode Exit fullscreen mode

O arquivo irá ter as seguintes configurações (este arquivo executará testes unitários nos pushes do GIT):

#!/usr/bin/env sh
. "$(dirname -- "$0")/_/husky.sh"

npm run test
Enter fullscreen mode Exit fullscreen mode

Desde já agradeço a todos e espero que tenham gostado!

Att.
Gustavo Machado Pontes

linktr linkedin github instagram twitter

Top comments (1)

Collapse
 
devgustavus profile image
Gustavo Machado

Caso encontrem alguma inconsistência nas informações, por favor, comentem ou me mandem mensagem!
Desde já agradeço a todos.