Tslint: Característica: archivo ".tslintignore" para excluir globos

Creado en 5 feb. 2014  ·  57Comentarios  ·  Fuente: palantir/tslint

Actualización (2016/06/01)

El indicador de CLI --exclude está disponible desde TSLint v3.6. Este problema ahora rastrea una solicitud de función para un archivo .tslintignore .

Problema original

CC: https://github.com/madskristensen/WebEssentials2013/issues/617

De JsHint docs , hay dos indicadores de exclusión en las opciones de cli:

--excluir

Le permite especificar directorios que NO desea que se borren.

--excluir-ruta

Le permite proporcionar su propio archivo .jshintignore. Por ejemplo, puede apuntar JSHint a su archivo .gitignore y usarlo en lugar del .jshintignore predeterminado.

Proporciónenos los indicadores similares, para que podamos pasar el archivo .tslintignore para excluir archivos y carpetas cuando algún script de ejecución por lotes/automatizado ejecute lint en él.

Vea la implementación de JsHint de esta característica: cli.js#L182-L208 y su llamador; función de recolección .

Aged Away Enhancement

Comentario más útil

Superar un problema de más de 3 años buscado por literalmente cientos de personas, con un PR de trabajo enviado, pero sin acción durante medio año.

Todos 57 comentarios

buena sugerencia. lo investigaremos.

+1

Para TSD, me gustaría generar esto en la carpeta de escritura de los usuarios al iniciar un nuevo proyecto.

+1

Esto es necesario para tratar los errores de pelusa como un bloqueo. Quiero que mi código esté alineado, no el código del proveedor.

+1

+1

+1 Esta es exactamente la solución que necesitamos. Estamos recibiendo una serie de errores tslint en los archivos d.ts. Ser capaz de excluir tanto carpetas como archivos específicos será muy importante ya que tampoco queremos borrar el código que no escribimos.

Estoy dispuesto a darle una oportunidad a esto, pero no estoy seguro de dónde ponerlo. ¿Queremos que esto sea una característica de cli o también queremos admitir esto en la biblioteca?
Si está en la biblioteca, es un poco extraño porque el método lint() devuelve un objeto de resultado, por lo que debemos devolver un objeto de resultado vacío un poco ficticio.
Vea aquí un trabajo en progreso, pero sí, no estoy seguro acerca de las cosas anteriores.
https://github.com/DickvdBrink/tslint/compare/palantir :master...Di ckvdBrink:ignoreFile

Estamos utilizando Visual Studio y las herramientas de Web Essentials. Para nosotros, el flujo de trabajo ideal sería especificar un archivo .tjshintignore que contendría algo como typings\ que ignoraría todos los archivos d.ts en esa carpeta. No estoy exactamente seguro de si Web Essentials está usando la función cli o la biblioteca, por lo que es difícil para mí saberlo. De hecho, ahora estoy un poco confundido, porque encontré este hilo que parece indicar que ya existe una solución para esto. https://github.com/madskristensen/WebEssentials2013/issues/617

Creo que están usando cli.
https://github.com/madskristensen/WebEssentials2013/blob/aaa83c3f6f7c9b051d7ef34be8498c6b67f37fca/EditorExtensions/TypeScript/Linters/TsLintCompiler.cs

Creo que está cerrado porque alguien creó este problema, vea las citas a continuación:

Would you like to send them a feature request?
I see somebody already has. Thanks :-)

Eso tiene sentido. Leíste mal eso.

Creo que implementarlo a través de la CLI está bien por ahora. las personas que usan grunt-tslint ya pueden excluir archivos a través de los globbers de archivos/directorios de grunt.

También estamos considerando la exclusión global para todos los servicios basados ​​en nodos en Web Essentials: https://github.com/madskristensen/WebEssentials2013/issues/589. No obstante, tener esa característica en tslint tiene su propio significado.

Actualización: en web-essentials, la función se envía con la compilación nocturna v2.2.4.

alguna actualización sobre esto?

Esta parece una característica relativamente importante que debería priorizarse. Quería señalar el interés en esta característica de una pregunta SO .

Sin embargo, no creo especialmente que se necesite un archivo .tslintignore , prefiero la idea más simple de agregar una opción CLI --exclude .

