From b2e9d825113693d1c14fe0acac675531ca52d48a Mon Sep 17 00:00:00 2001 From: Emily Giurleo Date: Wed, 3 Jul 2019 09:09:36 -0400 Subject: [PATCH 1/8] initial attempt at logging notices --- src/reporting/reportConversionResults.ts | 25 ++++++++++++++++++++++++ src/rules/convertRules.ts | 1 + src/rules/converter.ts | 1 + src/rules/types.ts | 1 + 4 files changed, 28 insertions(+) diff --git a/src/reporting/reportConversionResults.ts b/src/reporting/reportConversionResults.ts index dd32b4217..6184965b4 100644 --- a/src/reporting/reportConversionResults.ts +++ b/src/reporting/reportConversionResults.ts @@ -16,6 +16,7 @@ export const reportConversionResults = ( ) => { if (ruleConversionResults.converted.size !== 0) { logSuccessfulConversions(ruleConversionResults.converted, dependencies.logger); + logNotices(ruleConversionResults.converted, dependencies.logger); } if (ruleConversionResults.failed.length !== 0) { @@ -93,3 +94,27 @@ const logMissingPackages = (packages: Set, logger: Logger) => { .join(""), ); }; + +const logNotices = (converted: Map, logger: Logger) => { + const rulesWithNotices = Object.values(converted).filter( + ruleOptions => ruleOptions.notices.length >= 1, + ) as ESLintRuleOptions[]; + if (rulesWithNotices.length > 0) { + logger.stdout.write(chalk.yellowBright(`📢 ${rulesWithNotices.length} ESLint`)); + logger.stdout.write( + chalk.yellowBright(rulesWithNotices.length == 1 ? ` rule behaves` : ` rules behave`), + ); + logger.stdout.write( + chalk.yellowBright(` differently from their TSLint counterparts: 📢 ${EOL}`), + ); + + rulesWithNotices.forEach(rule => { + logger.stdout.write(chalk.yellow(`* ${rule.ruleName}:${EOL}`)); + if (rule.notices !== undefined) { + rule.notices.forEach(notice => { + logger.stdout.write(chalk.yellow(`- ${notice}${EOL}`)); + }); + } + }); + } +}; diff --git a/src/rules/convertRules.ts b/src/rules/convertRules.ts index d5bf1763a..7268e5d3d 100644 --- a/src/rules/convertRules.ts +++ b/src/rules/convertRules.ts @@ -74,6 +74,7 @@ export const convertRules = ( existingConversion.ruleArguments, newConversion.ruleArguments, ), + notices: merger(existingConversion.notices, newConversion.notices), }); } } diff --git a/src/rules/converter.ts b/src/rules/converter.ts index 1a275b7b7..95696ee89 100644 --- a/src/rules/converter.ts +++ b/src/rules/converter.ts @@ -37,6 +37,7 @@ export type ConversionResult = { * An ESLint rule equivalent to a previously enabled TSLint rule. */ export type ConvertedRuleChanges = { + notices?: string[]; ruleArguments?: any[]; ruleName: string; }; diff --git a/src/rules/types.ts b/src/rules/types.ts index f59758014..791d59472 100644 --- a/src/rules/types.ts +++ b/src/rules/types.ts @@ -9,6 +9,7 @@ export type TSLintRuleOptions = { export type ESLintRuleSeverity = "warn" | "error" | "off"; export type ESLintRuleOptions = { + notices?: any[]; ruleArguments?: any[]; ruleName: string; ruleSeverity: ESLintRuleSeverity; From 91d1706c77457308fcc45eabd65078c45882e988 Mon Sep 17 00:00:00 2001 From: Emily Giurleo Date: Wed, 3 Jul 2019 18:30:59 -0400 Subject: [PATCH 2/8] got one passing test --- src/reporting/reportConversionResults.test.ts | 11 ++++++++++- src/reporting/reportConversionResults.ts | 7 ++++--- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/src/reporting/reportConversionResults.test.ts b/src/reporting/reportConversionResults.test.ts index ddc3e6477..fe617a53f 100644 --- a/src/reporting/reportConversionResults.test.ts +++ b/src/reporting/reportConversionResults.test.ts @@ -1,3 +1,4 @@ +import { EOL } from "os"; import { ConversionError } from "../rules/conversionError"; import { ESLintRuleOptions } from "../rules/types"; import { reportConversionResults } from "./reportConversionResults"; @@ -12,6 +13,7 @@ describe("reportConversionResults", () => { [ "tslint-rule-one", { + notices: ["1", "2"], ruleArguments: ["a", "b"], ruleName: "tslint-rule-one", ruleSeverity: "error", @@ -26,7 +28,14 @@ describe("reportConversionResults", () => { reportConversionResults({ logger }, conversionResults); // Assert - expectEqualWrites(logger.stdout.write, "✨ 1 rule replaced with its ESLint equivalent. ✨"); + expectEqualWrites( + logger.stdout.write, + `✨ 1 rule replaced with its ESLint equivalent. ✨${EOL}` + + `📢 1 ESLint rule behaves differently from their TSLint counterparts: 📢${EOL}` + + `* tslint-rule-one:${EOL}` + + `- 1${EOL}` + + `- 2${EOL}`, + ); }); it("logs successful conversions when there are multiple converted rules", () => { diff --git a/src/reporting/reportConversionResults.ts b/src/reporting/reportConversionResults.ts index 6184965b4..999feb8ff 100644 --- a/src/reporting/reportConversionResults.ts +++ b/src/reporting/reportConversionResults.ts @@ -96,16 +96,17 @@ const logMissingPackages = (packages: Set, logger: Logger) => { }; const logNotices = (converted: Map, logger: Logger) => { - const rulesWithNotices = Object.values(converted).filter( - ruleOptions => ruleOptions.notices.length >= 1, + const rulesWithNotices = [...converted.values()].filter( + ruleOptions => ruleOptions.notices && ruleOptions.notices.length >= 1, ) as ESLintRuleOptions[]; + if (rulesWithNotices.length > 0) { logger.stdout.write(chalk.yellowBright(`📢 ${rulesWithNotices.length} ESLint`)); logger.stdout.write( chalk.yellowBright(rulesWithNotices.length == 1 ? ` rule behaves` : ` rules behave`), ); logger.stdout.write( - chalk.yellowBright(` differently from their TSLint counterparts: 📢 ${EOL}`), + chalk.yellowBright(` differently from their TSLint counterparts: 📢${EOL}`), ); rulesWithNotices.forEach(rule => { From 298c343777adc8b3b23a62cdee39982b8305bb3a Mon Sep 17 00:00:00 2001 From: Emily Giurleo Date: Wed, 3 Jul 2019 18:34:59 -0400 Subject: [PATCH 3/8] added notices to test multiple rules --- src/reporting/reportConversionResults.test.ts | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/reporting/reportConversionResults.test.ts b/src/reporting/reportConversionResults.test.ts index fe617a53f..d7f37872c 100644 --- a/src/reporting/reportConversionResults.test.ts +++ b/src/reporting/reportConversionResults.test.ts @@ -45,6 +45,7 @@ describe("reportConversionResults", () => { [ "tslint-rule-one", { + notices: ["1", "2"], ruleArguments: ["a", "b"], ruleName: "tslint-rule-one", ruleSeverity: "error", @@ -53,6 +54,7 @@ describe("reportConversionResults", () => { [ "tslint-rule-two", { + notices: ["3", "4"], ruleArguments: ["c", "d"], ruleName: "tslint-rule-two", ruleSeverity: "warn", @@ -69,7 +71,14 @@ describe("reportConversionResults", () => { // Assert expectEqualWrites( logger.stdout.write, - "✨ 2 rules replaced with their ESLint equivalents. ✨", + `✨ 2 rules replaced with their ESLint equivalents. ✨${EOL}` + + `📢 2 ESLint rules behave differently from their TSLint counterparts: 📢${EOL}` + + `* tslint-rule-one:${EOL}` + + `- 1${EOL}` + + `- 2${EOL}` + + `* tslint-rule-two:${EOL}` + + `- 3${EOL}` + + `- 4${EOL}`, ); }); From c3bd3c80ce049f822021e124b0743dda2f962036 Mon Sep 17 00:00:00 2001 From: Emily Giurleo Date: Fri, 5 Jul 2019 11:15:56 -0400 Subject: [PATCH 4/8] small code change --- src/reporting/reportConversionResults.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/reporting/reportConversionResults.ts b/src/reporting/reportConversionResults.ts index 999feb8ff..8c99635de 100644 --- a/src/reporting/reportConversionResults.ts +++ b/src/reporting/reportConversionResults.ts @@ -96,9 +96,9 @@ const logMissingPackages = (packages: Set, logger: Logger) => { }; const logNotices = (converted: Map, logger: Logger) => { - const rulesWithNotices = [...converted.values()].filter( + const rulesWithNotices = Array.from(converted.values()).filter( ruleOptions => ruleOptions.notices && ruleOptions.notices.length >= 1, - ) as ESLintRuleOptions[]; + ); if (rulesWithNotices.length > 0) { logger.stdout.write(chalk.yellowBright(`📢 ${rulesWithNotices.length} ESLint`)); From 06bcbd8f9afffaa60fce35483c04bab15a7db363 Mon Sep 17 00:00:00 2001 From: Emily Giurleo Date: Fri, 19 Jul 2019 18:43:34 -0400 Subject: [PATCH 5/8] clean up log statements in reportRuleConversions --- src/reporting/reportConversionResults.ts | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/src/reporting/reportConversionResults.ts b/src/reporting/reportConversionResults.ts index 14e6d3513..bfcc85be6 100644 --- a/src/reporting/reportConversionResults.ts +++ b/src/reporting/reportConversionResults.ts @@ -95,10 +95,15 @@ const logMissingPlugins = (plugins: Set, logger: Logger) => { ); }; +interface RuleWithNotices { + notices: any[]; + ruleName: string; +} + const logNotices = (converted: Map, logger: Logger) => { const rulesWithNotices = Array.from(converted.values()).filter( ruleOptions => ruleOptions.notices && ruleOptions.notices.length >= 1, - ); + ) as RuleWithNotices[]; if (rulesWithNotices.length > 0) { logger.stdout.write(chalk.yellowBright(`📢 ${rulesWithNotices.length} ESLint`)); @@ -111,11 +116,9 @@ const logNotices = (converted: Map, logger: Logger) = rulesWithNotices.forEach(rule => { logger.stdout.write(chalk.yellow(`* ${rule.ruleName}:${EOL}`)); - if (rule.notices !== undefined) { - rule.notices.forEach(notice => { - logger.stdout.write(chalk.yellow(`- ${notice}${EOL}`)); - }); - } + rule.notices.forEach(notice => { + logger.stdout.write(chalk.yellow(`- ${notice}${EOL}`)); + }); }); } }; From 1f6b9accef48bff67726745647783daa37f2511a Mon Sep 17 00:00:00 2001 From: Emily Giurleo Date: Sat, 20 Jul 2019 04:54:31 -0400 Subject: [PATCH 6/8] Indent individual rule notices Co-Authored-By: Josh Goldberg --- src/reporting/reportConversionResults.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/reporting/reportConversionResults.ts b/src/reporting/reportConversionResults.ts index 14e6d3513..e25929de6 100644 --- a/src/reporting/reportConversionResults.ts +++ b/src/reporting/reportConversionResults.ts @@ -113,7 +113,7 @@ const logNotices = (converted: Map, logger: Logger) = logger.stdout.write(chalk.yellow(`* ${rule.ruleName}:${EOL}`)); if (rule.notices !== undefined) { rule.notices.forEach(notice => { - logger.stdout.write(chalk.yellow(`- ${notice}${EOL}`)); + logger.stdout.write(chalk.yellow(` - ${notice}${EOL}`)); }); } }); From 9b0a299fa4ae8c8dd767bd0f862ac827917c728a Mon Sep 17 00:00:00 2001 From: Emily Giurleo Date: Sat, 20 Jul 2019 04:56:06 -0400 Subject: [PATCH 7/8] just merge notices arrays and fix test --- src/rules/convertRules.test.ts | 1 + src/rules/convertRules.ts | 5 ++++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/rules/convertRules.test.ts b/src/rules/convertRules.test.ts index bb1108904..20aa66b90 100644 --- a/src/rules/convertRules.test.ts +++ b/src/rules/convertRules.test.ts @@ -176,6 +176,7 @@ describe("convertRules", () => { ruleArguments: mergedArguments, ruleName: "eslint-rule-a", ruleSeverity: "error", + notices: [], }, ], ]), diff --git a/src/rules/convertRules.ts b/src/rules/convertRules.ts index 5bc021811..8090c5a11 100644 --- a/src/rules/convertRules.ts +++ b/src/rules/convertRules.ts @@ -69,13 +69,16 @@ export const convertRules = ( ), ); } else { + const existingNotices = existingConversion.notices || []; + const newNotices = newConversion.notices || []; + converted.set(changes.ruleName, { ...existingConversion, ruleArguments: merger( existingConversion.ruleArguments, newConversion.ruleArguments, ), - notices: merger(existingConversion.notices, newConversion.notices), + notices: [...existingNotices, ...newNotices], }); } } From 162608eda3bd6a73758f6bed02e20d3ee64395df Mon Sep 17 00:00:00 2001 From: Emily Giurleo Date: Sat, 20 Jul 2019 05:01:16 -0400 Subject: [PATCH 8/8] fix tests --- src/reporting/reportConversionResults.test.ts | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/reporting/reportConversionResults.test.ts b/src/reporting/reportConversionResults.test.ts index 9c2ef1487..405b0d61a 100644 --- a/src/reporting/reportConversionResults.test.ts +++ b/src/reporting/reportConversionResults.test.ts @@ -34,8 +34,8 @@ describe("reportConversionResults", () => { `✨ 1 rule replaced with its ESLint equivalent. ✨${EOL}` + `📢 1 ESLint rule behaves differently from their TSLint counterparts: 📢${EOL}` + `* tslint-rule-one:${EOL}` + - `- 1${EOL}` + - `- 2${EOL}`, + ` - 1${EOL}` + + ` - 2${EOL}`, ); }); @@ -75,11 +75,11 @@ describe("reportConversionResults", () => { `✨ 2 rules replaced with their ESLint equivalents. ✨${EOL}` + `📢 2 ESLint rules behave differently from their TSLint counterparts: 📢${EOL}` + `* tslint-rule-one:${EOL}` + - `- 1${EOL}` + - `- 2${EOL}` + + ` - 1${EOL}` + + ` - 2${EOL}` + `* tslint-rule-two:${EOL}` + - `- 3${EOL}` + - `- 4${EOL}`, + ` - 3${EOL}` + + ` - 4${EOL}`, ); });