From db4fd0cf64fce40aa7314959c3775d4a747d3a96 Mon Sep 17 00:00:00 2001 From: Cory Thompson Date: Thu, 3 Oct 2019 22:29:21 -0500 Subject: [PATCH] added no-trailing-whitespace converter and unit tests --- src/rules/converters.ts | 2 + .../converters/no-trailing-whitespace.ts | 32 ++++++ .../tests/no-trailing-whitespace.test.ts | 101 ++++++++++++++++++ 3 files changed, 135 insertions(+) create mode 100644 src/rules/converters/no-trailing-whitespace.ts create mode 100644 src/rules/converters/tests/no-trailing-whitespace.test.ts diff --git a/src/rules/converters.ts b/src/rules/converters.ts index 782e17f47..3dc9f7028 100644 --- a/src/rules/converters.ts +++ b/src/rules/converters.ts @@ -69,6 +69,7 @@ import { convertNoStringLiteral } from "./converters/no-string-literal"; import { convertNoStringThrow } from "./converters/no-string-throw"; import { convertNoSwitchCaseFallThrough } from "./converters/no-switch-case-fall-through"; import { convertNoThisAssignment } from "./converters/no-this-assignment"; +import { convertNoTrailingWhitespace } from "./converters/no-trailing-whitespace"; import { convertNoUnboundMethod } from "./converters/no-unbound-method"; import { convertNoUnnecessaryClass } from "./converters/no-unnecessary-class"; import { convertNoUnnecessaryInitializer } from "./converters/no-unnecessary-initializer"; @@ -155,6 +156,7 @@ export const converters = new Map([ ["no-string-literal", convertNoStringLiteral], ["no-string-throw", convertNoStringThrow], ["no-switch-case-fall-through", convertNoSwitchCaseFallThrough], + ["no-trailing-whitespace", convertNoTrailingWhitespace], ["no-this-assignment", convertNoThisAssignment], ["no-unbound-method", convertNoUnboundMethod], ["no-unnecessary-class", convertNoUnnecessaryClass], diff --git a/src/rules/converters/no-trailing-whitespace.ts b/src/rules/converters/no-trailing-whitespace.ts new file mode 100644 index 000000000..ddf7b0795 --- /dev/null +++ b/src/rules/converters/no-trailing-whitespace.ts @@ -0,0 +1,32 @@ +import { RuleConverter } from "../converter"; + +export const convertNoTrailingWhitespace: RuleConverter = tslintRule => { + const ruleArguments: { [eslintOption in "ignoreComments" | "skipBlankLines"]?: true }[] = []; + const notices: string[] = []; + + if (tslintRule.ruleArguments.includes("ignore-comments")) { + ruleArguments.push({ ignoreComments: true }); + } + + if (tslintRule.ruleArguments.includes("ignore-blank-lines")) { + ruleArguments.push({ skipBlankLines: true }); + } + + if (tslintRule.ruleArguments.includes("ignore-template-strings")) { + notices.push("ESLint does not support ignoring template strings."); + } + + if (tslintRule.ruleArguments.includes("ignore-jsdoc")) { + notices.push("ESLint does not support ignoring JSDoc."); + } + + return { + rules: [ + { + ...(notices.length > 0 && { notices }), + ...(ruleArguments.length > 0 && { ruleArguments }), + ruleName: "no-trailing-spaces", + }, + ], + }; +}; diff --git a/src/rules/converters/tests/no-trailing-whitespace.test.ts b/src/rules/converters/tests/no-trailing-whitespace.test.ts new file mode 100644 index 000000000..4743a287a --- /dev/null +++ b/src/rules/converters/tests/no-trailing-whitespace.test.ts @@ -0,0 +1,101 @@ +import { convertNoTrailingWhitespace } from "../no-trailing-whitespace"; + +describe(convertNoTrailingWhitespace, () => { + test("conversion without arguments", () => { + const result = convertNoTrailingWhitespace({ + ruleArguments: [], + }); + + expect(result).toEqual({ + rules: [ + { + ruleName: "no-trailing-spaces", + }, + ], + }); + }); + + test("conversion with ignore-template-strings argument", () => { + const result = convertNoTrailingWhitespace({ + ruleArguments: ["ignore-template-strings"], + }); + + expect(result).toEqual({ + rules: [ + { + notices: ["ESLint does not support ignoring template strings."], + ruleName: "no-trailing-spaces", + }, + ], + }); + }); + + test("conversion with ignore-comments argument", () => { + const result = convertNoTrailingWhitespace({ + ruleArguments: ["ignore-comments"], + }); + + expect(result).toEqual({ + rules: [ + { + ruleArguments: [{ ignoreComments: true }], + ruleName: "no-trailing-spaces", + }, + ], + }); + }); + + test("conversion with ignore-jsdoc argument", () => { + const result = convertNoTrailingWhitespace({ + ruleArguments: ["ignore-jsdoc"], + }); + + expect(result).toEqual({ + rules: [ + { + notices: ["ESLint does not support ignoring JSDoc."], + ruleName: "no-trailing-spaces", + }, + ], + }); + }); + + test("conversion with ignore-blank-lines argument", () => { + const result = convertNoTrailingWhitespace({ + ruleArguments: ["ignore-blank-lines"], + }); + + expect(result).toEqual({ + rules: [ + { + ruleArguments: [{ skipBlankLines: true }], + ruleName: "no-trailing-spaces", + }, + ], + }); + }); + + test("conversion with all arguments", () => { + const result = convertNoTrailingWhitespace({ + ruleArguments: [ + "ignore-template-strings", + "ignore-comments", + "ignore-jsdoc", + "ignore-blank-lines", + ], + }); + + expect(result).toEqual({ + rules: [ + { + notices: [ + "ESLint does not support ignoring template strings.", + "ESLint does not support ignoring JSDoc.", + ], + ruleArguments: [{ ignoreComments: true }, { skipBlankLines: true }], + ruleName: "no-trailing-spaces", + }, + ], + }); + }); +});