ESLint + Prettier, a dupla perfeita para produtividade e padronização de código.

ESLint + Prettier, a dupla perfeita para produtividade e padronização de código.

Padrões de código estão se tornando cada vez mais importantes por conta do crescimento dos times de desenvolvimento e a alta rotatividade do mercado de desenvolvedores de software.

Imagine-se entrando em um projeto enorme, onde cada classe ou componente segue um tipo de padrão de código diferente, ou até mesmo com aquelas linhas intermináveis que geram scroll lateral até em TV's de 62 polegadas.

Pois então, você provavelmente ficaria assim:

Lost Tarantino meme

É, eu também ficaria. Foi por isso que decidi escrever este artigo. Nele irei abordar algumas ferramentas bastante úteis para diminuir esse tipo de atrito dentro de projetos JavaScript e TypeScript, dessa forma, aumentando a produtividade dos desenvolvedores e do time por completo.

As ferramentas abordadas neste artigo são:

Primeiramente, por que eu deveria implementar estas ferramentas no meu projeto?

Além de facilitar a inserção de novos desenvolvedores no projeto, facilita também os code reviews e a manutenção do código. Se configurado da maneira correta, pode lhe poupar diversas horas procurando por aquela variável com o nome errado ou até mesmo os parênteses ou chaves que estavam faltando e você não viu.

Dada esta rápida introdução do porquê fui motivado a escrever sobre o assunto e do que se tratam as ferramentas, vamos por a mão na massa!!!

Irei usar como exemplo um projeto ReactJS recém criado com o seguinte comando:

yarn create react-app examplee

Após isso, iremos abrir o nosso projeto no vscode e nos certificar que temos algumas extensões instaladas nele. São elas:

Como dito anteriormente, essas são as duas extensões que irão encontrar os códigos em desacordo com as regras estabelecidas (ESLint) e formatar o nosso código de acordo com essas regras (Prettier).

Teremos também que garantir que o nosso VSCode está configurado da maneira correta, basta acessar as configurações do seu VSCode pelo comando CTRL + SHIFT + P e digitar Open Settings (JSON) e no arquivo que será aberto adicionar as seguintes configurações.

"[javascript]": { "editor.formatOnSave": true },
"editor.formatOnSave": true,
"eslint.autoFixOnSave": true,

Feito isso, teremos que adicionar o ESLint como dependência de desenvolvimento do nosso projeto, isso pode ser feito rodando o comando:

yarn add eslint -D

Agora já podemos iniciar a configuração do ESLint. Para isso iremos utilizar o comando:

yarn eslint --init

Com isso serão exibidas 3 opções no terminal:

How would you like to use ESLint?
> To check syntax only
> To check syntax and find problems
> To check syntax, find problems, and enforce code style

Irei escolher a terceira, que permitirá que o ESLint cheque a sintaxe do nosso código, ache problemas e corrija o estilo de código para o padrão definido.

Você pode ficar à vontade para escolher qualquer uma das outras opções, porém, aconselho escolher a terceira pois desta forma o ESLint já virá pré-configurado e você pode apenas fazer alguns ajustes caso necessário.

Após isso, teremos que responder qual tipo de import é usado no projeto.

What type of modules does your project use?
- JavaScript modules (import/export)
- CommonJS (require/exports)
- None of these

Irei escolher a primeira opção, por conta do projeto ser em ReactJS e o padrão adotado por tal é import/export.

Agora teremos que informar se estamos utilizando algum tipo de framework, como React ou Vue.

Which framework does your project use?
- React
- Vue.js
- None of these

A próxima pergunta será referente ao lugar aonde sua aplicação está rodando, no nosso caso será em browsers, no caso de aplicações backend em NodeJS seria no node e no caso do React Native não escolheríamos nenhuma das duas opções e deixaríamos e resposta em branco.

Where does your code run?
- Browser
- Node

Logo após, precisamos pré-definir qual o estilo de código que o seu projeto irá seguir, você pode escolher qualquer uma das opções abaixo e ver com qual delas o seu time se adapta mais ou está mais próxima do esperado.

How would you like to define a style for your project?
- Use a popular style guide
- Answer questions about your style
- Inspect your JavaScript file(s)

Vou optar por usar um style guide popular. Não escolhi responder perguntas sobre o meu estilo de código nem para que o ESLint inspecione o meu código pois, escolhendo a primeira opção, como já dito anteriormente, diversas configurações já vem prontas e podemos adequar apenas o que não nos agrada.

Agora teremos que escolher uma das style guides disponíveis.

Which style guide do you want to follow?
- Airbnb
- Standard
- Google

