import { A, B, C } from './file';
console.log('No imports used');
export const D = 4;
com configuração tslint.json
:
{
"rules": {
"no-unused-variable": [true, {"ignore-pattern": "^_"}]
}
}
The 'no-unused-variable' rule threw an error in '/Users/andrew.mitchell/Documents/Projects/test/test.ts':
TypeError: Cannot read property '1' of null
at walk (/Users/andrew.mitchell/Documents/test/node_modules/tslint/lib/rules/noUnusedVariableRule.js:105:54)
at Rule.AbstractRule.applyWithFunction (/Users/andrew.mitchell/Documents/test/node_modules/tslint/lib/language/rule/abstractRule.js:39:9)
at Rule.applyWithProgram (/Users/andrew.mitchell/Documents/test/node_modules/tslint/lib/rules/noUnusedVariableRule.js:32:21)
at Linter.applyRule (/Users/andrew.mitchell/Documents/test/node_modules/tslint/lib/linter.js:194:29)
at /Users/andrew.mitchell/Documents/test/node_modules/tslint/lib/linter.js:139:85
at Object.flatMap (/Users/andrew.mitchell/Documents/test/node_modules/tslint/lib/utils.js:151:29)
at Linter.getAllFailures (/Users/andrew.mitchell/Documents/test/node_modules/tslint/lib/linter.js:139:32)
at Linter.lint (/Users/andrew.mitchell/Documents/test/node_modules/tslint/lib/linter.js:99:33)
at /Users/andrew.mitchell/Documents/test/node_modules/tslint/lib/runner.js:209:32
at step (/Users/andrew.mitchell/Documents/test/node_modules/tslint/node_modules/tslib/tslib.js:133:27)
A regra deve avisar All imports in import declaration are unused.
para a linha 1.
Isso é causado por noUnusedVariableRule.ts # L123 porque a mensagem failure
é All imports in import declaration are unused.
, que não possui um nome de variável para a regex localizar.
Esta regra funciona corretamente se a opção ignore-pattern
não for especificada, pois não tentará verificar o nome da variável.
Bom encontrar @hotforfeature. Comecei a abordar isso em https://github.com/palantir/tslint/pull/3919 porque estava relacionado a algumas mudanças que ocorrerão no TS 2.9 que só irão agravar o problema.
Meu PR evita que uma exceção seja lançada, no entanto, ele simplesmente ignora ignorePattern
nos casos que você mencionou, o que não é ótimo. Acredito que precisaremos adicionar algum código complexo, como o que fazemos para autofixes de importação agora: /
Estou me perguntando se devemos descartar essa regra. O tsc agora fornece uma maneira de ignorar seus avisos e oferece suporte para correções automáticas de seus avisos por meio de um IDE.
Pelo que posso ver, o principal benefício dessa regra é ignore-pattern
, mas é difícil implementar isso corretamente da maneira como a regra agora está escrita para depender do diagnóstico tsc. O TSLint também é um pouco mais flexível do que o tsc no que diz respeito a desabilitar regras em certos arquivos. @suchanlee alguma opinião sobre tudo isso? Eu sei que você corrigiu esta regra recentemente
Meu principal caso de uso para essa regra é corrigir automaticamente os problemas de commit em um git hook durante o lint. Portanto, ainda acho que há um grande valor aqui, mesmo que o tsc ofereça algo por meio de integrações IDE.
@JKillian, acho que a regra está começando a ficar cada vez mais cara para suportar com o suporte do TSLint para várias versões do Typescript e mudanças contínuas no comportamento do Typescript. E como o Typescript oferece suporte ao recurso, devemos nos inclinar a usá-lo. Mas como as versões anteriores do TS não o suportam, não acho que devemos excluí-lo. No entanto, acho que devemos começar a pensar em descontinuar a regra e trabalhar com o pessoal do TS para oferecer melhor suporte aos fluxos de trabalho TSLint atuais com o TS.
Eu apoiaria a proposta de
@hotforfeature - confirme seu caso de uso e considere-o razoável. No entanto, devido à complexidade da regra, acho que vamos descontinuá-la (consulte # 3919).
Como sempre, qualquer pessoa é bem-vinda para copiar o código-fonte da regra e movê-lo para um pacote externo e continuar usando / melhorando dessa forma!
Por que vale a pena:
{
"compilerOptions": {
"noUnusedLocals": true,
"noUnusedParameters": true,
}
}
Usar o acima em tsconfig
permite que a regra no-unused-variable
lint seja desabilitada.
no-unused-variable
agora está obsoleto, e compilerOptions
acima é a solução oficial agora.
Definir noUnusedLocals
e noUnusedParameters
em compilerOptions
não é exatamente o mesmo que no-unused-variable
tslint. A partir de agora, vars não utilizados travam a compilação ou permanecem despercebidos e não há mais modo de aviso 😞
@giladgray , @killtheliterate escreveu:
Usar o comando acima em tsconfig permite que a regra de lint de variável não utilizada seja desabilitada.
Eu não quero desabilitar esta regra, porque como @kachkaev escreveu
Definir
noUnusedLocals
enoUnusedParameters
emcompilerOptions
não é exatamente o mesmo queno-unused-variable
tslint
Meu caso de uso é o código gerado. Eu quero que meu código escrito manualmente siga esta regra, mas para evitar tornar o gerador de código extremamente complexo, eu gostaria de desabilitar essa regra no código gerado (ou pelo menos em algumas seções do código gerado) - isso é o que pode ' pode ser feito com as opções do compilador TypeScript 😞
No mínimo, essa suspensão de uso deve ser documentada no plenamente que essa suspensão de uso foi prematura. Algum plano para reconsiderar? Uma contribuição da comunidade seria aceita?
Essa depreciação é ridícula. Os sinalizadores do compilador são uma substituição TERRÍVEL. Eles quebram a construção e não se consertam. Como essa é uma solução razoável para apontar as pessoas? Se a opção ignore-pattern
for muito difícil de fazer funcionar agora, desative-a.
👋 pessoal - apenas vinculando isso a https://github.com/palantir/tslint/issues/4232. É bem entendido e aceito que as opções do compilador embutido _não_ são uma substituição suficiente para no-unused-variable
. A implementação original da regra não funcionou bem com outras ferramentas de TS e teve que ser desativada. # 4232 rastreia encontrar uma maneira de habilitá-lo novamente.
Nesse ínterim, você pode usar algo como tsc --noEmit --noUnusedLocals --noUnusedParameters
como uma ferramenta separada para usar as verificações integradas. Sim, isso não é tão bom quanto no-unused-variables
configurável.
continue a discussão em # 4100 e # 4232
Comentários muito úteis
Definir
noUnusedLocals
enoUnusedParameters
emcompilerOptions
não é exatamente o mesmo queno-unused-variable
tslint. A partir de agora, vars não utilizados travam a compilação ou permanecem despercebidos e não há mais modo de aviso 😞