From d06c46d0453005e44f2d6c457bf91c9d56e5d0a1 Mon Sep 17 00:00:00 2001 From: Christopher Chedeau Date: Thu, 25 May 2017 16:26:56 -0700 Subject: [PATCH] Break on implements instead of extends (#1730) There can often be something that breaks inside of `extends` so it's looking weird to break twice. It now only breaks on `implements` and make sure to put each element on its own line. Fixes #1520 --- src/printer.js | 9 ++- .../classes/__snapshots__/jsfmt.spec.js.snap | 56 ++++++++++++++++++- tests/classes/break.js | 25 +++++++++ .../union/__snapshots__/jsfmt.spec.js.snap | 30 ++++++---- .../__snapshots__/jsfmt.spec.js.snap | 7 ++- .../__snapshots__/jsfmt.spec.js.snap | 5 +- 6 files changed, 110 insertions(+), 22 deletions(-) diff --git a/src/printer.js b/src/printer.js index 35224135..2c0abffb 100644 --- a/src/printer.js +++ b/src/printer.js @@ -3399,21 +3399,20 @@ function printClass(path, options, print) { const partsGroup = []; if (n.superClass) { - partsGroup.push( - line, - "extends ", + parts.push( + " extends ", path.call(print, "superClass"), path.call(print, "superTypeParameters") ); } else if (n.extends && n.extends.length > 0) { - partsGroup.push(line, "extends ", join(", ", path.map(print, "extends"))); + parts.push(" extends ", join(", ", path.map(print, "extends"))); } if (n["implements"] && n["implements"].length > 0) { partsGroup.push( line, "implements ", - join(", ", path.map(print, "implements")) + indent(join(concat([",", line]), path.map(print, "implements"))) ); } diff --git a/tests/classes/__snapshots__/jsfmt.spec.js.snap b/tests/classes/__snapshots__/jsfmt.spec.js.snap index d9d69f14..e996d0ae 100644 --- a/tests/classes/__snapshots__/jsfmt.spec.js.snap +++ b/tests/classes/__snapshots__/jsfmt.spec.js.snap @@ -17,13 +17,63 @@ exports[`break.js 1`] = ` class MyContractSelectionWidget extends React.Component implements SomethingLarge { method() {} } + +class DisplayObject + extends utils.EventEmitter + implements interaction_InteractiveTarget { +} + +class DisplayObject extends utils.EventEmitter + implements interaction_InteractiveTarget { +} + +class DisplayObject extends utils.EventEmitter + implements interaction_InteractiveTarget, + somethingElse_SomeOtherThing, + somethingElseAgain_RunningOutOfNames { +} + +class DisplayObject extends utils.EventEmitter implements interaction_InteractiveTarget {} +class Readable extends events.EventEmitter implements NodeJS_ReadableStream {} +class InMemoryAppender extends log4javascript.Appender implements ICachedLogMessageProvider {} + +class Foo extends Immutable.Record({ + ipaddress: '', +}) { + ipaddress: string; +} ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -class MyContractSelectionWidget - extends React.Component - implements SomethingLarge { +class MyContractSelectionWidget extends React.Component< + void, + MyContractSelectionWidgetPropsType, + void +> implements SomethingLarge { method() {} } +class DisplayObject extends utils.EventEmitter + implements interaction_InteractiveTarget {} + +class DisplayObject extends utils.EventEmitter + implements interaction_InteractiveTarget {} + +class DisplayObject extends utils.EventEmitter + implements interaction_InteractiveTarget, + somethingElse_SomeOtherThing, + somethingElseAgain_RunningOutOfNames {} + +class DisplayObject extends utils.EventEmitter + implements interaction_InteractiveTarget {} +class Readable extends events.EventEmitter implements NodeJS_ReadableStream {} +class InMemoryAppender extends log4javascript.Appender + implements ICachedLogMessageProvider {} + +class Foo extends Immutable.Record({ + ipaddress: "" +}) { + ipaddress: string; +} + `; exports[`call.js 1`] = ` diff --git a/tests/classes/break.js b/tests/classes/break.js index 5d2c5c50..48fe2a66 100644 --- a/tests/classes/break.js +++ b/tests/classes/break.js @@ -1,3 +1,28 @@ class MyContractSelectionWidget extends React.Component implements SomethingLarge { method() {} } + +class DisplayObject + extends utils.EventEmitter + implements interaction_InteractiveTarget { +} + +class DisplayObject extends utils.EventEmitter + implements interaction_InteractiveTarget { +} + +class DisplayObject extends utils.EventEmitter + implements interaction_InteractiveTarget, + somethingElse_SomeOtherThing, + somethingElseAgain_RunningOutOfNames { +} + +class DisplayObject extends utils.EventEmitter implements interaction_InteractiveTarget {} +class Readable extends events.EventEmitter implements NodeJS_ReadableStream {} +class InMemoryAppender extends log4javascript.Appender implements ICachedLogMessageProvider {} + +class Foo extends Immutable.Record({ + ipaddress: '', +}) { + ipaddress: string; +} diff --git a/tests/flow/union/__snapshots__/jsfmt.spec.js.snap b/tests/flow/union/__snapshots__/jsfmt.spec.js.snap index db4de98d..33c8fcf6 100644 --- a/tests/flow/union/__snapshots__/jsfmt.spec.js.snap +++ b/tests/flow/union/__snapshots__/jsfmt.spec.js.snap @@ -71,20 +71,30 @@ export class BinaryExpression< export type ArithmeticExpression = PlusOp | MinusOp | MulOp | DivOp | ModOp; -export class PlusOp - extends BinaryExpression {} +export class PlusOp extends BinaryExpression< + ArithmeticExpression, + ArithmeticExpression +> {} -export class MinusOp - extends BinaryExpression {} +export class MinusOp extends BinaryExpression< + ArithmeticExpression, + ArithmeticExpression +> {} -export class MulOp - extends BinaryExpression {} +export class MulOp extends BinaryExpression< + ArithmeticExpression, + ArithmeticExpression +> {} -export class DivOp - extends BinaryExpression {} +export class DivOp extends BinaryExpression< + ArithmeticExpression, + ArithmeticExpression +> {} -export class ModOp - extends BinaryExpression {} +export class ModOp extends BinaryExpression< + ArithmeticExpression, + ArithmeticExpression +> {} `; diff --git a/tests/interface/__snapshots__/jsfmt.spec.js.snap b/tests/interface/__snapshots__/jsfmt.spec.js.snap index e95644dc..2d5eabae 100644 --- a/tests/interface/__snapshots__/jsfmt.spec.js.snap +++ b/tests/interface/__snapshots__/jsfmt.spec.js.snap @@ -20,8 +20,11 @@ export interface Environment1 extends GenericEnvironment { m(): void } -export class Environment2 - extends GenericEnvironment { +export class Environment2 extends GenericEnvironment< + SomeType, + AnotherType, + YetAnotherType +> { m() {} } diff --git a/tests/typescript_as/__snapshots__/jsfmt.spec.js.snap b/tests/typescript_as/__snapshots__/jsfmt.spec.js.snap index 6232c4ee..894b9c84 100644 --- a/tests/typescript_as/__snapshots__/jsfmt.spec.js.snap +++ b/tests/typescript_as/__snapshots__/jsfmt.spec.js.snap @@ -17,7 +17,8 @@ this.isTabActionBar((e.target || e.srcElement) as HTMLElement); "current" in (props.pagination as Object); start + (yearSelectTotal as number); scrollTop > (visibilityHeight as number); -export default class Column - extends (RcTable.Column as React.ComponentClass>) {} +export default class Column extends (RcTable.Column as React.ComponentClass< + ColumnProps +>) {} `;