Tslint: Comece a descontinuar a regra sem variáveis ​​não usadas

Criado em 13 ago. 2016  ·  30Comentários  ·  Fonte: palantir/tslint

Acabei de notar essas novas verificações do compilador na v2.0: --noUnusedParameters e --noUnusedLocals . Isso essencialmente torna a regra no-unused-variable obsoleta. Como é uma regra muito básica, não acho que devemos removê-la imediatamente.

Proposta:

  • remover no-unused-variable de tslint:latest e tslint:recommended na v4.0
  • marcar a regra como obsoleta na v4.0

    • talvez na mensagem de falha?

  • remova a implementação da regra completamente no TSLint v5.0
Won't Fix Breaking Change

Comentários muito úteis

Um pequeno feedback. Ter essas regras no tslint é realmente conveniente, pois você recebe o aviso do linter, mas seu código ainda compila. Eu, pessoalmente, acho muito chato ter as falhas do compilador por causa de variáveis, parâmetros ou importação não utilizados, especialmente ao realizar uma alteração rápida de código, como refatoração ou experimentação de uma ideia.

Todos 30 comentários

Um bom recurso aqui é que o compilador fornece um opt-out: dê a um nome de variável um sublinhado inicial e o compilador não o sinalizará. Isso deve facilitar para as pessoas que desejam habilitar as verificações do compilador, mas podem ter um ou dois casos extremos que não desejam alterar.

@JKillian Isso é aplicável apenas a parâmetros, certo?

@glen-84 - boa captura, acho que você está correto.

@adidahiya apenas para observar que --noUnusedLocals e no-unused-variable operam de maneira bem diferente.

O --noUnusedLocals verifica as propriedades da classe também (na versão 2.0.2 do TS).

@charsleysa sim, a implementação é um pouco diferente. Eu acho que as opções do compilador são melhores que a regra TSLint, e é por isso que quero favorecê-la. Conforme observado na postagem original do problema, vamos removê-lo lentamente do núcleo do TSLint.

Acho que você deve removê-lo na versão 4. Deve haver muitos lançamentos de pré-visualização onde todos os desenvolvedores devem ver o aviso de descontinuação. E você removeu outras regras em favor das opções do compilador de qualquer maneira.

PD: Na versão dev-1, acho que isso é uma configuração recomendada.

Apenas como um feedback, eu encontrei esse problema hoje à noite e mesmo depois de encontrar esse problema, demorei um pouco para entender que --noUnusedLocals e --noUnusedParameters eram configurações tsc e não tslint. Pode ser útil esclarecer isso na mensagem de erro.

@ryangull obrigado pelo feedback. Fiz uma alteração que esclarece a mensagem

Um pequeno feedback. Ter essas regras no tslint é realmente conveniente, pois você recebe o aviso do linter, mas seu código ainda compila. Eu, pessoalmente, acho muito chato ter as falhas do compilador por causa de variáveis, parâmetros ou importação não utilizados, especialmente ao realizar uma alteração rápida de código, como refatoração ou experimentação de uma ideia.

O compilador lida com isso de uma maneira melhor, eu acho, e eu apoio você da maneira que não deve ser a compilação por causa disso, mas se você usar algo como webpack, por exemplo, os erros serão lançados, mas a compilação não vai parar.

Para @zubivan

Aceita. Eu prefiro manter este aviso no estágio de fiapos. Meu fluxo de trabalho é:

any file/code changes => run ts-compile => run tests => run ts-lint

Eu posso fazer qualquer alteração de código sujo rapidamente e testar os resultados primeiro e, em seguida, cumprir a guarda do tslint. Forçar você a escrever código limpo antes de qualquer teste é realmente irritante.

Para @michaeljota

Embora eu prefira mostrar o aviso após o teste, existe algum exemplo de webpack para atingir o objetivo?

Gostaria de saber se o TSLint poderia apenas executar o compilador, analisar e emitir seus avisos como avisos do TSLint? isso liberaria o TSLint de ter que manter uma implementação da regra mantida, mas permitiria que os usuários ainda pudessem usar os comentários úteis desativar / ignorar TSLint entre outras vantagens.

@xareelee no meu perfil você pode ver uma configuração Angular 2 com compilação TS sem jogar.

Eu não entendo por que eles fazem parte do compilador. Eles são puramente estilísticos, não afetando a correção do código, então parecem mais naturais como opções de linter. Eu também quero a capacidade de substituir esses avisos em certos casos, o que posso fazer com tslint, mas não com tsc.

Por que eles fazem parte do compilador agora, não é algo para discutir aqui. Acho que não vão ler essa regra, por motivos já expostos.

