Tslint: Roteiro: TSLint -> ESLint

Criado em 23 fev. 2019  ·  52Comentários  ·  Fonte: palantir/tslint

Como você deve ter lido nesta postagem do blog , planejamos descontinuar o TSLint em 2019 e oferecer suporte à migração para o ESLint como o linter padrão para TypeScript e JavaScript. Isso não será uma depreciação imediata; pelo contrário, há muito trabalho a fazer para garantir uma transição suave para o novo ferramental sem regressões. Existem recursos, suítes de teste e conveniências no TSLint que esperamos manter na migração. Pode haver um período de tempo em que haja sobreposição entre as duas ferramentas e os adotantes iniciais do TSLint são recomendados para executar _both_ linters para garantir a cobertura completa da verificação de código (em um grau razoável, de modo que o desempenho não sofra drasticamente).

Estarei fechando algumas solicitações de recursos neste repositório que agora parecem fora do escopo porque esperamos que sejam tratadas no roteiro ESLint / typescript-eslint . Um exemplo de uma categoria de regras para as quais __novas solicitações de recursos__ provavelmente serão fechadas/rejeitadas são as regras de formatação . Eu sugeri a divisão dessas regras por algum tempo porque usamos o Prettier no Palantir e o consideramos uma ferramenta melhor para o trabalho de formatação de código.

O TSLint continuará a ser lançado com importantes correções de bugs e atualizações que o mantêm atualizado com os recursos mais recentes do compilador/linguagem.


Atualização (junho de 2019): um cronograma de roteiro mais concreto, coordenado com @JoshuaKGoldberg e tslint-contrib-microsoft:

  • __1º de agosto de 2019__: Pare de aceitar novas regras _core_. Ainda aceita correções de bugs, recursos menores e aprimoramentos de regras. As regras personalizadas são sempre uma opção e podem ser mantidas fora deste repositório.
  • __1º de novembro de 2019__: Pare de aceitar recursos ou aprimoramentos de regras (com exceção daqueles que facilitam a migração para o typescript-eslint). Ainda aceita correções de bugs.
  • __1º de janeiro de 2020__: Pare de aceitar qualquer coisa, exceto correções de segurança e correções para falhas introduzidas por alterações no TypeScript.
  • __1º de dezembro de 2020__: Pare de aceitar quaisquer PRs 🎉

Atualização (agosto de 2019): consulte tslint-to-eslint-config para obter um comando CLI que migra arquivos de configuração TSLint para arquivos de configuração ESLint.


Atualização (março de 2020): Adicionado _"e correções para falhas introduzidas ao quebrar as alterações do TypeScript"_ ao prazo de 1º de janeiro, após a discussão em #4914.

Documentation

Comentários muito úteis

Seria ótimo ter um comando CLI que migrasse um tslint.json para um eslint.json, mapeando regras e opções equivalentes. Idealmente, ele removeria as regras que podem ser migradas do tslint.json e manteria as regras que ainda não têm um equivalente (ou não suportam as opções usadas), para que a regra possa ser executada de forma idempotente repetidamente ao longo do tempo até que o tslint.json fique vazio em algum momento e podemos confiar totalmente no ESLint.

Todos 52 comentários

Seria ótimo ter um comando CLI que migrasse um tslint.json para um eslint.json, mapeando regras e opções equivalentes. Idealmente, ele removeria as regras que podem ser migradas do tslint.json e manteria as regras que ainda não têm um equivalente (ou não suportam as opções usadas), para que a regra possa ser executada de forma idempotente repetidamente ao longo do tempo até que o tslint.json fique vazio em algum momento e podemos confiar totalmente no ESLint.

Boas notícias.
O pessoal da ESLint já iniciou o projeto typescript-eslint para dar suporte ao TS.
Eles também estão procurando ajuda. Aqui está a declaração. .

o que significará escrever regras tslint após a migração?

Existe algum plano para migrar o eslint do JS para o TS? Eu odeio dizer isso, mas se eslint não for migrado para ts, não seria tão agradável escrever regras.

Meu mal, não é eslint que vamos usar, vamos usar typescript-eslint, faz mais sentido. deixe-me saber se eu puder ser de alguma ajuda.

seria possível referenciar este plano para descontinuar do readme.md no repositório? Parece que apenas algumas pessoas sabem sobre esse plano e não é de conhecimento geral. Obrigado!

@joeyj-msft de fato, adicionado em a395501739bf7f0f166e5b0ccb355c0e9500445a por adidahiya.