Podría ser mejor admitir esto a través de tsconfig.json (# 858) en lugar de volver a implementar esto en un indicador CLI ...

Hmm, la dificultad con eso es que es posible que desee compilar archivos diferentes a los de pelusa. Así que potencialmente podría usar tsconfig.json y luego también usar --exclude para no filtrar algunos de los archivos normalmente incluidos.

A diferencia de CLI, ¿no sería esto un ajuste natural en el archivo tslint.json y luego agregar una verificación de ignorar que analice "ignorePaths" en https://github.com/palantir/tslint/blob/master/src/tslint .ts#L46 ?

+1

+1, un .tslintignore será genial

+1 para .tslintignore o agregue una opción para ignorar ciertas rutas en tsconfig.json
Podría ser similar a https://github.com/bbatsov/rubocop#incluyendoexcluyendo -archivos

¿Necesitas ayuda para implementarlo?

Como primer paso, fusionaremos #1006 pronto, lo que agrega una opción CLI simple --exclude . ¿Eso te lleva la mayor parte del camino allí? Si está utilizando herramientas adicionales además de tslint , entonces probablemente tenga soporte glob/exclude (grunt/gulp/etc). ¿Qué tan importante es esto para apoyar en tslint.json ?

Ya no llamo a tslint desde los scripts de NPM, pero puede ser importante para aquellas personas que lo hacen, ya que NPM no proporciona (y creo que nunca lo hará) un soporte global multiplataforma.

No creo que sea una buena idea agregar opciones para los archivos que desea o no desea eliminar en el archivo tslint.json . Simplemente no parece que encaje allí. Tampoco es consistente con la configuración de jshint . Sí, son dos herramientas diferentes pero prácticamente hacen lo mismo. Dado que TS es un superconjunto de JS, debe haber cierta coherencia entre los dos. Preferiría tener un archivo .tslintignore (al igual que .jshintignore ) para mantener la coherencia entre JS y TS. Manténgalo separado de tsconfig.json ya que la pelusa no se está compilando.

+1 para la opción CLI, es un buen comienzo.

Quería mencionar que #1006 se fusionó y estaba en un lanzamiento hace aproximadamente un mes, por lo que si está utilizando la última versión de TSLint CLI, tendrá un indicador exclude disponible para su uso.

+1

+1

+1

¿Qué están haciendo +1 las personas aquí? un indicador --exclude ha estado disponible en la CLI desde v3.6 que le permite excluir globs (archivos, rutas, lo que sea).

@adidahiya No ayuda con WebStorm, por ejemplo. No hay opción para especificar banderas.

Entiendo que debería ser una solicitud de función para los desarrolladores de WebStorm, pero parece que es muy fácil de implementar en el lado de ts-lint. Y eso se hace para otras bibliotecas de pelusa de forma predeterminada. Entonces, ¿por qué no hacerlo así?

@fyodorvi genial, actualicé el título y la descripción del problema. Es probable que queramos resolver la ruta del archivo .tslintignore de la misma manera que resolvemos tslint.json .

¿Pros/contras de un nuevo archivo frente a convertirlo en un nuevo campo en tslint.json ?

Hay una solución para aquellos que quieren usar tslint con WebStorm:
Puede poner un archivo tslint.json vacío (con '{}' adentro) en su carpeta node_modules y habilitar la opción 'Buscar tslint.json' en WS. Eso restablecerá por completo todas las reglas de tslint para la carpeta node_modules, y guardará silencio sobre el código del proveedor (o puede agregar reglas específicas aquí si lo desea)

He estado siguiendo este hilo para poder excluir archivos específicamente usando vscode (desde antes de que el nombre se cambiara para ser específico de .tslintignore). Quería informar a otros que están tratando de integrar la exclusión con vscode que hay un problema separado y relaciones públicas recientes para exclusiones de tslint específicas de vscode.

@adidahiya un campo con una matriz de directorios o archivos dentro de tslint.json debería ser suficiente, prefiero no preocuparme por otro archivo para controlar este negocio cuando ya tenemos un archivo de configuración definido en un proyecto.

@Karabur, su solución no funciona para mí, incluso traté de agregar un objeto de reglas vacío, ¿me estoy perdiendo algo?

Un archivo es suficiente. Esto también coincidiría con el funcionamiento de tsconfig,json.

Una opción exclude en tslint.json estaría bien (solo un archivo para usar de esa manera) y ese es el nombre de la sección de ignorar glob de tsconfig.json como bien (sí, tsconfig.json include/exclude ahora es compatible con globs en TypeScript más reciente)

¿Alguien sabe lo que hace eslint, ya que estoy seguro de que también habrían golpeado esto? :Rosa:

En este momento, tslint.json no tiene control sobre _qué_ se borra, solo controla _cómo_ se borran los archivos. De hecho, dependiendo de cómo configure las cosas, la CLI de TSLint puede realmente filtrar diferentes archivos según diferentes reglas, todo en la misma ejecución.

No estoy en contra de una opción exclude en tslint.json , pero podría terminar siendo un ligero cambio de paradigma y tendría que pensarse detenidamente.

PD: Siempre feliz de escuchar sus comentarios @basarat , estaba leyendo su gitbook de TS hoy 😉

Acabo de lanzar una nueva versión de alm con tslint integrado con la versión 0.3.0 :heart:

linter

Después de tenerlo en mi cerebro, aquí está el resumen del diseño que he elegido para la integración de IDE y parece funcionar maravillosamente:

  • todos los archivos en el tsconfig.json actual están alineados excepto los archivos .d.ts
  • tslint.json debe determinarse usando un findup de tsconfig.json .

También he documentado esto aquí: https://basarat.gitbooks.io/alm/content/features/lint.html Siéntase libre de usar las ideas/fuente para cualquier otra integración IDE: rose:

@basarat ¡Creo que esas elecciones suenan perfectas! Todavía no he probado alm, pero tendré que intentarlo pronto 💻

Deje de publicar comentarios +1 y use la función integrada de votación a favor de Github en la descripción original del problema. Voy a eliminar tus comentarios de +1 ahora.

¿Han pasado tres años y esto todavía no se implementa? ¿Cómo es que esta es una de las características más triviales e importantes de la OMI?

¿Han pasado tres años y esto todavía no se implementa? ¿Cómo es que esta es una de las características más triviales e importantes de la OMI?

Después de todo, es OSS: si lo desea, envíe un PR.

El problema actual para mí es:

--exclude {node_modules,.git,cache}

El operador {} no funciona y no veo ninguna forma de excluir diferentes directorios...

@monolito :

--exclude node_modules --exclude .git --exclude cache

deberías hacer lo que quieras

¿Han pasado tres años y esto todavía no se implementa? ¿Cómo es que esta es una de las características más triviales e importantes de la OMI?

Después de todo, es OSS: si lo desea, envíe un PR.

He enviado un PR: https://github.com/palantir/tslint/issues/2409

@abenhamdine , ¿alguna idea de a quién debería pedirle que revise?

Superar un problema de más de 3 años buscado por literalmente cientos de personas, con un PR de trabajo enviado, pero sin acción durante medio año.

Gracias por el golpe. Tenga en cuenta que el PR vinculado, #2409, es para una nueva opción de configuración en tslint.json , que no es exactamente igual que el problema original (archivo .tslintignore ). Sin embargo, es un paso en la dirección correcta; He dejado algunos comentarios más de CR.

+1
Opciones:

  • Archiva .tslintignore a la carpeta para ignorar.
  • Archivo tslint.json (archivo global) nueva propiedad exclude con una lista de rutas/carpetas.
    Esto sería bueno.

Por cierto, la función se lanzó en [email protected]

Derecha. Ejemplo:
Cree una carpeta en su proyecto con el nombre .vscode y un archivo dentro settings.json .

{
  "tslint.exclude": "**/app/models/**"
}

para ignorar todos los archivos en /app/models/. Siéntete libre de mejorar la expresión. :)

