Tslint: Hoja de ruta: TSLint -> ESLint

Creado en 23 feb. 2019  ·  52Comentarios  ·  Fuente: palantir/tslint

Como puede haber leído en esta publicación de blog , planeamos dejar obsoleto TSLint en 2019 y admitir la migración a ESLint como el linter estándar para TypeScript y JavaScript. Esto no será una desaprobación inmediata; por el contrario, hay mucho trabajo por hacer para garantizar una transición sin problemas a las nuevas herramientas sin regresiones. Hay funciones, conjuntos de pruebas y comodidades en TSLint que esperamos conservar en la migración. Puede haber un período de tiempo en el que haya una superposición entre las dos herramientas y se recomienda a los primeros usuarios de TSLint que ejecuten _both_ linters para garantizar una cobertura completa de verificación de código (en un grado razonable para que el rendimiento no sufra drásticamente).

Cerraré algunas solicitudes de funciones en este repositorio que ahora se sienten fuera del alcance porque esperamos que se manejen en la hoja de ruta de ESLint / TypeScript-eslint . Un ejemplo de una categoría de reglas para las que es más probable que se cierren/rechacen __nuevas solicitudes de funciones__ son las reglas de formato. Sugerí dividir estas reglas durante bastante tiempo porque usamos Prettier en Palantir y lo consideramos una mejor herramienta para el trabajo de formato de código.

TSLint continuará publicándose con correcciones de errores importantes y actualizaciones que lo mantendrán actualizado con las últimas características del compilador/lenguaje.


Actualización (junio de 2019): cronograma de hoja de ruta más concreto, coordinado con @JoshuaKGoldberg y tslint-contrib-microsoft:

  • __1 de agosto de 2019__: dejar de aceptar nuevas reglas _básicas_. Seguir aceptando correcciones de errores, funciones menores y mejoras de reglas. Las reglas personalizadas son siempre una opción y se pueden mantener fuera de este repositorio.
  • __1 de noviembre de 2019__: dejar de aceptar funciones o mejoras de reglas (con la excepción de las que facilitan la migración a TypeScript-eslint). Todavía acepta correcciones de errores.
  • __1 de enero de 2020__: deje de aceptar cualquier cosa que no sean correcciones de seguridad y correcciones para fallas introducidas al romper los cambios de TypeScript.
  • __1 de diciembre de 2020__: deja de aceptar PR 🎉

Actualización (agosto de 2019): consulte tslint-to-eslint-config para ver un comando CLI que migra los archivos de configuración de TSLint a los archivos de configuración de ESLint.


Actualización (marzo de 2020): se agregaron _"y correcciones para bloqueos introducidos por cambios de TypeScript"_ a la fecha límite del 1 de enero, luego de la discusión en #4914.

Documentation

Comentario más útil

Sería genial tener un comando CLI que migre un tslint.json a un eslint.json, mapeando reglas y opciones equivalentes. Idealmente, eliminaría las reglas que se pueden migrar desde tslint.json y mantendría las reglas que aún no tienen un equivalente (o que no son compatibles con las opciones utilizadas), de modo que la regla se pueda ejecutar de manera idempotente repetidamente con el tiempo hasta que tslint.json se quede vacío. en algún momento y podemos confiar plenamente en ESLint.

Todos 52 comentarios

Sería genial tener un comando CLI que migre un tslint.json a un eslint.json, mapeando reglas y opciones equivalentes. Idealmente, eliminaría las reglas que se pueden migrar desde tslint.json y mantendría las reglas que aún no tienen un equivalente (o que no son compatibles con las opciones utilizadas), de modo que la regla se pueda ejecutar de manera idempotente repetidamente con el tiempo hasta que tslint.json se quede vacío. en algún momento y podemos confiar plenamente en ESLint.

Buenas noticias.
Los muchachos de ESLint ya comenzaron el proyecto TypeScript-eslint para admitir TS.
Ellos también buscan ayuda. Aquí está la declaración. .

¿Qué significará escribir reglas tslint después de la migración?

¿Existe un plan para migrar eslint de JS a TS? Odio decirlo, pero si eslint no se migra a ts, no sería tan agradable escribir reglas.

Mi error, no es eslint lo que usaremos, usaremos mecanografiado-eslint, tiene más sentido. déjame saber si puedo ser de alguna ayuda.

¿Sería posible hacer referencia a este plan para desaprobarlo del readme.md en el repositorio? Parece que solo ciertas personas conocen este plan y no es de conocimiento común. ¡Gracias!

@ joeyj-msft, de hecho, agregado en a395501739bf7f0f166e5b0ccb355c0e9500445a por adidahiya.

