Tslint: Comenzar a desaprobar la regla de no variable no utilizada

Creado en 13 ago. 2016  ·  30Comentarios  ·  Fuente: palantir/tslint

Acabo de notar estas nuevas verificaciones del compilador en v2.0: --noUnusedParameters y --noUnusedLocals . Básicamente, esto hace que la regla no-unused-variable quede obsoleta. Dado que es una regla muy básica, no creo que debamos eliminarla de inmediato.

Propuesta:

  • eliminar no-unused-variable de tslint:latest y tslint:recommended en v4.0
  • marcar la regla como obsoleta en v4.0

    • tal vez en el mensaje de error?

  • elimine la implementación de la regla por completo en TSLint v5.0
Won't Fix Breaking Change

Comentario más útil

Un pequeño comentario. Tener estas reglas en tslint es realmente conveniente ya que recibe la advertencia de linter, pero su código aún se compila. Personalmente, encuentro bastante molesto tener fallas en el compilador debido a una variable, parámetro o importación no utilizados, especialmente cuando se realiza un cambio rápido de código como refactorizar o probar una idea.

Todos 30 comentarios

Una buena característica aquí es que el compilador proporciona una opción de exclusión: asigne un guión bajo a un nombre de variable y el compilador no lo marcará. Esto debería facilitar las cosas para las personas que desean habilitar las comprobaciones de cumplimiento, pero que pueden tener uno o dos casos extremos que no desean cambiar.

@JKillian Eso solo se aplica a los parámetros, ¿verdad?

@ glen-84: buena captura, creo que tienes razón.

@adidahiya solo para señalar que --noUnusedLocals y no-unused-variable funcionan de manera bastante diferente.

El --noUnusedLocals también parece verificar las propiedades de la clase (en la versión 2.0.2 de TS).

@charsleysa sí, la implementación es ligeramente diferente. Creo que las opciones del compilador son mejores que la regla TSLint, por lo que quiero favorecerla. Como se indicó en la publicación del problema original, lo eliminaremos lentamente del núcleo de TSLint.

Creo que debería eliminarlo en la versión 4. Debería haber muchas versiones preliminares en las que todos los desarrolladores deberían ver la advertencia de obsolescencia. Y ha eliminado otras reglas a favor de las opciones del compilador de todos modos.

PD: En la versión dev-1, creo que esta es una configuración recomendada.

Solo como un poco de retroalimentación, encontré este problema esta noche e incluso después de encontrar este problema, me tomó un poco entender que --noUnusedLocals y --noUnusedParameters eran configuraciones tsc y no tslint. Puede ser útil aclarar eso en el mensaje de error.

@ryanguill gracias por los comentarios. Hice un cambio que aclara el mensaje.

Un pequeño comentario. Tener estas reglas en tslint es realmente conveniente ya que recibe la advertencia de linter, pero su código aún se compila. Personalmente, encuentro bastante molesto tener fallas en el compilador debido a una variable, parámetro o importación no utilizados, especialmente cuando se realiza un cambio rápido de código como refactorizar o probar una idea.

Creo que el compilador maneja esto de una mejor manera, y lo apoyo en la forma en que no debería completar la compilación debido a esto, pero si usa algo como webpack, por ejemplo, los errores se producirán pero la compilación no se detendrá

Para @zubivan

Estar de acuerdo. Prefiero mantener esta advertencia en la etapa de pelusa. Mi flujo de trabajo es:

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

Puedo hacer que cualquier código sucio cambie rápidamente y probar los resultados primero, y luego cumplir con la guardia de tslint. Obligarlo a escribir código limpio antes de cualquier prueba es realmente molesto.

Para @michaeljota

Aunque prefiero mostrar la advertencia después de la prueba, ¿hay algún ejemplo de paquete web para lograr el objetivo?