+1

+1
necesito .tslintignore

Oh, oye, esto debería ser compatible ahora con linterOptions . Según https://palantir.github.io/tslint/usage/configuration/ :

  • linterOptions?: { exclude?: string[] } :

    • exclude: string[] : Una matriz de globos. Cualquier archivo que coincida con estos globos no se eliminará. Todos los patrones de exclusión son relativos al archivo de configuración en el que se especificaron.

¿Esto funciona lo suficientemente bien para todos? ¿Hay algo más que un .tslintignore deba hacer?

/cc @am11 , @basarat

Hola @JoshuaKGoldberg , es un gran comienzo. Creo que lo que muchas personas en este hilo esperaban de un archivo .tslintignore además de la funcionalidad era que se ajustaría al estándar ya establecido por git, npm, eslint, etc. A la gente le gusta este estándar, se siente muy cómodo con él, y lo esperaba; por ejemplo, encontré este problema cuando creé un archivo .tslintignore asumiendo que funcionaría, y me sorprendió (con razón o sin ella) cuando no funcionó.

Mmm. Tengo dudas de tener dos estándares sobre cómo debería funcionar esto. Si tiene .tslintignore y linterOptions.exclude en un directorio, ¿cómo funciona el comportamiento?

Editar: oh, y TypeScript también rompe la tendencia .*ignore con su tsconfig.json .

eslint y stylelint admiten un indicador CLI --ignore-path o una opción JS ignorePath . ¿Por qué tslint no?
¡Agregue soporte para esto! :rezar:

Dado el #4534 y la solución linterOptions.exclude , esto parece estar fuera del alcance de TSLint ahora. El enfoque recomendado es migrar a mecanografiado-eslint ; si necesita excluir algunos archivos TypeScript de TSLint, use linterOptions.exclude . Cerrando este tema para la limpieza.

Si hay algún bloqueador en linterOptions.exclude que hace que sea más difícil migrar, presente un nuevo problema para informar el error.

🤖 ¡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

Temas relacionados

denkomanceski picture denkomanceski  ·  3Comentarios

allbto picture allbto  ·  3Comentarios

ypresto picture ypresto  ·  3Comentarios

cateyes99 picture cateyes99  ·  3Comentarios

mrand01 picture mrand01  ·  3Comentarios