Irei escolher o style guide do Airbnb, mas sinta-se livre para usar qualquer um dos outros. Aconselho você a experimentar diversos style guides e descobrir qual que te agrada mais, ou então escolher um deles e ir adequando ele de acordo com as suas necessidades ou do seu time.

Estamos chegando quase ao fim, só falta escolher qual o formato do arquivo de configurações do ESLint, irei escolher JavaScript por questão de costume.

What format do you want your config file to be in?
- JavaScript
- YAML
- JSON

Caso você esteja utilizando yarn ao invés do npm, durante a instalação será perguntado se você gostaria de instalar as dependências com o npm, você deverá responder de forma afirmativa e aguardar o termino da instalação.

Teremos que remover o arquivo package-lock.json e instalar as dependências novamente com yarn. Este arquivo surgiu durante o — init pelo fato do ESLint instalar as dependências com npm. Para fazer isso teremos que rodar o seguinte comando:

rm package-lock.json && yarn

Pronto, agora temos a parte do ESLint configurada. Precisamos agora instalar o Prettier que é quem vai formatar o nosso código de forma automática, juntamente com o Prettier vamos instalar outras duas dependências que servem para linkar o ESLint com o Prettier e uma terceira babel-eslint que serve para dizer ao ESLint que estamos usando as últimas funcionalidades do JavaScript. O -D no final faz com que essas dependências sejam instaladas como dependências apenas de desenvolvimento.

yarn add prettier eslint-config-prettier eslint-plugin-prettier babel-eslint -D

Feito isso estamos prontos para fazer algumas configurações diretamente no arquivo .eslintrc, que foi criado durante o init do ESLint.

Dentro do arquivo .eslintrc, que foi criado na raiz do seu projeto, você encontrará um array nomeado extends, adicione as duas seguintes strings a este array.

"prettier",
"prettier/react"

Antes da opção parserOptions iremos adicionar o seguinte conteúdo:

"parser": "babel-eslint",

E por último iremos adicionar algumas regras no objeto de rules, ele deverá ficar parecido com isso:

"rules": {
  "prettier/prettier": "error",
  "react/jsx-filename-extension": ["warn", { "extensions": [".js", ".jsx"] }],
  "import/prefer-default-export": "off",
  "jsx-quotes": ["error", "prefer-single"]
}

'prettier/prettier: 'error' quer dizer que tudo que for encontrado e não estiver de acordo com as regras definidas irá retornar um erro.

'react/jsx-filename-extension' significa que todo os códigos react que forem escritos têm que ser escritos em arquivos .js ou .jsx, caso contrário irá retornar um warning.

E por último estamos desabilitando uma regra que nos obriga a exportar por default quando temos apenas um export no arquivo.

Agora basta criar um arquivo nomeado .prettierrc.json com o seguinte conteúdo e tudo estará funcionando.

{
  "trailingComma": "es5",
  "tabWidth": 2,
  "semi": false,
  "singleQuote": true,
  "jsxSingleQuote": true
}

Bom, esta foi uma explicação básica de para que servem essas duas ferramentas e como elas podem ajudar você no seu dia-a-dia. Tentei trazer também uma configuração básica dessas ferramentas para que agora vocês possam definir algumas regras de acordo com o seu gosto ou necessidade.

Quero encorajar você também a ir um pouco mais a fundo no conteúdo, dando uma passada no site do ESLint e do Prettier. Lá você pode encontrar mais detalhes de regras para os dois e como fazer algumas outras configurações mais avançadas.

Vou aproveitar também para indicar outra ferramenta que casa muito bem com essas duas que é o EditorConfig for VS Code. É uma ferramenta perfeita para padronizar as configs do seu time de acordo com cada projeto.

Por hoje é isso, pessoal, espero que tenham gostado do artigo e que ele possa ajudar vocês e o time de vocês de alguma forma.

Other Blog Posts

How to setup multiple environments in React Native
How to setup multiple environments in React Native

In this article I’ll explain a bit more about how to setup different environments in React Native and how to properly manage them across Javascript and native code.

How to create a new GitHub Release through Azure Pipelines
How to create a new GitHub Release through Azure Pipelines

Creating a new GitHub release is a common task that a lot of developers are supposed to do during their careers. But on the other hand, it is not as well documented as it could. There are a lot of little tricky things that you will discover only during the process.

Pare de escrever seus componentes React dessa forma
Pare de escrever seus componentes React dessa forma

Após algum tempo trabalhando como desenvolvedor React Native, percebi a tendência das pessoas em estruturarem as sua árvore de componentes com renders condicionais baseados em ifs ternários