JavaScript

Boas Práticas de ESLint e Prettier em JavaScript: Qualidade e Formatação de Código para Times Ágeis

8 min de leitura

Boas Práticas de ESLint e Prettier em JavaScript: Qualidade e Formatação de Código para Times Ágeis

O que são ESLint e Prettier? ESLint é um analisador estático de código JavaScript que identifica e reporta padrões problemáticos, enquanto Prettier é um formatador de código opinionado que padroniza automaticamente a estrutura do seu código. A diferença fundamental: ESLint encontra problemas (variáveis não usadas, comparações perigosas), Prettier ajusta a aparência (espaçamento, aspas, ponto e vírgula). Trabalhar com ambas as ferramentas juntas é a prática profissional atual. ESLint garante qualidade e boas práticas; Prettier elimina debates sobre estilo. Juntas, elas formam uma pipeline robusta que melhora a manutenibilidade e reduz bugs em projetos colaborativos. Instalação e Configuração ESLint Instale o ESLint em seu projeto: O comando cria um arquivo . Aqui está uma configuração moderna: Prettier Instale o Prettier: Crie um arquivo : Atualize para integrar Prettier: Regras Práticas do ESLint Configurando Regras Essenciais As regras do ESLint controlam comportamentos. Há três níveis: (desabilitado), (aviso) e (erro). Para um projeto profissional, configure as regras mais importantes: Exemplo Prático Dado este

<h2>O que são ESLint e Prettier?</h2>

<p>ESLint é um analisador estático de código JavaScript que identifica e reporta padrões problemáticos, enquanto Prettier é um formatador de código opinionado que padroniza automaticamente a estrutura do seu código. A diferença fundamental: ESLint encontra problemas (variáveis não usadas, comparações perigosas), Prettier ajusta a aparência (espaçamento, aspas, ponto e vírgula).</p>

<p>Trabalhar com ambas as ferramentas juntas é a prática profissional atual. ESLint garante qualidade e boas práticas; Prettier elimina debates sobre estilo. Juntas, elas formam uma pipeline robusta que melhora a manutenibilidade e reduz bugs em projetos colaborativos.</p>

<h2>Instalação e Configuração</h2>

<h3>ESLint</h3>

<p>Instale o ESLint em seu projeto:</p>

<pre><code class="language-bash">npm install --save-dev eslint

npx eslint --init</code></pre>

<p>O comando <code>--init</code> cria um arquivo <code>.eslintrc.json</code>. Aqui está uma configuração moderna:</p>

<pre><code class="language-json">{

&quot;env&quot;: {

&quot;browser&quot;: true,

&quot;es2021&quot;: true,

&quot;node&quot;: true

},

&quot;extends&quot;: [&quot;eslint:recommended&quot;],

&quot;parserOptions&quot;: {

&quot;ecmaVersion&quot;: &quot;latest&quot;,

&quot;sourceType&quot;: &quot;module&quot;

},

&quot;rules&quot;: {

&quot;no-unused-vars&quot;: [&quot;error&quot;, { &quot;argsIgnorePattern&quot;: &quot;^_&quot; }],

&quot;no-console&quot;: &quot;warn&quot;,

&quot;eqeqeq&quot;: [&quot;error&quot;, &quot;always&quot;],

&quot;semi&quot;: [&quot;error&quot;, &quot;always&quot;],

&quot;quotes&quot;: [&quot;error&quot;, &quot;double&quot;]

}

}</code></pre>

<h3>Prettier</h3>

<p>Instale o Prettier:</p>

<pre><code class="language-bash">npm install --save-dev prettier eslint-config-prettier eslint-plugin-prettier</code></pre>

<p>Crie um arquivo <code>.prettierrc.json</code>:</p>

<pre><code class="language-json">{

&quot;semi&quot;: true,

&quot;singleQuote&quot;: false,

&quot;tabWidth&quot;: 2,

&quot;trailingComma&quot;: &quot;es5&quot;,

&quot;bracketSpacing&quot;: true,

&quot;arrowParens&quot;: &quot;always&quot;

}</code></pre>

<p>Atualize <code>.eslintrc.json</code> para integrar Prettier:</p>

<pre><code class="language-json">{

&quot;extends&quot;: [&quot;eslint:recommended&quot;, &quot;plugin:prettier/recommended&quot;],

&quot;plugins&quot;: [&quot;prettier&quot;],

&quot;rules&quot;: {

&quot;prettier/prettier&quot;: &quot;error&quot;

}

}</code></pre>

<h2>Regras Práticas do ESLint</h2>

<h3>Configurando Regras Essenciais</h3>

<p>As regras do ESLint controlam comportamentos. Há três níveis: <code>off</code> (desabilitado), <code>warn</code> (aviso) e <code>error</code> (erro). Para um projeto profissional, configure as regras mais importantes:</p>

<pre><code class="language-json">{

&quot;rules&quot;: {

&quot;no-var&quot;: &quot;error&quot;,

&quot;prefer-const&quot;: &quot;error&quot;,

&quot;no-implicit-globals&quot;: &quot;error&quot;,

&quot;no-eval&quot;: &quot;error&quot;,

&quot;no-throw-literal&quot;: &quot;error&quot;,

&quot;no-param-reassign&quot;: &quot;warn&quot;,

&quot;consistent-return&quot;: &quot;error&quot;

}

}</code></pre>

<h3>Exemplo Prático</h3>

<p>Dado este código problemático:</p>

