74

Is that possible to lint entire folder using tslint?

Using eslint it is possible to do eslint ./src to validate whole folder.

When i try to do the same for tslint - i am getting an error Error: EISDIR: illegal operation on a directory. In their examples on the site - they show how to validate single file, which is not the case usually.

Is that possible to validate my project without extra things like gulp-tslint, just from the command line?

ValeriiVasin
  • 8,628
  • 11
  • 58
  • 78

3 Answers3

111

You can use a glob to lint multiple files.

Normally, if you just pass a glob as is, your shell will expand it and pass the resulting files to TSLint. So for example, in bash 4+ with the globstar option enabled, you could do the following to lint all .ts and .tsx files:

tslint src/**/*.ts{,x}

You're probably better off though using a command that will work consistently across platforms and shells though. For this, you can pass the glob in quotes. When in quotes, the glob will get passed as is to TSLint which will handle it with node-glob. You could then run the following command to get the same results as above:

tslint 'src/**/*.ts?(x)'
JKillian
  • 18,061
  • 8
  • 41
  • 74
  • Indeed, it seems like no-quotes only works on Windows. Thanks! – arseniyandru Apr 12 '17 at 20:38
  • so this does not work if I have a file a direct child of src. say src/index.ts, which is a common use case I suppose – aitchkhan Feb 12 '18 at 05:02
  • @HaroonKhan both should work. I'm assuming in your case you were using the bash version of the glob. You likely [did not have the globstar option set](https://unix.stackexchange.com/a/156808/275542). Try switching to quoted version to take advantage of node-glob, which also has the nice side-effect of making your script more platform-independent – JKillian Feb 12 '18 at 05:21
  • worked like a charm, but now failing in `lint-staged` :) will have a look at it ina while – aitchkhan Feb 12 '18 at 05:42
  • helpful! [for those unfamiliar with what a glob is](https://en.wikipedia.org/wiki/Glob_(programming)) – heug Nov 27 '18 at 15:47
  • 2¢, fwiw, the quoted one did _not_ work on a DOS prompt, but did in Powershell. Without quotes _only_ works on DOS, not Powershell. (Re: *a command that will work consistently across platforms and shells*) – ruffin Jan 18 '19 at 21:13
28

There is now a --project option for this. Example:

tslint --project .

From the docs:

-p, --project:

The path or directory containing a tsconfig.json file that will be used to determine which files will be linted. This flag also enables rules that require the type checker.

Matt Browne
  • 12,169
  • 4
  • 59
  • 75
  • 1
    This works :) Thank you. The other wild card method wasn't finding all of the files. – Bodman Mar 21 '18 at 16:50
  • I don't really understand the --project argument. Do you know how can I exclude files? – user11081980 May 15 '18 at 18:33
  • The --project argument simply tells it to use the settings in the tsconfig.json file. So if you want to exclude files you'd need to configure that in tsconfig.json. – Matt Browne May 15 '18 at 19:52
11

If your project has a tsconfig.json you can aproach --project advange.

In my case I have a nativescript project wich includes a tsconfig.json at project root, so I have this:

enter image description here

Note that in the json 'node_modules' and 'platforms' directories are excluded. This means that all files in the project are going to be mapped except 'node_modules' and 'platforms' directories.

I have added this scripts at my package.json, 'tslint' to log the errors and 'tslint-fix' to fix the errors.

"scripts": {
    "tslint": "tslint -p tsconfig.json",
    "tslint-fix": "tslint --fix -p tsconfig.json"
}
Sunny Patel
  • 7,830
  • 2
  • 31
  • 46
Daniel Delgado
  • 4,813
  • 5
  • 40
  • 48