Prettier extends and implements when not fitting in same line (#3689)
* Added prettier layout for class extends and implements * Added prettier layout for class extends and implements, fix with keeping it in online if it fits * Added prettier layout for class extends and implements, fixed tests as a side change * Extends implements comments in same line fix * Extends implements comments in same line without ugly workaround * added empty line to test typescript_class/extends_implements.ts * If only one extends keep old behaviour * Removed console logsmaster
parent
aa0437cc60
commit
1a1de60491
|
@ -3636,24 +3636,41 @@ function printClass(path, options, print) {
|
||||||
|
|
||||||
const partsGroup = [];
|
const partsGroup = [];
|
||||||
if (n.superClass) {
|
if (n.superClass) {
|
||||||
if (hasLeadingOwnLineComment(options.originalText, n.superClass)) {
|
|
||||||
parts.push(hardline);
|
|
||||||
} else {
|
|
||||||
parts.push(" ");
|
|
||||||
}
|
|
||||||
|
|
||||||
const printed = concat([
|
const printed = concat([
|
||||||
"extends ",
|
"extends ",
|
||||||
path.call(print, "superClass"),
|
path.call(print, "superClass"),
|
||||||
path.call(print, "superTypeParameters")
|
path.call(print, "superTypeParameters")
|
||||||
]);
|
]);
|
||||||
|
// Keep old behaviour of extends in same line
|
||||||
|
// If there is only on extends and there are not comments
|
||||||
|
if (
|
||||||
|
(!n.implements || n.implements.length === 0) &&
|
||||||
|
(!n.superClass.comments || n.superClass.comments.length === 0)
|
||||||
|
) {
|
||||||
parts.push(
|
parts.push(
|
||||||
|
concat([
|
||||||
|
" ",
|
||||||
path.call(
|
path.call(
|
||||||
superClass =>
|
superClass =>
|
||||||
comments.printComments(superClass, () => printed, options),
|
comments.printComments(superClass, () => printed, options),
|
||||||
"superClass"
|
"superClass"
|
||||||
)
|
)
|
||||||
|
])
|
||||||
);
|
);
|
||||||
|
} else {
|
||||||
|
partsGroup.push(
|
||||||
|
group(
|
||||||
|
concat([
|
||||||
|
line,
|
||||||
|
path.call(
|
||||||
|
superClass =>
|
||||||
|
comments.printComments(superClass, () => printed, options),
|
||||||
|
"superClass"
|
||||||
|
)
|
||||||
|
])
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
} else if (n.extends && n.extends.length > 0) {
|
} else if (n.extends && n.extends.length > 0) {
|
||||||
parts.push(" extends ", join(", ", path.map(print, "extends")));
|
parts.push(" extends ", join(", ", path.map(print, "extends")));
|
||||||
}
|
}
|
||||||
|
@ -3662,7 +3679,14 @@ function printClass(path, options, print) {
|
||||||
partsGroup.push(
|
partsGroup.push(
|
||||||
line,
|
line,
|
||||||
"implements",
|
"implements",
|
||||||
group(indent(join(concat([",", line]), path.map(print, "implements"))))
|
group(
|
||||||
|
indent(
|
||||||
|
concat([
|
||||||
|
line,
|
||||||
|
join(concat([",", line]), path.map(print, "implements"))
|
||||||
|
])
|
||||||
|
)
|
||||||
|
)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -976,6 +976,17 @@ function printTrailingComment(commentPath, print, options) {
|
||||||
}
|
}
|
||||||
const isBlock = util.isBlockComment(comment);
|
const isBlock = util.isBlockComment(comment);
|
||||||
|
|
||||||
|
// We don't want the line to break
|
||||||
|
// when the parentParentNode is a ClassDeclaration/-Expression
|
||||||
|
// And the parentNode is in the superClass property
|
||||||
|
const parentNode = commentPath.getNode(1);
|
||||||
|
const parentParentNode = commentPath.getNode(2);
|
||||||
|
const isParentSuperClass =
|
||||||
|
parentParentNode &&
|
||||||
|
(parentParentNode.type === "ClassDeclaration" ||
|
||||||
|
parentParentNode.type === "ClassExpression") &&
|
||||||
|
parentParentNode.superClass === parentNode;
|
||||||
|
|
||||||
if (
|
if (
|
||||||
util.hasNewline(options.originalText, locStart(comment), {
|
util.hasNewline(options.originalText, locStart(comment), {
|
||||||
backwards: true
|
backwards: true
|
||||||
|
@ -1001,7 +1012,7 @@ function printTrailingComment(commentPath, print, options) {
|
||||||
return lineSuffix(
|
return lineSuffix(
|
||||||
concat([hardline, isLineBeforeEmpty ? hardline : "", contents])
|
concat([hardline, isLineBeforeEmpty ? hardline : "", contents])
|
||||||
);
|
);
|
||||||
} else if (isBlock) {
|
} else if (isBlock || isParentSuperClass) {
|
||||||
// Trailing block comments never need a newline
|
// Trailing block comments never need a newline
|
||||||
return concat([" ", contents]);
|
return concat([" ", contents]);
|
||||||
}
|
}
|
||||||
|
|
|
@ -50,11 +50,9 @@ export class VisTimelineComponent2
|
||||||
implements AfterViewInit, OnChanges, OnDestroy, AndSomethingReallyReallyLong {
|
implements AfterViewInit, OnChanges, OnDestroy, AndSomethingReallyReallyLong {
|
||||||
}
|
}
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
class MyContractSelectionWidget extends React.Component<
|
class MyContractSelectionWidget
|
||||||
void,
|
extends React.Component<void, MyContractSelectionWidgetPropsType, void>
|
||||||
MyContractSelectionWidgetPropsType,
|
implements SomethingLarge {
|
||||||
void
|
|
||||||
> implements SomethingLarge {
|
|
||||||
method() {}
|
method() {}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -65,7 +63,8 @@ class DisplayObject extends utils.EventEmitter
|
||||||
implements interaction_InteractiveTarget {}
|
implements interaction_InteractiveTarget {}
|
||||||
|
|
||||||
class DisplayObject extends utils.EventEmitter
|
class DisplayObject extends utils.EventEmitter
|
||||||
implements interaction_InteractiveTarget,
|
implements
|
||||||
|
interaction_InteractiveTarget,
|
||||||
somethingElse_SomeOtherThing,
|
somethingElse_SomeOtherThing,
|
||||||
somethingElseAgain_RunningOutOfNames {}
|
somethingElseAgain_RunningOutOfNames {}
|
||||||
|
|
||||||
|
@ -84,7 +83,8 @@ class Foo extends Immutable.Record({
|
||||||
export class VisTimelineComponent
|
export class VisTimelineComponent
|
||||||
implements AfterViewInit, OnChanges, OnDestroy {}
|
implements AfterViewInit, OnChanges, OnDestroy {}
|
||||||
export class VisTimelineComponent2
|
export class VisTimelineComponent2
|
||||||
implements AfterViewInit,
|
implements
|
||||||
|
AfterViewInit,
|
||||||
OnChanges,
|
OnChanges,
|
||||||
OnDestroy,
|
OnDestroy,
|
||||||
AndSomethingReallyReallyLong {}
|
AndSomethingReallyReallyLong {}
|
||||||
|
|
|
@ -29,19 +29,19 @@ export class PlusOp extends BinaryExpression<ArithmeticExpression, ArithmeticExp
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export class MinusOp extends BinaryExpression<ArithmeticExpression, ArithmeticExpression> {
|
export class MinusOp extends BinaryExpression<ArithmeticExpression, ArithmeticExpression, ArithmeticExpression, ArithmeticExpression> {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export class MulOp extends BinaryExpression<ArithmeticExpression, ArithmeticExpression> {
|
export class MulOp extends BinaryExpression<ArithmeticExpression, ArithmeticExpression, ArithmeticExpression, ArithmeticExpression> {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export class DivOp extends BinaryExpression<ArithmeticExpression, ArithmeticExpression> {
|
export class DivOp extends BinaryExpression<ArithmeticExpression, ArithmeticExpression, ArithmeticExpression, ArithmeticExpression> {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export class ModOp extends BinaryExpression<ArithmeticExpression, ArithmeticExpression> {
|
export class ModOp extends BinaryExpression<ArithmeticExpression, ArithmeticExpression, ArithmeticExpression, ArithmeticExpression> {
|
||||||
|
|
||||||
}
|
}
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
@ -77,21 +77,29 @@ export class PlusOp extends BinaryExpression<
|
||||||
> {}
|
> {}
|
||||||
|
|
||||||
export class MinusOp extends BinaryExpression<
|
export class MinusOp extends BinaryExpression<
|
||||||
|
ArithmeticExpression,
|
||||||
|
ArithmeticExpression,
|
||||||
ArithmeticExpression,
|
ArithmeticExpression,
|
||||||
ArithmeticExpression
|
ArithmeticExpression
|
||||||
> {}
|
> {}
|
||||||
|
|
||||||
export class MulOp extends BinaryExpression<
|
export class MulOp extends BinaryExpression<
|
||||||
|
ArithmeticExpression,
|
||||||
|
ArithmeticExpression,
|
||||||
ArithmeticExpression,
|
ArithmeticExpression,
|
||||||
ArithmeticExpression
|
ArithmeticExpression
|
||||||
> {}
|
> {}
|
||||||
|
|
||||||
export class DivOp extends BinaryExpression<
|
export class DivOp extends BinaryExpression<
|
||||||
|
ArithmeticExpression,
|
||||||
|
ArithmeticExpression,
|
||||||
ArithmeticExpression,
|
ArithmeticExpression,
|
||||||
ArithmeticExpression
|
ArithmeticExpression
|
||||||
> {}
|
> {}
|
||||||
|
|
||||||
export class ModOp extends BinaryExpression<
|
export class ModOp extends BinaryExpression<
|
||||||
|
ArithmeticExpression,
|
||||||
|
ArithmeticExpression,
|
||||||
ArithmeticExpression,
|
ArithmeticExpression,
|
||||||
ArithmeticExpression
|
ArithmeticExpression
|
||||||
> {}
|
> {}
|
||||||
|
|
|
@ -26,18 +26,18 @@ export class PlusOp extends BinaryExpression<ArithmeticExpression, ArithmeticExp
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export class MinusOp extends BinaryExpression<ArithmeticExpression, ArithmeticExpression> {
|
export class MinusOp extends BinaryExpression<ArithmeticExpression, ArithmeticExpression, ArithmeticExpression, ArithmeticExpression> {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export class MulOp extends BinaryExpression<ArithmeticExpression, ArithmeticExpression> {
|
export class MulOp extends BinaryExpression<ArithmeticExpression, ArithmeticExpression, ArithmeticExpression, ArithmeticExpression> {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export class DivOp extends BinaryExpression<ArithmeticExpression, ArithmeticExpression> {
|
export class DivOp extends BinaryExpression<ArithmeticExpression, ArithmeticExpression, ArithmeticExpression, ArithmeticExpression> {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export class ModOp extends BinaryExpression<ArithmeticExpression, ArithmeticExpression> {
|
export class ModOp extends BinaryExpression<ArithmeticExpression, ArithmeticExpression, ArithmeticExpression, ArithmeticExpression> {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -12,6 +12,10 @@ export class Environment2 extends GenericEnvironment<
|
||||||
SomeType,
|
SomeType,
|
||||||
AnotherType,
|
AnotherType,
|
||||||
YetAnotherType,
|
YetAnotherType,
|
||||||
|
DifferentType1,
|
||||||
|
DifferentType2,
|
||||||
|
DifferentType3,
|
||||||
|
DifferentType4,
|
||||||
> {
|
> {
|
||||||
m() {};
|
m() {};
|
||||||
};
|
};
|
||||||
|
@ -23,7 +27,11 @@ export interface Environment1
|
||||||
export class Environment2 extends GenericEnvironment<
|
export class Environment2 extends GenericEnvironment<
|
||||||
SomeType,
|
SomeType,
|
||||||
AnotherType,
|
AnotherType,
|
||||||
YetAnotherType
|
YetAnotherType,
|
||||||
|
DifferentType1,
|
||||||
|
DifferentType2,
|
||||||
|
DifferentType3,
|
||||||
|
DifferentType4
|
||||||
> {
|
> {
|
||||||
m() {}
|
m() {}
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,6 +9,10 @@ export class Environment2 extends GenericEnvironment<
|
||||||
SomeType,
|
SomeType,
|
||||||
AnotherType,
|
AnotherType,
|
||||||
YetAnotherType,
|
YetAnotherType,
|
||||||
|
DifferentType1,
|
||||||
|
DifferentType2,
|
||||||
|
DifferentType3,
|
||||||
|
DifferentType4,
|
||||||
> {
|
> {
|
||||||
m() {};
|
m() {};
|
||||||
};
|
};
|
||||||
|
|
|
@ -7,7 +7,7 @@ this.isTabActionBar((e.target || e.srcElement) as HTMLElement);
|
||||||
'current' in (props.pagination as Object)
|
'current' in (props.pagination as Object)
|
||||||
start + (yearSelectTotal as number)
|
start + (yearSelectTotal as number)
|
||||||
scrollTop > (visibilityHeight as number)
|
scrollTop > (visibilityHeight as number)
|
||||||
export default class Column<T> extends (RcTable.Column as React.ComponentClass<ColumnProps<T>>) {}
|
export default class Column<T> extends (RcTable.Column as React.ComponentClass<ColumnProps<T>,ColumnProps<T>,ColumnProps<T>,ColumnProps<T>>) {}
|
||||||
export abstract class MobxTypedForm extends (Form as { new (): any }) {}
|
export abstract class MobxTypedForm extends (Form as { new (): any }) {}
|
||||||
({}) as {};
|
({}) as {};
|
||||||
function*g() {
|
function*g() {
|
||||||
|
@ -38,6 +38,9 @@ this.isTabActionBar((e.target || e.srcElement) as HTMLElement);
|
||||||
start + (yearSelectTotal as number);
|
start + (yearSelectTotal as number);
|
||||||
scrollTop > (visibilityHeight as number);
|
scrollTop > (visibilityHeight as number);
|
||||||
export default class Column<T> extends (RcTable.Column as React.ComponentClass<
|
export default class Column<T> extends (RcTable.Column as React.ComponentClass<
|
||||||
|
ColumnProps<T>,
|
||||||
|
ColumnProps<T>,
|
||||||
|
ColumnProps<T>,
|
||||||
ColumnProps<T>
|
ColumnProps<T>
|
||||||
>) {}
|
>) {}
|
||||||
export abstract class MobxTypedForm extends (Form as { new (): any }) {}
|
export abstract class MobxTypedForm extends (Form as { new (): any }) {}
|
||||||
|
|
|
@ -4,7 +4,7 @@ this.isTabActionBar((e.target || e.srcElement) as HTMLElement);
|
||||||
'current' in (props.pagination as Object)
|
'current' in (props.pagination as Object)
|
||||||
start + (yearSelectTotal as number)
|
start + (yearSelectTotal as number)
|
||||||
scrollTop > (visibilityHeight as number)
|
scrollTop > (visibilityHeight as number)
|
||||||
export default class Column<T> extends (RcTable.Column as React.ComponentClass<ColumnProps<T>>) {}
|
export default class Column<T> extends (RcTable.Column as React.ComponentClass<ColumnProps<T>,ColumnProps<T>,ColumnProps<T>,ColumnProps<T>>) {}
|
||||||
export abstract class MobxTypedForm extends (Form as { new (): any }) {}
|
export abstract class MobxTypedForm extends (Form as { new (): any }) {}
|
||||||
({}) as {};
|
({}) as {};
|
||||||
function*g() {
|
function*g() {
|
||||||
|
|
|
@ -28,6 +28,97 @@ class F<__T> {}
|
||||||
|
|
||||||
`;
|
`;
|
||||||
|
|
||||||
|
exports[`extends_implements.ts 1`] = `
|
||||||
|
class Class extends AbstractClass implements Interface1, Interface2, Interface3, Interface4 {}
|
||||||
|
|
||||||
|
class ExtendsAbstractClassAndImplementsInterfaces extends AbstractClass
|
||||||
|
implements Interface1, Interface2, Interface3, Interface4 {}
|
||||||
|
|
||||||
|
class ExtendsAbstractClassAndImplementsInterfaces
|
||||||
|
extends AAAAAAAAAAAAAAbstractClass
|
||||||
|
implements Interface1, Interface2, Interface3, Interface4 {}
|
||||||
|
|
||||||
|
class ExtendsAbstractClassAndImplementsInterfaces
|
||||||
|
extends AAAAAAAAAAAAAAbstractClass
|
||||||
|
implements
|
||||||
|
Interface1,
|
||||||
|
Interface2,
|
||||||
|
Interface3,
|
||||||
|
Interface4,
|
||||||
|
Interface5,
|
||||||
|
Interface6,
|
||||||
|
Interface7,
|
||||||
|
Interface8 {}
|
||||||
|
|
||||||
|
class ExtendsAbstractClassAndImplementsInterfaces
|
||||||
|
extends AAAAAAAAAAAAAAbstractClass<Type1, Type2, Type3, Type4, Type5, Type6, Type7> {}
|
||||||
|
|
||||||
|
class ExtendsAbstractClassAndImplementsInterfaces
|
||||||
|
extends AAAAAAAAAAAAAAbstractClass<Type1, Type2, Type3, Type4, Type5, Type6, Type7>
|
||||||
|
implements
|
||||||
|
Interface1,
|
||||||
|
Interface2,
|
||||||
|
Interface3,
|
||||||
|
Interface4,
|
||||||
|
Interface5,
|
||||||
|
Interface6,
|
||||||
|
Interface7,
|
||||||
|
Interface8 {}
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
class Class extends AbstractClass
|
||||||
|
implements Interface1, Interface2, Interface3, Interface4 {}
|
||||||
|
|
||||||
|
class ExtendsAbstractClassAndImplementsInterfaces extends AbstractClass
|
||||||
|
implements Interface1, Interface2, Interface3, Interface4 {}
|
||||||
|
|
||||||
|
class ExtendsAbstractClassAndImplementsInterfaces
|
||||||
|
extends AAAAAAAAAAAAAAbstractClass
|
||||||
|
implements Interface1, Interface2, Interface3, Interface4 {}
|
||||||
|
|
||||||
|
class ExtendsAbstractClassAndImplementsInterfaces
|
||||||
|
extends AAAAAAAAAAAAAAbstractClass
|
||||||
|
implements
|
||||||
|
Interface1,
|
||||||
|
Interface2,
|
||||||
|
Interface3,
|
||||||
|
Interface4,
|
||||||
|
Interface5,
|
||||||
|
Interface6,
|
||||||
|
Interface7,
|
||||||
|
Interface8 {}
|
||||||
|
|
||||||
|
class ExtendsAbstractClassAndImplementsInterfaces extends AAAAAAAAAAAAAAbstractClass<
|
||||||
|
Type1,
|
||||||
|
Type2,
|
||||||
|
Type3,
|
||||||
|
Type4,
|
||||||
|
Type5,
|
||||||
|
Type6,
|
||||||
|
Type7
|
||||||
|
> {}
|
||||||
|
|
||||||
|
class ExtendsAbstractClassAndImplementsInterfaces
|
||||||
|
extends AAAAAAAAAAAAAAbstractClass<
|
||||||
|
Type1,
|
||||||
|
Type2,
|
||||||
|
Type3,
|
||||||
|
Type4,
|
||||||
|
Type5,
|
||||||
|
Type6,
|
||||||
|
Type7
|
||||||
|
>
|
||||||
|
implements
|
||||||
|
Interface1,
|
||||||
|
Interface2,
|
||||||
|
Interface3,
|
||||||
|
Interface4,
|
||||||
|
Interface5,
|
||||||
|
Interface6,
|
||||||
|
Interface7,
|
||||||
|
Interface8 {}
|
||||||
|
|
||||||
|
`;
|
||||||
|
|
||||||
exports[`generics.ts 1`] = `
|
exports[`generics.ts 1`] = `
|
||||||
class<T> implements Map<T> {}
|
class<T> implements Map<T> {}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,35 @@
|
||||||
|
class Class extends AbstractClass implements Interface1, Interface2, Interface3, Interface4 {}
|
||||||
|
|
||||||
|
class ExtendsAbstractClassAndImplementsInterfaces extends AbstractClass
|
||||||
|
implements Interface1, Interface2, Interface3, Interface4 {}
|
||||||
|
|
||||||
|
class ExtendsAbstractClassAndImplementsInterfaces
|
||||||
|
extends AAAAAAAAAAAAAAbstractClass
|
||||||
|
implements Interface1, Interface2, Interface3, Interface4 {}
|
||||||
|
|
||||||
|
class ExtendsAbstractClassAndImplementsInterfaces
|
||||||
|
extends AAAAAAAAAAAAAAbstractClass
|
||||||
|
implements
|
||||||
|
Interface1,
|
||||||
|
Interface2,
|
||||||
|
Interface3,
|
||||||
|
Interface4,
|
||||||
|
Interface5,
|
||||||
|
Interface6,
|
||||||
|
Interface7,
|
||||||
|
Interface8 {}
|
||||||
|
|
||||||
|
class ExtendsAbstractClassAndImplementsInterfaces
|
||||||
|
extends AAAAAAAAAAAAAAbstractClass<Type1, Type2, Type3, Type4, Type5, Type6, Type7> {}
|
||||||
|
|
||||||
|
class ExtendsAbstractClassAndImplementsInterfaces
|
||||||
|
extends AAAAAAAAAAAAAAbstractClass<Type1, Type2, Type3, Type4, Type5, Type6, Type7>
|
||||||
|
implements
|
||||||
|
Interface1,
|
||||||
|
Interface2,
|
||||||
|
Interface3,
|
||||||
|
Interface4,
|
||||||
|
Interface5,
|
||||||
|
Interface6,
|
||||||
|
Interface7,
|
||||||
|
Interface8 {}
|
Loading…
Reference in New Issue