Tslint: Recurso: arquivo ".tslintignore" para excluir globs

Criado em 5 fev. 2014  ·  57Comentários  ·  Fonte: palantir/tslint

Atualização (01/06/2016)

--exclude O sinalizador CLI está disponível desde o TSLint v3.6. Esse problema agora rastreia uma solicitação de recurso para um arquivo .tslintignore .

Edição original

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

Em JsHint docs , existem dois sinalizadores para exclusão nas opções do cli:

--excluir

Permite que você especifique diretórios que você NÃO deseja que sejam linted.

--excluir-caminho

Permite que você forneça seu próprio arquivo .jshintignore. Por exemplo, você pode apontar JSHint para seu arquivo .gitignore e usá-lo em vez do .jshintignore padrão.

Por favor, forneça-nos os sinalizadores semelhantes, para que possamos passar o arquivo .tslintignore para excluir arquivos e pastas quando algum script executor de lote/automatizado executar lint nele.

Veja a implementação desse recurso pelo JsHint: cli.js#L182-L208 e seu chamador; função reunir .

Aged Away Enhancement

Comentários muito úteis

Enfrentando uma questão de mais de 3 anos, desejada por literalmente centenas de pessoas, com um PR funcionando, mas sem ação por meio ano.

Todos 57 comentários

boa sugestão. vamos investigar isso.

+1

Para TSD eu gostaria de gerar isso na pasta de digitação de usuários ao iniciar um novo projeto.

+1

Isso é necessário para tratar erros de lint como bloqueio. Eu quero que meu código seja linted, não código do fornecedor.

+1

+1

+1 Esta é exatamente a solução que precisamos. Estamos recebendo vários erros de tslint em arquivos d.ts. Ser capaz de excluir pastas e arquivos específicos será muito importante, pois também não queremos codificar código que não escrevemos.

Estou disposto a tentar isso, mas não tenho certeza de onde colocá-lo. Queremos que isso seja um recurso cli ou queremos oferecer suporte a isso na biblioteca também?
Se na biblioteca é um pouco estranho porque o método lint() retorna um objeto de resultado, então precisamos retornar um objeto de resultado vazio meio fictício.
Veja aqui um trabalho em andamento, mas sim, não tenho certeza sobre as coisas acima.
https://github.com/DickvdBrink/tslint/compare/palantir :master...Di ckvdBrink:ignoreFile

Estamos usando o Visual Studio e as ferramentas do Web Essentials. Para nós, o fluxo de trabalho ideal seria especificar um arquivo .tjshintignore que conteria algo como typings\ que ignoraria todos os arquivos d.ts nessa pasta. Não tenho certeza se o Web Essentials está usando o recurso cli ou a biblioteca, então é difícil saber. Na verdade estou agora um pouco confuso, porque encontrei este tópico que parece indicar que uma solução para isso já existe? https://github.com/madskristensen/WebEssentials2013/issues/617

Eu acho que eles estão usando cli.
https://github.com/madskristensen/WebEssentials2013/blob/aaa83c3f6f7c9b051d7ef34be8498c6b67f37fca/EditorExtensions/TypeScript/Linters/TsLintCompiler.cs

Acho que está fechado porque alguém criou esse problema, veja as citações abaixo:

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

Ah, isso faz sentido. Interpretou mal isso.

Acho que implementá-lo via CLI está bem por enquanto. as pessoas que usam o grunt-tslint já podem excluir arquivos por meio dos globbers de arquivo/diretório do grunt.

Também estamos considerando a exclusão global de todos os serviços baseados em nós no Web Essentials: https://github.com/madskristensen/WebEssentials2013/issues/589. No entanto, ter esse recurso no tslint tem seu próprio significado.

Atualização: no web-essentials, o recurso é fornecido com a versão noturna v2.2.4.

alguma atualização sobre isso?

Esta parece ser uma característica relativamente importante que deve ser priorizada. Queria observar o interesse neste recurso de uma pergunta SO .

Eu particularmente não acho que um arquivo .tslintignore seja necessário, eu prefiro a ideia mais simples de adicionar uma opção de CLI --exclude .

