Migrando um projeto Angular com TSLint para o ESLint

Como realizar a migração de um projeto angular com TSLint e @po-ui/ng-tslint para o ESLint e @angular-eslint

Aline Lariguet
TOTVS Developers
5 min readJul 2, 2021

--

Photo by Phil DuFrene on Unsplash

índice

  1. O que é? do que se alimenta?
  2. Migração
  3. Migração: Instalação do @angular-eslint
  4. Migração: Conversão do TSLint para ESLint
  5. Migração: Execução do lint
  6. Migração: Análise e implementação das regras
  7. Conclusão

O que é? do que se alimenta?

O TSLint é uma ferramenta de análise que verifica o código TypeScript para erros de legibilidade, manutenção e funcionalidade.

Em 2019 a depreciação do TSLint foi anunciada e também foi indicado o uso do ESLint como linter padrão.

O PO UI possui o @po-ui/ng-tslint, um pacote com regras de lint que é utilizado pela própria biblioteca e também está disponível para download e instalação pelo NPM, porém, por conta da depreciação do TSLint e o surgimento de outras ferramentas no mercado, também acabou fazendo sentido a depreciação do pacote de lint do PO UI que não terá a v5.0.0 publicada.

Desde então, sentimos a necessidade de fazer essa migração do TSLint e @po-ui/ng-tslint para o ESLint e @angular-eslint no nosso Monorepo @po-ui/po-angular e nos projetos dentro dele. Conforme estrutura representada abaixo:

Agora, depois de realizada a migração podemos compartilhar e ajudar outras pessoas que também estão passando por esse processo.

Migração

Essa migração promete ser muito simples, porém a quantidade de trabalho envolvido pode variar de acordo com as especificidades do projeto.

Não se preocupe! Existem ferramentas para facilitar e tornar todo o processo o mais automatizado possível. 😉

Instalação do @angular-eslint

Primeiramente precisamos instalar a dependência do @angular-eslint no seu projeto rodando o comando abaixo no terminal:

ng add @angular-eslint/schematics

Verificar se a versão instalada é a versão estável mais recente. Caso não seja, você deverá refazer esse passo fixando a versão que deverá ser instalada.

Durante a execução pode ocorrer um erro se você possui um arquivo tsconfig.base.json na raiz do seu projeto, exclua esse arquivo , execute novamente e restaure novamente o arquivo após a execução.

As seguintes dependências serão incluídas no projeto:

"devDependencies": {  "@angular-eslint/builder": "latest",  "@angular-eslint/eslint-plugin": "latest",  "@angular-eslint/eslint-plugin-template": "latest",  "@angular-eslint/schematics": "latest",  "@angular-eslint/template-parser": "latest",  "@typescript-eslint/eslint-plugin": "latest",  "@typescript-eslint/parser": "latest",  "eslint": "^latest"}

Conversão do TSLint para ESLint

Agora basta rodar o schematic convert-tslint-to-eslint no seu projeto:

ng g @angular-eslint/schematics:convert-tslint-to-eslint

Será necessário especificar o nome do projeto caso você possua um diretório 'projects/' e migrar cada projeto individualmente da seguinte forma:

ng g @angular-eslint/schematics:convert-tslint-to-eslint {{PROJ_NAME}}

Nesse momento você será questionado se você deseja remover o TSLint e sua configuração se não houver mais nenhum projeto utilizando o TSLint após a conversão. Basta responder: Yes

Também será questionado se você deseja ignorar a configuração existente do TSLint (Isso é recomendado se a configuração do TSLint não foi muito alterada, pois torna o novo ESLint mais limpo. No nosso caso optamos por não ignorar, respondendo: No. Veja o que faz sentido para o seu projeto.

Após concluída a migração, você será informado se houver alguma regra que você utilizava que não têm uma regra equivalente conhecida no ESLint. Será exibida uma lista com essas regras conforme mensagem abaixo:

Você precisará decidir como lidar com essas regras manualmente, porém todo o restante das configurações já foi feito pra você automaticamente:

  • Instalação das versões mais recentes dos plugins do ESLint, verifique as alterações feitas no seu package.json.
  • Criação do arquivo eslintrc.json que conterá todas as regras e configurações do ESLint no seu projeto.
  • Alteração das referências do TSLint no arquivo angular.json que serão alteradas para para o @angular-eslint
  • Alteração dos comentários para desabilitar o TSLint. Conforme imagem abaixo:

Importante destacar que se você tiver um diretório 'projects/' cada projeto terá o seu arquivo eslintrc.json que estende o arquivo eslintrc.json na raiz do projeto.

Execução do lint

A seguir basta rodar o comando abaixo para rodar o lint no seu projeto 😀

ng lint {{PROJ_NAME}}

Nesse momento pode ocorrer algum erro por alguma dependência que faltou ser instalada, conforme exemplo abaixo:

Cannot find module ‘{{ANY_MODULE}}’

Devemos então instalar as dependências requeridas, por exemplo:

npm i {{ANY_MODULE}}

Após rodar o lint no projeto, você será notificado de todos os trechos de código que não estão de acordo com as regras do ESLint. Conforme imagem abaixo:

Análise e implementação das regras

E por último será necessária a análise das regras e implementação delas no projeto, que muitas vezes pode resultar em refatoração de código. Lembrando que as regras são configuráveis e algumas podem ser personalizadas.

Também é possível implementar algumas regras executando o lint e utilizando a flag — fix que altera o código automaticamente. Sugerimos cuidado com essa opção até que se tenha certeza que realmente todos os casos podem ser corrigidos dessa forma, caso contrário podem ocorrer erros durante o build do projeto.

Após resolver todas as regras, seja implementando ou desligando se necessário a saída do terminal será da seguinte forma:

Conclusão

A migração é muito simples e rápida, a ferramenta disponibilizada pelo @angular-eslint simplifica e agiliza o processo de conversão.

O que geralmente pode levar mais tempo é a análise das regras e implementação delas, se esse for o caso. Porém essas regras identificam e nos ajudam a corrigir padrões problemáticos encontrados no código.

Se você quer saber um pouco mais sobre as regras do ESLint que foram implementadas no PO UI, verifique o arquivo eslintrc.json na raiz do nosso projeto no Github.

Veja as documentações oficiais do @angular-eslint.

--

--