Seria bom ter alguma "recapitulação" das regras do TSLint (https://palantir.github.io/tslint/rules/) disponível em typescript-eslint . Não sei se deveria ser um sinalizador "ESLint" no palantir ou uma nova lista em https://github.com/typescript-eslint/typescript-eslint. Mas ajudaria a decidir se um projeto está pronto para ser movido ou não.

@JoshuaKGoldberg Estou mudando de tslint para typescript-eslint. Eu estava usando o TSLint para criar regras personalizadas para meu projeto. Como posso continuar criando regras personalizadas da mesma forma que fizemos no TSLint?

Meu projeto cria arquivos Javascript e Typescript, então eu tenho que criar apenas uma regra para eles?

@moulikcipherX obrigado por perguntar, ótimas perguntas!

Você pode usar suas regras TSLint dentro do ESLint usando typescript-eslint/packages/eslint-plugin-tslint . Ele envolve uma configuração TSLint e lints seu código usando TSLint.

Para escrever regras no ESLint, veja typescript-eslint/packages/eslint-plugin . Esse README.md tem uma lista de todas as regras suportadas _(a lista ficou bem grande!)_. O ROADMAP.md tem um mapeamento das regras TSLint existentes para os novos equivalentes.

Obrigado @JoshuaKGoldberg.

Assim, posso usar ainda mais os mesmos métodos para criar regras personalizadas para o TypeScript da mesma forma que no TSLint.

Nota: Acabei de atualizar a postagem original neste tópico com uma linha do tempo de roteiro mais concreta. Role até o topo desta página para vê-lo.

@SamB o blog no site gh-pages está bastante desatualizado, não estamos atualizando. E a postagem do blog está vinculada na parte superior do README.

@adidahiya @JoshuaKGoldberg
Eu quero contribuir para o projeto typescript-eslint, então por onde devo começar?

A transformação equivalente de regras tslint personalizadas para regras eslint personalizadas será suportada no futuro typescript-supported-eslint ?

O que estou tentando dizer é ter um certo comando CLI para converter os arquivos JS da custom-tslint-rule em regras de linting compatíveis com eslint correspondentes. Vai ajudar muito, pois reimplementar a regra de tslint para eslint será um trabalho realmente difícil...

Obrigado por criar uma ferramenta tão brilhante e desejo-lhe tudo de melhor em suas futuras aventuras. Falando em aventuras, essa certamente foi uma, não foi?

De qualquer forma, tudo de bom para você,
Vai

Visto que estamos chegando ao final de 2019 (o ano em que este repositório supostamente estava sendo obsoleto), agora pode ser um bom momento para adicionar o sinalizador obsoleto no NPM para que novas instalações sejam direcionadas ao ESLint.

Seria útil, também, tornar o readme um pouco mais óbvio (nível superior) e vincular os usuários ao typescript-eslint.

Você está planejando fazer isso agora que quase todos os casos de uso comuns foram cobertos pelo ESLint?

Também acho e espero que quando o tslint for obsoleto, o eslint receba mais pressão e a comunidade se concentre mais nele

O tslint-to-eslint-config ajuda a converter tslint.json em .eslinerc.js mas não pode
não pode cuidar do inline tslint:disable:<rule> , além disso, algumas regras não estão bem configuradas ou ainda não são suportadas pelo eslint.

Ainda existem algumas arestas ao migrar de tslint para eslint, qual é o benefício de usar eslint para arquivos datilografados? Para obter melhor consistência entre a comunidade typescript e a comunidade javascript?
Se um projeto usa apenas typescript, sem arquivos javascript, ainda há algum benefício depois de fazer a migração?

O tslint-to-eslint-config ajuda a converter tslint.json em .eslinerc.js mas não pode
não pode cuidar da linha tslint:disable:<rule>

De fato: https://github.com/typescript-eslint/tslint-to-eslint-config/issues/136
Você está convidado a contribuir para adicioná-lo, se quiser! Há um trabalho em andamento PR em https://github.com/typescript-eslint/tslint-to-eslint-config/pull/246 que poderia usar alguma ajuda.

Ainda existem algumas arestas ao migrar de tslint para eslint, qual é o benefício de usar eslint para arquivos datilografados?

Você pode ver os motivos listados na postagem do blog mencionada no início deste tópico.

@beenotung

O TSLint sempre foi limitado em comparação com o ESLint, há um monte de regras que nunca teve que o ESLint fez. Sem mencionar os plugins e a comunidade/suporte muito maior que a ESLint sempre teve. Além disso, muitos de nós temos um eslintrc bem configurado que usamos em todos os lugares, tornando qualquer projeto TSLint uma inconsistência que precisa ser corrigida (usando uma ferramenta não obsoleta).

Se houver algo faltando no ESLint que o TSLint possui, é melhor aumentá-lo para que possa ser implementado do que continuar usando uma ferramenta obsoleta.

Obrigado por trazer mais contexto para eslint, vejo o benefício de usar eslint.

Na verdade, tentei migrar de tslint para eslint, mas parece que algumas arestas não podem ser corrigidas facilmente porque eslint não tem o conceito de tipo (portanto, o recuo para o tipo genérico está quebrado).

Em relação ao suporte de ferramentas no eslint (especialmente dicas de IDE no arquivo de configuração). Eu gostaria de poder contribuir um dia, mas não sou experiente nem livre para trabalhar nisso atualmente. (Pelo menos não está no topo da minha lista porque bem, tslint ainda funciona bem)

Parece que a maneira menos dolorosa é usar tslint para arquivos datilografados e eslint para arquivos javascript, para que ambos os mundos possam desfrutar de sua 'consistência'.

Como o npm afirma que o TSLint está obsoleto e usa o ESLint , presumo que a migração esteja concluída.
Este assunto não deveria ser encerrado?

@cdalexndr ainda é útil ter esse problema aberto para que as pessoas aprendam sobre o motivo da descontinuação e leiam as atualizações mais recentes.

A postagem do blog acima não é focada em detalhes técnicos sobre typescript-eslint .
Os usuários do TSLint podem ler mais sobre Como funciona o typescript-eslint ?

Em geral, todo o arquivo typescript-eslint/README tem tudo o que é necessário para uma transição transparente.

Existe uma razão pela qual o pacote em si não está marcado como obsoleto no npm? Como, por exemplo, pedido ?

A versão 6.0.0 do @niklasR foi marcada como obsoleta no NPM e, em seguida, o inferno começou.

Confira #4919 e #4914 .

Nós _queremos_ todo o inferno se soltar 😛... as pessoas deveriam parar de usar o TSLint.

Parece que nunca marcamos explicitamente as novas versões como obsoletas; veja o histórico de versões em https://www.npmjs.com/package/tslint :
Screenshot showing 6.0.0 as deprecated on npm but later versions not

Não tenho permissões - @adidahiya ?

Oh, estranho, eu pensei que os documentos aqui sugeriam que este comando depreciaria todas as possíveis versões futuras que se enquadram no intervalo:

npm deprecate tslint@^6.0.0 "TSLint has been deprecated in favor of ESLint. Please see https://github.com/palantir/tslint/issues/4534 for more information."

... mas suponho que não seja o caso. Eu fui em frente e depreciei os mais novos.

@adidahiya Obrigado, abri um problema nos documentos do NPM aqui: https://github.com/npm/cli/issues/1165

As versões mais antigas também devem ser preteridas? Da mesma forma como o pedido faz isso ?

A razão pela qual estou perguntando é porque estamos procurando migrar nossos pacotes para o ESLint, mas estamos usando bastante o TSLint ^5, e seria bom usar nosso processo existente para apenas verificar nossos repositórios (mais de 300) avisos de descontinuação para sinalizar qualquer um que precise ser migrado.

As reprovações sempre e somente sempre se aplicaram a versões existentes; se você quiser que novas versões sejam preteridas, você sempre terá que removê-las manualmente após a publicação.

Não seria legal que os usuários exibissem algo muito claro sobre a depreciação do TSLint na página do github https://palantir.github.io/tslint/?

Não seria legal que os usuários exibissem algo muito claro sobre a depreciação do TSLint na página do github https://palantir.github.io/tslint/?

É exatamente isso que eu estava esperando! por favor, alguém apresente algumas instruções passo a passo claras sobre como migrar de tslint para eslint

O site de documentação do TSLint não é atualizado há algum tempo, mas o README deste repositório está atualizado e há muitas informações úteis, incluindo um guia passo a passo para migração, no typescript-eslint README .

Correção para a mensagem de erro
[https://stackoverflow.com/questions/61605380/angular-9-issue-unable-to-run-the-initial-application]
npm instalar chokidar
npm cache clean --force
npm install -g @angular/ cli@latest

install error
Olá equipe Angular, sou novo no Angular, por favor me ajude com o erro que estou recebendo ao tentar criar um novo projeto.

Obrigada.

Olá equipe Angular, sou novo no Angular, por favor me ajude com o erro que estou recebendo ao tentar criar um novo projeto.

Obrigada.

Você está no lugar errado
Isso é palantir e não angular
Crie um problema em https://github.com/angular/angular/issues
Ou melhor ainda, procure se já existe um problema para resolver este problema
Feliz em ajudar, até mais

Por mais que eu esteja pasmo com eles pedindo 'aqui' por ajuda do Angular.

@JoshuaKGoldberg Obrigado!

Também deve chegar o dia em que você arquiva/bloqueia este repositório.

Não deve nunca precisar de uma mudança de código novamente. Se alguém encontrar um bug agora, a solução é usar o ESLint em vez de desenterrar esse projeto há muito obsoleto.

É bom ver que a maioria das pessoas está tentando sair disso agora, mas quanto mais explícito sobre abandonar isso, melhor.

Acho que ts-lint não deve mais ser usado em vez de eslint a partir de setembro de 2020

Se o seu projeto ainda usa ts-lint, considere usar
verificando https://github.com/typescript-eslint/tslint-to-eslint-config

mas typescript-eslint realmente não diz o que está errado https://github.com/typescript-eslint/typescript-eslint/blob/master/docs/getting-started/linting/FAQ.md#why -dont-i-see -typescript-errors-in-my-eslint-output

😢

mas typescript-eslint realmente não diz o que está errado https://github.com/typescript-eslint/typescript-eslint/blob/master/docs/getting-started/linting/FAQ.md#why -dont-i-see -typescript-errors-in-my-eslint-output

😢

Eu acho que isso é mais ou menos verdade mesmo com o TSLint e por que mesmo com o TSLint, também chamamos tsc --noEmit em nossos scripts de linting.

Eu gerei um novo aplicativo angular com a versão 8 e ele tem o padrão tslint enviado com ele. Comecei a usar ts config para implementação husky. Minha pergunta é, é obrigatório mudar para o typescript-eslint como recomendado, dado o fato de que estarei usando o Angular 8 no meu projeto nos próximos anos?

@mayankkalbhor Como você viu, o padrão com Angular ainda é usar TSLint. Acredito que será até o Angular 11 ou posterior até que todas as configurações padrão no Angular CLI sejam configuradas para ESLint, veja o roteiro: https://angular.io/guide/roadmap#migration -to-eslint.

Se você já tiver algo configurado, terá que migrar isso sozinho, enquanto não há nada realmente forçando você a usar o ESLint em vez do TSLint. É completamente sua própria escolha. Se você prefere os recursos do ESLint ou planeja gastar tempo realmente configurando suas regras, talvez a migração seja o caminho para você. No entanto, se você não estiver gastando tempo configurando suas regras do TSLint e estiver satisfeito com elas, poderá continuar usando-as indefinidamente. Só não espere quantidades indefinidas de correções de bugs e nenhuma atualização de recursos.

Acredito que o caminho padrão para os desenvolvedores do Angular é esperar que o Angular inclua scripts de migração em alguma atualização futura do Angular, provavelmente do Angular 10 para 11 ou 11 para 12.

No entanto, qualquer pessoa é livre para migrar para o ESLint por conta própria. O único bloqueador real para você migrar é se você tiver tempo e não se importar em perder os recursos atualmente não presentes em configurações ESLint equivalentes. Onde houve algumas configurações de linting através do Codelyzer anteriormente e agora temos uma substituição iminente aqui: angular-eslint

Como estamos chegando ao EOL do software, seria incrível, se cada documento de regra tivesse um link para a regra de substituição na documentação do typescript-eslint, assim como o typescript-eslint faz ao contrário.

Isso significa que não poderei usar o tslint em meus projetos após 1º de janeiro de 2021? Atualmente minhas compilações estão usando tslint. Não vejo nenhum comando para instalar o tslint no site npm. E diz que o tslint está obsoleto agora. Alguém por favor pode tirar minhas dúvidas?

Obrigada.

Você pode usá-lo, mas não terá nenhum tipo de suporte de forma alguma.
Também não há mais atualizações.
Então, sim, você deve avançar para eslint.

Como meu último checkout, o tslint suporta mais tipos de correção automática, então recomendo executar 'tslint --fix' antes de executar o eslint.

As coisas podem ter mudado nesse meio tempo.

Eu vou classificar esse código ya

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

Ne-Ne picture Ne-Ne  ·  3Comentários

cateyes99 picture cateyes99  ·  3Comentários

zewa666 picture zewa666  ·  3Comentários

denkomanceski picture denkomanceski  ·  3Comentários

jacob-robertson picture jacob-robertson  ·  3Comentários