Sería bueno tener un "resumen" de las reglas de TSLint (https://palantir.github.io/tslint/rules/) disponible en typescript-eslint . No sé si debería ser un indicador "ESLint" en palantir o una nueva lista en https://github.com/typescript-eslint/typescript-eslint. Pero ayudaría a decidir si un proyecto está listo para moverse o no.

@JoshuaKGoldberg Estoy cambiando de tslint a typescript-eslint. Estaba usando TSLint para crear reglas personalizadas para mi proyecto. ¿Cómo puedo proceder a crear reglas personalizadas como lo hicimos en TSLint?

Mi proyecto crea archivos Javascript y Typescript, ¿así que tengo que crear una sola regla para ellos?

@moulikcipherX gracias por preguntar, ¡excelentes preguntas!

Puede usar sus reglas TSLint dentro de ESLint usando typescript-eslint/packages/eslint-plugin-tslint . Envuelve una configuración de TSLint y borra su código usando TSLint.

Para escribir reglas en ESLint, consulte typescript-eslint/packages/eslint-plugin . Ese README.md tiene una lista de todas las reglas compatibles _(¡la lista se ha vuelto bastante grande!)_. El ROADMAP.md allí tiene un mapeo de las reglas TSLint existentes a los nuevos equivalentes.

Gracias @JoshuaKGoldberg.

Así que puedo seguir usando los mismos métodos para crear reglas personalizadas para TypeScript igual que en TSLint.

Nota: acabo de actualizar la publicación original en este hilo con una línea de tiempo de hoja de ruta más concreta. Desplácese hasta la parte superior de esta página para verlo.

Er, ¿no debería la publicación del blog también estar en https://github.com/palantir/tslint/tree/gh-pages/_posts y enlazada desde https://github.com/palantir/tslint/blob/master/ LÉAME.md ?

@SamB el blog en el sitio web de gh-pages está bastante desactualizado, no lo hemos estado actualizando. Y la publicación del blog está vinculada en la parte superior del LÉAME.

@adidahiya @JoshuaKGoldberg
Quiero contribuir al proyecto mecanografiado-eslint, ¿por dónde debo empezar?

¿Se admitirá la transformación equivalente de reglas tslint personalizadas a reglas eslint personalizadas en el futuro typescript-supported-eslint ?

Lo que estoy tratando de decir es tener un cierto comando CLI para convertir los archivos JS de custom-tslint-rule a las correspondientes reglas de linting compatibles con eslint. Ayudará mucho ya que volver a implementar la regla de tslint a eslint será un trabajo realmente difícil...

Gracias por crear una herramienta tan brillante y te deseo todo lo mejor en tus futuras aventuras. Hablando de aventuras, esta sin duda ha sido una, ¿no?

De todos modos, todo lo mejor para ti,
Será

Dado que estamos llegando a finales de 2019 (el año en que supuestamente este repositorio quedó obsoleto), ahora podría ser un buen momento para agregar el indicador obsoleto en NPM para que las nuevas instalaciones se dirijan a ESLint.

También sería útil hacer que el aviso Léame sea un poco más obvio (nivel superior) y vincular a los usuarios a TypeScript-eslint.

¿Planea hacer esto ahora que ESLint ha cubierto casi todos los casos de uso comunes?

También creo y espero que cuando tslint esté obsoleto, eslint reciba más presión y la comunidad se centre más en él.

El tslint-to-eslint-config ayuda a convertir tslint.json en .eslinerc.js pero no puede
no puede encargarse de tslint:disable:<rule> línea, además, algunas reglas no están bien configuradas o aún no son compatibles con eslint.

Todavía hay algunas ventajas al migrar de tslint a eslint, ¿cuál es el beneficio de usar eslint para archivos mecanografiados? ¿Para obtener una mejor consistencia entre la comunidad de mecanografiados y la comunidad de javascript?
Si un proyecto solo usa mecanografiado, sin ningún archivo javascript, ¿hay algún beneficio después de realizar la migración?

El tslint-to-eslint-config ayuda a convertir tslint.json en .eslinerc.js pero no puede
no puede encargarse de tslint:disable:<rule> línea

De hecho: https://github.com/typescript-eslint/tslint-to-eslint-config/issues/136
¡Le invitamos a colaborar para agregarlo si lo desea! Hay un PR de trabajo en progreso en https://github.com/typescript-eslint/tslint-to-eslint-config/pull/246 que podría necesitar algo de ayuda.

Todavía hay algunas ventajas al migrar de tslint a eslint, ¿cuál es el beneficio de usar eslint para archivos mecanografiados?

Puede ver las razones enumeradas en la publicación del blog mencionada en la parte superior de este hilo.

@beenotung

TSLint siempre ha sido limitado en comparación con ESLint, hay un montón de reglas que nunca tuvo y que sí tuvo ESLint. Sin mencionar los complementos y la comunidad / soporte mucho más grande que ESLint siempre tuvo. Además, muchos de nosotros tenemos un eslintrc bien configurado que usamos en todas partes, lo que hace que cualquier proyecto TSLint sea una inconsistencia que necesita ser reparada (mediante el uso de una herramienta no obsoleta).

Si falta algo de ESLint que tiene TSLint, es mejor subirlo para que pueda implementarse que continuar usando una herramienta obsoleta.

Gracias por traer más contexto a eslint, veo el beneficio de usar eslint.

De hecho, traté de migrar de tslint a eslint, pero parece que algunos bordes no se pueden arreglar fácilmente porque eslint no tiene el concepto de tipo (por lo tanto, la sangría para el tipo genérico está rota).

Con respecto al soporte de herramientas en eslint (especialmente las sugerencias de IDE en el archivo de configuración). Desearía poder contribuir algún día, pero no tengo experiencia ni estoy libre para trabajar en eso actualmente. (Al menos no está en la parte superior de mi lista porque bueno, tslint todavía funciona bien)

Parece que la forma menos dolorosa es usar tslint para archivos mecanografiados y eslint para archivos javascript, para que ambos mundos puedan disfrutar de su 'consistencia'.

Como npm indica que TSLint está en desuso y usa ESLint en su lugar , asumo que la migración está completa.
¿No debería cerrarse este tema?

@cdalexndr , sigue siendo útil tener este problema abierto para que las personas conozcan los motivos de la desaprobación y lean las actualizaciones más recientes.

La publicación de blog anterior no se centra en los detalles técnicos sobre typescript-eslint .
Los usuarios de TSLint pueden leer más sobre ¿Cómo funciona typescript-eslint ?

En general, todo el archivo TypeScript-eslint/README tiene todo lo necesario para una transición transparente.

¿Hay alguna razón por la que el paquete en sí no esté marcado como obsoleto en npm? ¿Como, por ejemplo, solicitud ?

@niklasR versión 6.0.0 se marcó como obsoleta en NPM y luego se desató el infierno.

Echa un vistazo a #4919 y #4914.

Sin embargo, _queremos_ que todo el infierno se desate 😛... la gente debería dejar de usar TSLint.

Parece que nunca marcamos explícitamente las nuevas versiones como obsoletas; consulte el historial de versiones en https://www.npmjs.com/package/tslint :
Screenshot showing 6.0.0 as deprecated on npm but later versions not

No tengo permisos - @adidahiya ?

Oh, extraño, pensé que los documentos aquí sugerían que este comando desaprobaría todas las posibles versiones futuras que caen dentro del rango:

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."

... pero supongo que ese no es el caso. Me he adelantado y desaprobado los más nuevos.

@adidahiya Gracias, abrí un problema en los documentos de NPM aquí: https://github.com/npm/cli/issues/1165

¿Deberían quedar obsoletas también las versiones anteriores? Del mismo modo, ¿cómo lo hace la solicitud?

La razón por la que pregunto es porque estamos buscando migrar nuestros paquetes a ESLint, pero estamos usando mucho TSLint ^5, y sería bueno usar nuestro proceso existente para escanear nuestros (300+) repositorios para avisos de obsolescencia para marcar cualquiera que necesite migrar.

Las obsolescencias siempre y solo se han aplicado a las versiones existentes; si desea que las nuevas versiones queden obsoletas, siempre debe hacerlo manualmente después de la publicación.

No sería bueno que los usuarios mostraran algo muy claro sobre la desaprobación de TSLint en la página de github https://palantir.github.io/tslint/?

No sería bueno que los usuarios mostraran algo muy claro sobre la desaprobación de TSLint en la página de github https://palantir.github.io/tslint/?

¡Eso es exactamente lo que he estado esperando! por favor, que alguien presente algunas instrucciones claras paso a paso sobre cómo migrar de tslint a eslint

El sitio web de documentación de TSLint no se ha actualizado en bastante tiempo, pero el LÉAME de este repositorio está actualizado y hay mucha información útil, incluida una guía paso a paso para la migración, en el LÉAME de typescript-eslint .

Solución para el mensaje de error
[https://stackoverflow.com/questions/61605380/angular-9-issue-unable-to-run-the-initial-application]
npm instalar chokidar
limpieza de caché npm --force
npm install -g @angular/ cli@latest

install error
Hola equipo de Angular, soy nuevo en angular, ayúdenme con el error que recibo al intentar crear un nuevo proyecto.

Gracias.

Hola equipo de Angular, soy nuevo en angular, ayúdenme con el error que recibo al intentar crear un nuevo proyecto.

Gracias.

estas en el lugar equivocado
Esto es palantir y no angular
Crea un problema en https://github.com/angular/angular/issues
O incluso mejor, busque si ya hay un problema para abordar este problema
Feliz de ayudar, nos vemos

Por mucho que me quede estupefacto al preguntar 'aquí' por ayuda de Angular... Estoy bastante impresionado de que su logotipo se parezca a la toma de corriente del Reino Unido.

@JoshuaKGoldberg ¡Gracias!

También debería llegar el día en que archive/bloquee este repositorio.

Nunca más debería necesitar un cambio de código. Si alguien encuentra un error ahora, la solución es usar ESLint en lugar de desenterrar este proyecto obsoleto.

Es bueno ver que la mayoría de la gente está tratando de dejarlo ahora, pero cuanto más explícito sobre abandonar esto, mejor.

Creo que ts-lint ya no debería usarse en lugar de eslint a partir de septiembre de 2020

Si su proyecto todavía usa ts-lint, considere usar
comprobando https://github.com/typescript-eslint/tslint-to-eslint-config

pero mecanografiado- eslint realmente no dice lo que está mal -errores-mecanografiados-en-mi-salida-eslint

😢

pero mecanografiado- eslint realmente no dice lo que está mal -errores-mecanografiados-en-mi-salida-eslint

😢

Creo que esto es más o menos cierto incluso para TSLint y por qué, incluso con TSLint, también llamamos tsc --noEmit en nuestros scripts de linting.

Generé una nueva aplicación angular con la versión 8 y tiene tslint predeterminado enviado con ella. Comencé a usar ts config para la implementación de husky. Mi pregunta es, ¿es obligatorio pasar a TypeScript-eslint como se recomienda dado el hecho de que usaré Angular 8 en mi proyecto durante algunos años?

@mayankkalbhor Como ha visto, el valor predeterminado con Angular sigue siendo usar TSLint. Creo que será hasta Angular 11 o posterior hasta que todas las configuraciones predeterminadas en Angular CLI estén configuradas para ESLint, consulte la hoja de ruta: https://angular.io/guide/roadmap#migration -to-eslint.

Si ya tiene algo configurado, tendrá que migrarlo usted mismo mientras no haya nada que realmente lo obligue a usar ESLint en lugar de TSLint. Es completamente su propia elección. Si prefiere las funciones de ESLint o planea dedicar tiempo a configurar sus reglas, tal vez la migración sea el camino para usted. Sin embargo, si no dedica tiempo a configurar sus reglas TSLint y está satisfecho con ellas, puede continuar usándolas indefinidamente. Simplemente no espere cantidades indefinidas de correcciones de errores y ninguna actualización de funciones.

Creo que la ruta predeterminada para los desarrolladores de Angular es esperar a que Angular incluya scripts de migración en alguna actualización futura de Angular, probablemente de Angular 10 a 11 u 11 a 12.

Sin embargo, cualquiera es libre de migrar a ESLint por su cuenta. El único obstáculo real para la migración es si tiene tiempo y no le importa perder las funciones que actualmente no están presentes en las configuraciones equivalentes de ESLint. Donde ha habido algunas configuraciones de pelusa a través de Codelyzer anteriormente y ahora tenemos un reemplazo inminente aquí: angular-eslint

A medida que estamos alcanzando el EOL del software, sería increíble si cada documento de regla tuviera un enlace a la regla de reemplazo en la documentación de typescript-eslint, tal como lo hace typescript-eslint a la inversa.

¿Significa esto que no podré usar tslint en mis proyectos después del 1 de enero de 2021? Actualmente mis compilaciones están usando tslint. No veo ningún comando para instalar tslint en el sitio web de npm. Y dice que tslint está obsoleto ahora. ¿Alguien puede atender mis consultas?

Gracias.

Puede usarlo, pero no obtendrá ningún tipo de apoyo de ninguna manera.
Tampoco más actualizaciones.
Así que sí, deberías pasar a eslint.

Como mi último pago, tslint admite más tipos de reparación automática, por lo que recomiendo ejecutar 'tslint --fix' antes de ejecutar eslint.

Las cosas pueden haber cambiado mientras tanto.

Lo ordenaré ese código ya

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