From 0420071d33c54daac7cbf53181c1023538528795 Mon Sep 17 00:00:00 2001 From: Tony Hallett Date: Sat, 21 Dec 2019 06:02:02 +0000 Subject: [PATCH] feat: respect .prettierignore (#317) --- README.md | 14 ++++++++++++++ src/prettierRule.ts | 17 +++++++++++++++++ tests/prettier/prettier-ignored/.prettierignore | 1 + .../prettierIgnoredSyntaxError.ts.lint | 1 + tests/prettier/prettier-ignored/tslint.json | 6 ++++++ 5 files changed, 39 insertions(+) create mode 100644 tests/prettier/prettier-ignored/.prettierignore create mode 100644 tests/prettier/prettier-ignored/prettierIgnoredSyntaxError.ts.lint create mode 100644 tests/prettier/prettier-ignored/tslint.json diff --git a/README.md b/README.md index 16b7fe4b..b48be9e4 100644 --- a/README.md +++ b/README.md @@ -113,6 +113,20 @@ for `tslint@^5.0.0` } ``` +## Ignoring files + +- It will respect your .prettierignore file in your project root ( process.cwd() ) but if you would like to use a different file you can provide it in the third argument, for example: + + ```json + { + "extends": ["tslint-plugin-prettier"], + "rules": { + "prettier": [true, null, { "ignorePath": "otherDirectory/.prettierignore" }] + } + } + + ``` + ## Development ```sh diff --git a/src/prettierRule.ts b/src/prettierRule.ts index 448f4482..738bd3c6 100644 --- a/src/prettierRule.ts +++ b/src/prettierRule.ts @@ -7,10 +7,27 @@ import * as ts from 'typescript'; export class Rule extends tslint.Rules.AbstractRule { public apply(sourceFile: ts.SourceFile): tslint.RuleFailure[] { + if (this.sourceFileIsIgnored(sourceFile, this.ruleArguments)) { + return []; + } return this.applyWithWalker( new Walker(sourceFile, this.ruleName, this.ruleArguments), ); } + private getIgnorePath(ruleArguments: any[]) { + let ignorePath = '.prettierignore'; + if (ruleArguments.length === 2 && ruleArguments[1].ignorePath) { + ignorePath = ruleArguments[1].ignorePath; + } + return ignorePath; + } + private sourceFileIsIgnored(sourceFile: ts.SourceFile, ruleArguments: any[]) { + const ignorePath = this.getIgnorePath(ruleArguments); + const fileInfo = prettier.getFileInfo.sync(sourceFile!.fileName, { + ignorePath, + }); + return fileInfo.ignored; + } } class Walker extends tslint.AbstractWalker { diff --git a/tests/prettier/prettier-ignored/.prettierignore b/tests/prettier/prettier-ignored/.prettierignore new file mode 100644 index 00000000..dae5c386 --- /dev/null +++ b/tests/prettier/prettier-ignored/.prettierignore @@ -0,0 +1 @@ +prettierIgnoredSyntaxError.ts diff --git a/tests/prettier/prettier-ignored/prettierIgnoredSyntaxError.ts.lint b/tests/prettier/prettier-ignored/prettierIgnoredSyntaxError.ts.lint new file mode 100644 index 00000000..3b18e512 --- /dev/null +++ b/tests/prettier/prettier-ignored/prettierIgnoredSyntaxError.ts.lint @@ -0,0 +1 @@ +hello world diff --git a/tests/prettier/prettier-ignored/tslint.json b/tests/prettier/prettier-ignored/tslint.json new file mode 100644 index 00000000..6098bd74 --- /dev/null +++ b/tests/prettier/prettier-ignored/tslint.json @@ -0,0 +1,6 @@ +{ + "rulesDirectory": ["../../../rules"], + "rules": { + "prettier": [true, null, { "ignorePath": "tests/prettier/prettier-ignored/.prettierignore"}] + } +}