From 1e08f03554eafc32ba3220ca3fdb592076c7d346 Mon Sep 17 00:00:00 2001 From: Lucas Azzola Date: Sun, 11 Jun 2017 00:46:59 +1000 Subject: [PATCH] fix(typescript): break on multiple interface extends, fixes #2043 (#2085) --- src/printer.js | 13 ++++- .../__snapshots__/jsfmt.spec.js.snap | 51 +++++++++++++++++++ tests/typescript_interface/long-extends.ts | 19 +++++++ 3 files changed, 82 insertions(+), 1 deletion(-) create mode 100644 tests/typescript_interface/long-extends.ts diff --git a/src/printer.js b/src/printer.js index 3b6a5a9e7..c331a401b 100644 --- a/src/printer.js +++ b/src/printer.js @@ -826,7 +826,18 @@ function genericPrintNoParens(path, options, print, args) { ); if (n.heritage.length) { - parts.push("extends ", join(", ", path.map(print, "heritage")), " "); + parts.push( + group( + indent( + concat([ + softline, + "extends ", + indent(join(concat([",", line]), path.map(print, "heritage"))), + " " + ]) + ) + ) + ); } parts.push(path.call(print, "body")); diff --git a/tests/typescript_interface/__snapshots__/jsfmt.spec.js.snap b/tests/typescript_interface/__snapshots__/jsfmt.spec.js.snap index b20f63d18..b01e0bb62 100644 --- a/tests/typescript_interface/__snapshots__/jsfmt.spec.js.snap +++ b/tests/typescript_interface/__snapshots__/jsfmt.spec.js.snap @@ -22,6 +22,57 @@ interface ScreenObject { `; +exports[`long-extends.ts 1`] = ` +export interface I extends A, B, C { + c: string; +} + +export interface ThirdVeryLongAndBoringInterfaceName extends ALongAndBoringInterfaceName { + c: string; +} + +export interface ThirdVeryLongAndBoringInterfaceName extends ALongAndBoringInterfaceName, AnotherLongAndBoringInterfaceName { + c: string; +} + +export interface ThirdVeryLongAndBoringInterfaceName extends AVeryLongAndBoringInterfaceName, AnotherVeryLongAndBoringInterfaceName { + c: string; +} + +export interface ThirdVeryLongAndBoringInterfaceName extends A_AVeryLongAndBoringInterfaceName, B_AVeryLongAndBoringInterfaceName, C_AVeryLongAndBoringInterfaceName { + c: string; +} +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +export interface I extends A, B, C { + c: string; +} + +export interface ThirdVeryLongAndBoringInterfaceName + extends ALongAndBoringInterfaceName { + c: string; +} + +export interface ThirdVeryLongAndBoringInterfaceName + extends ALongAndBoringInterfaceName, + AnotherLongAndBoringInterfaceName { + c: string; +} + +export interface ThirdVeryLongAndBoringInterfaceName + extends AVeryLongAndBoringInterfaceName, + AnotherVeryLongAndBoringInterfaceName { + c: string; +} + +export interface ThirdVeryLongAndBoringInterfaceName + extends A_AVeryLongAndBoringInterfaceName, + B_AVeryLongAndBoringInterfaceName, + C_AVeryLongAndBoringInterfaceName { + c: string; +} + +`; + exports[`separator.ts 1`] = ` declare module 'selenium-webdriver' { export const until: { diff --git a/tests/typescript_interface/long-extends.ts b/tests/typescript_interface/long-extends.ts new file mode 100644 index 000000000..4bb64bf31 --- /dev/null +++ b/tests/typescript_interface/long-extends.ts @@ -0,0 +1,19 @@ +export interface I extends A, B, C { + c: string; +} + +export interface ThirdVeryLongAndBoringInterfaceName extends ALongAndBoringInterfaceName { + c: string; +} + +export interface ThirdVeryLongAndBoringInterfaceName extends ALongAndBoringInterfaceName, AnotherLongAndBoringInterfaceName { + c: string; +} + +export interface ThirdVeryLongAndBoringInterfaceName extends AVeryLongAndBoringInterfaceName, AnotherVeryLongAndBoringInterfaceName { + c: string; +} + +export interface ThirdVeryLongAndBoringInterfaceName extends A_AVeryLongAndBoringInterfaceName, B_AVeryLongAndBoringInterfaceName, C_AVeryLongAndBoringInterfaceName { + c: string; +}