-
Notifications
You must be signed in to change notification settings - Fork 74
Description
Describe the bug
dprint-plugin-typescript version: 0.95.12
using following config:
"typescript": {
"lineWidth": 80,
"memberExpression.linePerExpression": true,
"semiColons": "asi"
}I will start by showing 2 examples of code which is formatted correctly (at least according to my preference):
Example 1:
const func =
(arg1: { a: number; b: number }) =>
(arg2: { c: number }) =>
(arg3: undefined): undefined => arg3Example 2:
const func =
(arg1: { a: number; b: number }): (a: any) => (a: any) => undefined =>
(arg2: { c: number }) =>
(arg3: undefined): undefined => arg3Now if I change example 1 by splitting the arg1's type into multiple lines, the entire block gets reformatted in a wired way:
Input Code
const func =
(arg1: {
a: number; b: number}) =>
(arg2: { c: number }) =>
(arg3: undefined): undefined => arg3Expected Output
const func =
(arg1: {
a: number;
b: number
}) =>
(arg2: { c: number }) =>
(arg3: undefined): undefined => arg3Actual Output
const func = (arg1: {
a: number
b: number
}) =>
(arg2: { c: number }) =>
(arg3: undefined): undefined => arg3Example 2 shows unstable formatting which needs a couple of passes to arrive at a stable formatting. I first modify the first line to be longer than line character limit (by adding return time to the first arrow function):
const func =
(arg1: { a: number; b: number }): (a: { c: number }) => (a: undefined) => undefined =>
(arg2: { c: number }) =>
(arg3: undefined): undefined => arg3which on first pass generates the following (which is fine):
Input Code
const func =
(
arg1: { a: number; b: number },
): (a: { c: number }) => (a: undefined) => undefined =>
(arg2: { c: number }) =>
(arg3: undefined): undefined => arg3Expected Output
const func =
(
arg1: { a: number; b: number },
): (a: { c: number }) => (a: undefined) => undefined =>
(arg2: { c: number }) =>
(arg3: undefined): undefined => arg3Actual Output
const func = (
arg1: { a: number; b: number },
): (a: { c: number }) => (a: undefined) => undefined =>
(arg2: { c: number }) =>
(arg3: undefined): undefined => arg3The Actual Output is a result of two passes of formatting.