O primeiro passo para deixarmos nosso código mais bonito e termos mais controle sobre ele é utilizarmos uma ferramenta que nos ajuda a fazer o nosso JavaScript com um pouco mais de cuidado que é uma ferramenta chamada ESLint.
Ela nos ajuda tanto a resolver os problemas mostrados no vídeo passado quanto também para nos avisar se estiver cometendo algum desses erros.
Para que consigamos fazer isso, vamos apertar Ctrl mais aspas simples (Ctrl + ') no Visual Studio Code aberto no código. Em seguida damos um "Ctrl + C" para ele parar de rodar e um clear para ele limpar o terminal. Se você não conseguir abrir usando o atalho "Ctrl + aspas simples", vá até a barra superior do programa e clique na quarta opção que é "Ver", em seguida cliquei em "Terminal" que é a décima terceira opção da lista.
Agora, para criarmos um arquivo que é extremamente necessário para que o ESLint funcione, precisamos digitar npm init @eslint/config e damos um Enter. Ele já vai começar a fazer algumas perguntas sobre o que queremos.
$ npm init @eslint/config
? How would you like to use ESLint? ...
To check syntax only
To check syntax and find problemns
To check syntax, find problems, and eforce code style
A primeira opção é para ele só checar a sintaxe, o outro para que ele possa checar a sintaxe e encontrar problemas o terceiro é se queremos que ele cheque a sintaxe, encontre problemas e nos force a termos um estilo específico de código, que é exatamente o que queremos. Então, selecionamos a terceira opção.
How would you like to use ESlint? . style
What type of modules does your profect use? ...
JavaScript modules (import/export)
CommonJS (require/esports)
None of these
Aqui ele diz como estamos utilizando, se utilizamos modelos do JavaScript que é import ou export, se usamos o CommumJS que é o require ou export que normalmente vemos em configurações de Webpacking, outras configurações menores. Mas no React utilizamos import, lembra que temos que exportar e importar nossos componentes? Então é a primeira opção.
Wich framework does your project use? . esm
React
Vue.js
None of these
Aqui, eles pergunta se estamos usando React, vue.js ou nenhum deses. Nós estamos usando o React.
? Does your project use TypeScript > No / Yes
Estamos utilizando o TypeScript? Sim, então selecionamos Yes.
? Where does your code run? ... (Press <space> to select, <a> to toggle all, <i> to invert selection)
Browser
Node
Como nós rodamos? No Back-End via Node ou no Brownser? No Browser.
? How would you like to define a style for your project? ...
Use a popular style guide
Answer questions about your style
Queremos utilizar um estilo popular ou que ele dê perguntas para nós personalizarmos? Vamos escollher essa segunda opção para vermos como é.
? What format do you want your config file to be in? ...
JavaScript
YAML
JSON
Qual a extensão queremos que ele coloque nesse arquivo .yaml, .json ou .js? Vamos escolher o .json, que eu acho um pouco mais legal para configuração.
? What style pf indentation do you use? ...
Tabs
Spaces
Qual o estilo de identação que vamos usar, se é via tab ou via espaço. Via tab geralmente são quatro espaço, então prefiro utilizar espaços.
? What quotes do you use for strings? ...
Doubles
Single
Como queremos que sejam as nossas aspas, simples ou duplas? Vamos escolher simples.
? What line endings do you use? ...
Unix
Windowns
Qual vai ser o final de lina que vamos utilizar, do Unix ou do Windows? Vamos utilizar do Unix.
? Do you require semicolons? >> No / Yes
Vamos querer ponto e vírgula? (;)? Vamos colocar que sim. Em seguida ele mostra alguns plugins que precisamos instalar e perguta se queremos a instalação, responderemos que sim.
? Would you like to install now with npm? >> No / Yes
E agora ele instala automaticamente esses plugins. Vamos esperar um pouco, porque normalmente é bem rápido. Ao terminar damos outro clear para limpar. Agora, vamos abrir a pasta "src" olha só, nosso código está todo vermelho.
Vamos abrir o index.tsx e ele já nos monstra alguns erros.
import React from "react";
import ReactDOM from "react-dom";
import "normalize.css";
import "./index.css";
import Cardapio from "./pages/Cardapio";
~
ReactDOM.render(
<React.StricMode>
<Cardapio />
</React.StricMode>,
document.getElementById('root')
);
Aqui, ele já está nos apontando alguns erros. Vamos passar o mouse no primeiro. Ele diz que as string precisam utilizar aspas simples e o react está entre aspas duplas. Então, vamos entrar na pasta ".eslinrc.json".
"rules": {
"ident": [
"error",
4
]
}
Na linha 23 do código, ele diz que podemos identar com 4 espaços, mas vamos modificar para 2. O linebreak-style tem que ser unix, as aspas tem que ser simples e tem sempre que ter o ponto e vírgula.
"rules": {
"ident": [
"error",
2
],
"linebreak-style": [
"error",
"unix"
],
"quotes": [
"error",
"singles"
],
'semi": [
"error",
"always"
]
}
Isso já vai nos forçar a ter um estilo de código um pouco mais legal. Aqui eslint está com quatro espaços, então vou colocar... Dá uma olhada na barra inferior, caso apareça "Espaço 4" clique nele e selecione "Recuar Usando Espaços > 2 Tamanho de Tabulação Configurado". E apertamos "Alt + Shift + F" para ele automaticamente mudar para dois espaços.
Mas isso ainda não resolveu o problema no resto do código, então, vamos utilizar o ESLint para nos ajudar. Para isso, vamos utilizar o comando npx que já vimos em outros cursos que é para executar um pacote e não para instalá-lo. Vamos executar um pacote que será o próprio eslint.
Em seguida ele pede para darmos uma pasta, ou algum lugar para ele começar. Queremos que ele comece no src, então usamos ponto e barra (./).
Também queremos que ele resolva os problemas por nós para que não precisemos passar de pasta em pasta e ir ajustando. Para isso, vamos colocar --fix. Esse comando faz com que o ESLint automaticamente já resolva esses problemas.
$ npx. eslint ./src --fix
Damos Enter e ele dá vários erros dizendo "React must be in scope", mas depois falamos sobre isso. Agora, porém, ele não está mais todo vermelho, só as partes que estão utilizando o React que não tem o React que estão vermelhos. Mas o restante já está conforme as configurações que escolhemos.
Agora, só precisamos resolver esse problema do React, o que faremos no próximo vídeo!