Me pregunto si TSLint podría simplemente ejecutar el compilador, analizar y generar sus advertencias como advertencias de TSLint. esto liberaría a TSLint de tener que mantener una implementación de la regla, pero permitiría a los usuarios seguir usando la útil función de deshabilitar/ignorar los comentarios de TSLint, entre otras ventajas.

@xareelee en mi perfil puedes ver una configuración de Angular 2 con compilación TS sin tirar.

No entiendo por qué estos son parte del compilador. Son puramente estilísticos y no afectan la corrección del código, por lo que parecen más naturales como opciones de linter. Yo también quiero la capacidad de anular estas advertencias en ciertos casos, lo que puedo hacer con tslint pero no con tsc.

Por qué estos son parte del compilador ahora, no es algo para discutir aquí. No creo que lean esta regla, por razones ya expuestas.

Para todos los demás que buscan una solución a esto porque no quieren usar las opciones del compilador debido al hecho de que impedirían un desarrollo local rápido (comentar algún código, etc. fallaría en la transpilación), puede hacer algo como esta:

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;

en su propio archivo de regla noUnusedVariableWrapped.js y luego actívelo a través "no-unused-variable-wrapped": true .

Me gustaría señalar que una cosa que se pierde dependiendo de la regla del compilador y no de la regla tslint es la capacidad de corregir automáticamente y eliminar importaciones/variables no utilizadas.

Parece que hay mucho interés en mantener esta regla. Seguí adelante y fusioné # 2256, lo que anula la regla. Todavía no se recomendará en las configuraciones integradas, pero estará disponible de forma voluntaria.

Parece que si su tsconfig tiene "jsx": "react" entonces tslint debería arrojar un error por perder la importación de reacción.

@ccorcos "importación faltante" es un error completamente diferente de "no hay variable sin usar". tsc debería ayudarte.

suena bien. simplemente no veo este error en VSCode... :/

Hola @adidahiya ,

Gracias por recuperar esta regla. La pregunta es, ¿cuándo se lanzará? Como puedo ver, aún no está incluido en 5.1.0.

@javier-tarazaga está ahí en v5, como siempre ha estado. sin embargo, no está habilitado en la configuración tslint:recommended .

Hola @adidahiya ,

Mmm raro. Cuando incluyo la regla en la versión de tslint 5.1.0 me sale el siguiente error,

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.

Eso es porque usó el nombre de archivo incorrecto. No es una variable no utilizada, no
no-unused-vars

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

Hola @adidahiya https://github.com/adidahiya ,

Mmm raro. Cuando incluyo la regla en la versión de tslint 5.1.0 obtengo el
siguiente error,

No se pudieron encontrar implementaciones para las siguientes reglas especificadas en la configuración:
no-unused-vars
Intente actualizar TSLint y/o asegúrese de tener instaladas todas las reglas personalizadas necesarias.
Si TSLint se actualizó recientemente, es posible que tenga reglas antiguas configuradas que deben limpiarse.


Estás recibiendo esto porque estás suscrito a este hilo.
Responda a este correo electrónico directamente, véalo en GitHub
https://github.com/palantir/tslint/issues/1481#issuecomment-298527837 ,
o silenciar el hilo
https://github.com/notifications/unsubscribe-auth/ALaeKKYydi8vQ8MAhxOwBk3uL02jgzKNks5r1txLgaJpZM4JjuQh
.

¡Gracias por el aviso! Ahora estoy frente al # 2650, por lo que realmente no puedo verificarlo.

Instalé https://github.com/blakeembrey/tslint-config-standard
¿Hay alguna forma de deshacerse de estas advertencias? No estoy seguro de si está relacionado con el estándar o simplemente con 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 ¿Ha intentado usar --project ?

Sí, eso funciona gracias

🤖 ¡Bip boop! 👉 ¡TSLint está en desuso 👈 y debe cambiar a TypeScript-eslint ! 🤖

🔒 Este problema se está bloqueando para evitar más discusiones innecesarias. ¡Gracias! 👋

¿Fue útil esta página
0 / 5 - 0 calificaciones