Para todos os outros que procuram uma solução sobre isso porque não querem usar as opções do compilador devido ao fato de impedirem o desenvolvimento local rápido (comentar algum código, etc., falharia na transpilação), você pode fazer algo como isto:

const Rule = require('tslint/lib/rules/noUnusedVariableRule').Rule;

// Hide deprecation message
Rule.metadata.deprecationMessage = '';
Rule.metadata.ruleName = 'no-unused-variable-wrapped';

module.exports.Rule = Rule;

em seu próprio arquivo de regra noUnusedVariableWrapped.js e habilite-o via "no-unused-variable-wrapped": true .

Gostaria de observar que uma coisa perdida dependendo da regra do compilador e não da regra tslint é a capacidade de corrigir automaticamente e remover importações/variáveis ​​não utilizadas.

Parece que há muito interesse em manter essa regra. Eu fui em frente e mesclei #2256, que descontinua a regra. Ele ainda não será incentivado nas configurações internas, mas estará disponível como opção.

Parece que, se seu tsconfig tiver "jsx": "react" , o tslint deve gerar um erro por perder a importação de reação.

@ccorcos "importação ausente" é um erro totalmente diferente de "nenhuma variável não utilizada". tsc deve ajudá-lo lá fora.

parece bom. não estou vendo esse erro no VSCode... :/

Olá @adidahiya ,

Obrigado por retomar esta regra. A questão é, quando será lançado? Como posso ver ainda não está incluído no 5.1.0.

@javier-tarazaga está lá na v5, assim como sempre esteve. mas não está habilitado na configuração tslint:recommended .

Olá @adidahiya ,

Hum estranho. Quando incluo a regra na versão do tslint 5.1.0 recebo o seguinte erro,

Could not find implementations for the following rules specified in the configuration:
    no-unused-vars
Try upgrading TSLint and/or ensuring that you have all necessary custom rules installed.
If TSLint was recently upgraded, you may have old rules configured which need to be cleaned up.

Isso é porque você usou o nome de arquivo errado. É uma variável sem uso, não
no-unused-vars

Am 02.05.2017 09:33 schrieb "Javier Tarazaga" [email protected] :

Olá @adidahiya https://github.com/adidahiya ,

Hum estranho. Quando incluo a regra na versão do tslint 5.1.0 recebo o
seguinte erro,

Não foi possível encontrar implementações para as seguintes regras especificadas na configuração:
no-unused-vars
Tente atualizar o TSLint e/ou garantir que você tenha todas as regras personalizadas necessárias instaladas.
Se o TSLint foi atualizado recentemente, você pode ter regras antigas configuradas que precisam ser limpas.


Você está recebendo isso porque está inscrito neste tópico.
Responda a este e-mail diretamente, visualize-o no GitHub
https://github.com/palantir/tslint/issues/1481#issuecomment-298527837 ,
ou silenciar o thread
https://github.com/notifications/unsubscribe-auth/ALaeKKYydi8vQ8MAhxOwBk3uL02jgzKNks5r1txLgaJpZM4JjuQh
.

Obrigado pela atenção! Agora estou enfrentando # 2650, então não posso realmente verificá-lo.

Eu instalei https://github.com/blakeembrey/tslint-config-standard
Existe alguma maneira de se livrar desses avisos, não tenho certeza se está relacionado ao padrão ou apenas ao tslint

> [email protected] lint /Users/nikos/WebstormProjects/common
> tslint 'src/**/*.ts' 'test/**/*.ts'

Warning: The 'await-promise' rule requires type information.
Warning: The 'no-unused-variable' rule requires type information.
Warning: The 'no-use-before-declare' rule requires type information.
Warning: The 'return-undefined' rule requires type information.
Warning: The 'no-floating-promises' rule requires type information.
Warning: The 'no-unnecessary-qualifier' rule requires type information.
Warning: The 'no-unnecessary-type-assertion' rule requires type information.
Warning: The 'strict-type-predicates' rule requires type information.

@QuantumInformation Você já tentou usar --project ?

Sim, isso funciona thx

🤖 Bip boop! 👉 TSLint está obsoleto 👈 e você deve mudar para typescript-eslint ! 🤖

🔒 Esta questão está sendo bloqueada para evitar mais discussões desnecessárias. Obrigada! 👋

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

Questões relacionadas

allbto picture allbto  ·  3Comentários

ghost picture ghost  ·  3Comentários

mrand01 picture mrand01  ·  3Comentários

cateyes99 picture cateyes99  ·  3Comentários

ypresto picture ypresto  ·  3Comentários