<pre><code class="language-javascript">var x = 10;

function calcular(num) {

if (num &gt; 5) {

return num * 2;

}

// falta return aqui

}

var resultado = eval(&quot;5 + 5&quot;);

obj.props = &quot;novo valor&quot;; // reatribuição de parâmetro</code></pre>

<p>ESLint reportaria:</p>

<ul>

<li><code>no-var</code>: Use <code>const</code> ou <code>let</code>, não <code>var</code></li>

<li><code>prefer-const</code>: <code>x</code> nunca muda, use <code>const</code></li>

<li><code>consistent-return</code>: Nem todos os caminhos retornam valor</li>

<li><code>no-eval</code>: Nunca use <code>eval</code></li>

</ul>

<p>O código corrigido:</p>

<pre><code class="language-javascript">const x = 10;

function calcular(num) {

if (num &gt; 5) {

return num * 2;

}

return null;

}

const resultado = 5 + 5;</code></pre>

<h2>Formatação com Prettier e Integração</h2>

<h3>Por que Prettier Importa</h3>

<p>Prettier resolve conflitos de estilo automaticamente. Não há discussões sobre aspas simples vs. duplas ou espaçamento. Ele formata o código inteiro consistentemente, economizando tempo em code reviews.</p>

<p>Execute Prettier para formatar:</p>

<pre><code class="language-bash">npx prettier --write .</code></pre>

<p>Exemplo antes e depois:</p>

<pre><code class="language-javascript">// ANTES (desorganizado)

const obj={name:&quot;João&quot;,age:25,skills:[&quot;JS&quot;,&quot;React&quot;]}

function saudacao(nome,idade){

console.log(Olá, ${nome}! Você tem ${idade} anos)

}

// DEPOIS (após prettier)

const obj = {

name: &quot;João&quot;,

age: 25,

skills: [&quot;JS&quot;, &quot;React&quot;],

};

function saudacao(nome, idade) {

console.log(Olá, ${nome}! Você tem ${idade} anos);

}</code></pre>

<h3>Integração no Workflow</h3>

<p>Adicione scripts ao <code>package.json</code>:</p>

<pre><code class="language-json">{

&quot;scripts&quot;: {

&quot;lint&quot;: &quot;eslint . --ext .js,.jsx&quot;,

&quot;lint:fix&quot;: &quot;eslint . --ext .js,.jsx --fix&quot;,

&quot;format&quot;: &quot;prettier --write .&quot;,

&quot;check&quot;: &quot;prettier --check .&quot;

}

}</code></pre>

<p>Configure um hook pré-commit com <code>husky</code>:</p>

<pre><code class="language-bash">npm install --save-dev husky lint-staged

npx husky install

npx husky add .husky/pre-commit &quot;npm run lint &amp;&amp; npm run format&quot;</code></pre>

<p>Arquivo <code>.lintstagedrc.json</code>:</p>

<pre><code class="language-json">{

&quot;*.{js,jsx}&quot;: [&quot;eslint --fix&quot;, &quot;prettier --write&quot;],

&quot;*.{json,md}&quot;: [&quot;prettier --write&quot;]

}</code></pre>

<p>Agora, a cada commit, seu código será automaticamente verificado e formatado.</p>

<h2>Conclusão</h2>

<p>ESLint e Prettier são ferramentas complementares essenciais para desenvolvimento JavaScript profissional. ESLint garante qualidade, detectando padrões perigosos e erros lógicos; Prettier padroniza a formatação, eliminando debates estéreis. Juntos, eles criam um ambiente onde o código é consistente, seguro e fácil de manter. A configuração inicial leva minutos, mas o retorno em qualidade e produtividade justifica amplamente o investimento.</p>

<h2>Referências</h2>

<ul>

<li><a href="https://eslint.org/docs/latest/" target="_blank" rel="noopener noreferrer">ESLint Official Documentation</a></li>

<li><a href="https://prettier.io/docs/" target="_blank" rel="noopener noreferrer">Prettier Documentation</a></li>

<li><a href="https://www.digitalocean.com/community/tutorials/how-to-use-eslint-to-improve-code-quality" target="_blank" rel="noopener noreferrer">Setting up ESLint and Prettier</a></li>

<li><a href="https://typicode.github.io/husky/" target="_blank" rel="noopener noreferrer">Husky - Git Hooks Made Easy</a></li>

<li><a href="https://github.com/airbnb/javascript" target="_blank" rel="noopener noreferrer">JavaScript Best Practices Guide</a></li>

</ul>

Comentários

Mais em JavaScript

O que Todo Dev Deve Saber sobre DOM em JavaScript: Seleção, Manipulação e Traversal de Elementos
O que Todo Dev Deve Saber sobre DOM em JavaScript: Seleção, Manipulação e Traversal de Elementos

Seleção de Elementos no DOM A base de qualquer manipulação do DOM é saber loc...

O que Todo Dev Deve Saber sobre React Router: Navegação, Rotas Dinâmicas e Proteção de Rotas
O que Todo Dev Deve Saber sobre React Router: Navegação, Rotas Dinâmicas e Proteção de Rotas

Introdução ao React Router React Router é a biblioteca padrão para navegação...

Guia Completo de Autenticação em Node.js: JWT, Bcrypt e Sessões com Express
Guia Completo de Autenticação em Node.js: JWT, Bcrypt e Sessões com Express

Autenticação em Node.js: JWT, Bcrypt e Sessões com Express Autenticação é o p...