Pode ser melhor oferecer suporte a isso via tsconfig.json (#858) em vez de reimplementar isso em um sinalizador de CLI...

Hmm, a dificuldade com isso é que você pode querer compilar arquivos diferentes dos que você lint. Então, eu poderia ver usando tsconfig.json e também usando --exclude para não soltar alguns dos arquivos normalmente incluídos.

Ao contrário da CLI, isso não seria um ajuste natural no arquivo tslint.json e, em seguida, adicionaria uma verificação de ignorar que analisa os "ignorePaths" em https://github.com/palantir/tslint/blob/master/src/tslint .ts#L46 ?

+1

+1, um .tslintignore será ótimo

+1 para .tslintignore ou adicione uma opção para ignorar certos caminhos em tsconfig.json
Pode ser semelhante a https://github.com/bbatsov/rubocop#incluindoexcluindo -files

Precisa de ajuda para implementá-lo?

Como primeiro passo, mesclaremos o #1006 em breve, o que adiciona uma opção simples de CLI --exclude . Isso leva você a maior parte do caminho até lá? Se você estiver usando ferramentas adicionais em cima de tslint , provavelmente terá suporte a glob / exclude (grunt / gulp / etc). Quão importante é isso para apoiar em tslint.json ?

Eu não chamo mais tslint de scripts NPM, mas pode ser importante para as pessoas que o fazem, já que o NPM não fornece (e acredito que nunca fornecerá) um suporte glob multiplataforma.

Eu não acho que seja uma boa ideia adicionar opções para arquivos que você deseja ou não deseja no arquivo tslint.json . Parece que não cabe ali. Também não é consistente com a configuração do jshint . Sim, são duas ferramentas diferentes, mas fazem praticamente a mesma coisa. Como o TS é um superconjunto de JS, deve haver alguma consistência entre os dois. Eu prefiro ter um arquivo .tslintignore (assim como .jshintignore ) para manter a consistência entre JS e TS. Mantenha-o separado de tsconfig.json já que o linting não está compilando.

+1 para a opção CLI, é um bom começo.

Queria mencionar que o #1006 foi mesclado e estava em um lançamento há um mês ou mais, portanto, se você estiver usando a versão mais recente da CLI do TSLint, terá um sinalizador exclude disponível para uso.

+1

+1

+1

o que as pessoas estão marcando com +1 aqui? um sinalizador --exclude está disponível na CLI desde a v3.6 que permite excluir globs (arquivos, caminhos, o que for).

@adidahiya Não ajuda com o WebStorm, por exemplo. Não há opção para especificar sinalizadores.

Eu entendo que deve ser uma solicitação de recurso para desenvolvedores do WebStorm, mas parece que é super fácil de implementar no lado ts-lint. E isso é feito para outras bibliotecas de linting por padrão. Então, por que não torná-lo assim?

@fyodorvi legal, atualizei o título e a descrição do problema. Provavelmente gostaríamos de resolver o caminho do arquivo .tslintignore da mesma forma que resolvemos tslint.json .

Prós / contras de um novo arquivo versus torná-lo um novo campo em tslint.json ?

Existe uma solução alternativa para aqueles que desejam usar o tslint com o WebStorm:
Você pode colocar o arquivo tslint.json vazio (com '{}' dentro da pasta node_modules e habilitar a opção 'Search for tslint.json' no WS. Isso redefinirá completamente todas as regras do tslint para a pasta node_modules e ficará em silêncio sobre o código do fornecedor (ou você pode adicionar regras específicas aqui, se desejar)

Eu tenho acompanhado este tópico para poder excluir arquivos especificamente usando vscode (desde antes que o nome fosse alterado para ser específico de .tslintignore). Eu queria que outras pessoas soubessem que estão tentando integrar a exclusão com o vscode que há um problema separado e um PR recente para exclusões tslint específicas do vscode.

@adidahiya um campo com uma matriz de dirs ou arquivos dentro de tslint.json deve ser suficiente, prefiro não me preocupar com outro arquivo para controlar esse negócio quando já temos um arquivo de configuração definido em um projeto.

@Karabur sua solução alternativa não funciona para mim, eu até tentei adicionar um objeto de regras vazio, estou perdendo alguma coisa?

Um arquivo é suficiente. Isso também estaria alinhado com o funcionamento do tsconfig,json.

Uma opção exclude em tslint.json seria legal (apenas um arquivo para usar dessa maneira) e esse é o nome da seção glob ignore de tsconfig.json como bem (sim tsconfig.json include / exclude agora suporta globs no TypeScript mais recente)

Alguém sabe o que o eslint faz, pois tenho certeza de que eles também teriam atingido isso? :Rosa:

No momento, tslint.json não tem controle sobre _what_ é linted, ele apenas controla _how_ arquivos são linted. Na verdade, dependendo de como você configura as coisas, a CLI do TSLint pode criar arquivos diferentes por regras diferentes, tudo na mesma execução.

Não sou contra uma opção exclude em tslint.json , mas pode acabar sendo uma pequena mudança de paradigma e teria que ser pensada com cuidado.

PS Sempre feliz em ouvir seu feedback @basarat , estava lendo seu TS gitbook hoje 😉

Acabei de lançar uma nova versão do alm com tslint integrado com a versão 0.3.0 :heart:

linter

Depois de tê-lo sentado no meu cérebro, aqui está o resumo do design que usei para integração IDE e parece funcionar lindamente:

  • todos os arquivos no tsconfig.json atual são linted exceto os arquivos .d.ts
  • tslint.json deve ser determinado usando findup de tsconfig.json .

Eu documentei isso aqui também: https://basarat.gitbooks.io/alm/content/features/lint.html Sinta-se à vontade para usar as ideias/fonte para quaisquer outras integrações de IDE :rose:

@basarat Acho que essas escolhas parecem perfeitas! Ainda não experimentei alm, mas vou ter que experimentar em breve 💻

Por favor, pare de postar comentários +1 e use o recurso integrado de votação do Github na descrição original do problema. Vou excluir seus comentários com +1 agora.

Três anos se passaram e isso ainda não foi implementado? Como é que, este é um dos recursos mais triviais e importantes IMO.

Três anos se passaram e isso ainda não foi implementado? Como é que, este é um dos recursos mais triviais e importantes IMO.

Afinal, é OSS: se você quiser, envie um PR.

O problema atual para mim é:

--exclude {node_modules,.git,cache}

O operador {} não funciona e não vejo como excluir diretórios diferentes...

@monolithed :

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

deve fazer o que você quer

Três anos se passaram e isso ainda não foi implementado? Como é que, este é um dos recursos mais triviais e importantes IMO.

Afinal, é OSS: se você quiser, envie um PR.

Enviei um PR: https://github.com/palantir/tslint/issues/2409

@abenhamdine alguma ideia a quem eu deveria pedir para revisar?

Enfrentando uma questão de mais de 3 anos, desejada por literalmente centenas de pessoas, com um PR funcionando, mas sem ação por meio ano.

Obrigado pela pancada. Observe que o PR vinculado, #2409, é para uma nova opção de configuração em tslint.json , que não é exatamente o mesmo que o problema original (arquivo .tslintignore ). É um passo na direção certa; Deixei mais alguns comentários CR.

+1
Opções:

  • Arquivo .tslintignore para a pasta a ser ignorada.
  • Arquivo tslint.json (arquivo global) nova propriedade exclude com uma lista de caminhos/pastas.
    Isso seria bom.

A propósito, o recurso foi lançado em [email protected]

Certo. Exemplo:
Crie uma pasta em seu projeto com o nome .vscode e um arquivo dentro de settings.json .

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

para ignorar todos os arquivos em /app/models/. Sinta-se à vontade para melhorar a expressão. :)

+1

+1
precisa de .tslintignore

Oh hey, isso deve ser suportado agora por linterOptions . Conforme https://palantir.github.io/tslint/usage/configuration/ :

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

    • exclude: string[] : Uma matriz de globs. Qualquer arquivo que corresponda a esses globs não será linted. Todos os padrões de exclusão são relativos ao arquivo de configuração em que foram especificados.

Isso funciona bem o suficiente para todos? Há mais alguma coisa que um .tslintignore deveria fazer?

/cc @am11 , @basarat

Olá @JoshuaKGoldberg , é um ótimo começo. Acho que o que muitas pessoas neste tópico esperavam de um arquivo .tslintignore além da funcionalidade era que ele estivesse em conformidade com o padrão já definido pelo git, npm, eslint etc. Pessoas como esse padrão, se sentem muito confortáveis com ele, e meio que esperava - por exemplo, encontrei esse problema quando criei um arquivo .tslintignore assumindo que funcionaria e fiquei surpreso (com ou sem razão) quando não funcionou.

Hmm. Tenho dúvidas de ter dois padrões de como isso deve funcionar. Se você tiver .tslintignore e linterOptions.exclude em um diretório, como funciona o comportamento?

Edit: ah, e o TypeScript também quebra a tendência .*ignore com seu tsconfig.json .

eslint e stylelint suportam um sinalizador --ignore-path CLI ou ignorePath opção JS. Por que tslint não?
Por favor, adicione suporte para isso! :rezar:

Dado o #4534 e a solução alternativa linterOptions.exclude , isso parece fora do escopo do TSLint agora. A abordagem recomendada é migrar para typescript-eslint ; se você precisar excluir alguns arquivos TypeScript do linting TSLint, use linterOptions.exclude . Fechando esta questão para arrumação.

Se houver algum bloqueador em linterOptions.exclude que esteja dificultando a migração, registre um novo problema para relatar o bug!

🤖 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. Obrigado! 👋

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

Questões relacionadas

SwintDC picture SwintDC  ·  3Comentários

ypresto picture ypresto  ·  3Comentários

zewa666 picture zewa666  ·  3Comentários

ghost picture ghost  ·  3Comentários

dashmug picture dashmug  ·  3Comentários