~~ lineWidth: 40 ~~ == should format == obj.prop.otherProp; obj.prop[ "computed" ]; testing .this .out .a.lot .more; testing.this.out.for.when.it.passes.thelineWidth; [expect] obj.prop.otherProp; obj.prop["computed"]; testing .this .out .a.lot .more; testing.this.out.for.when.it.passes .thelineWidth; == should not indent for other nodes == call({ prop: 5, prop: 7, }).member; [expect] call({ prop: 5, prop: 7, }).member; == should support optional chaining == obj?.test.test; obj.other ?.test; obj?.["test"]; obj.other ?.["test"]; [expect] obj?.test.test; obj.other ?.test; obj?.["test"]; obj.other ?.["test"]; == should support non-null assertion == test![0]; test!.test; [expect] test![0]; test!.test; == should keep comments in long chains== member .test() // 1 // 2 .testing // 3 // 4 /* 5 */ .asdf() // 6 .test[ 1 ] // 7 .other; [expect] member .test() // 1 // 2 .testing // 3 // 4 /* 5 */ .asdf() // 6 .test[1] // 7 .other; == should keep comments inside computed properties in long chains == member .test[ // 1 /* 2*/ // other inner // test // asdf ] // other .asdf; [expect] member .test[ // 1 /* 2*/ // other inner // test // asdf ] // other .asdf; == should look at computed property end for determining whether to go to a newline or not == member.testing[ // test 4 ].test; [expect] member.testing[ // test 4 ].test; == more optional tests == test?.asdf.test?.asdf.test?.asdf; test?.asdf.test.test.test; test.asdf?.test.test.test; test.asdf.test?.test.test; test.asdf.test.test?.test; test?.asdf?.test.test.test; test.asdf?.test?.test.test; test.asdf?.test.test?.test; test?.asdf.test?.test.test; test.asdf?.test?.test.test; test.asdf.test?.test?.test; test?.asdf.test.test?.test; test.asdf?.test.test?.test; test.asdf.test?.test?.test; [expect] test?.asdf.test?.asdf.test?.asdf; test?.asdf.test.test.test; test.asdf?.test.test.test; test.asdf.test?.test.test; test.asdf.test.test?.test; test?.asdf?.test.test.test; test.asdf?.test?.test.test; test.asdf?.test.test?.test; test?.asdf.test?.test.test; test.asdf?.test?.test.test; test.asdf.test?.test?.test; test?.asdf.test.test?.test; test.asdf?.test.test?.test; test.asdf.test?.test?.test; == member with optional chain call == a?.b?.c?.(); a?.b.c(); a.b?.c(); a.b.c?.(); a?.b?.c(); a.b?.c?.(); a?.b.c?.(); a.b?.c?.(); a.b?.c?.().test; a.b?.c?.()?.test; a.b.c?.().test; a.b.c?.()?.test; a.b?.c()?.test; [expect] a?.b?.c?.(); a?.b.c(); a.b?.c(); a.b.c?.(); a?.b?.c(); a.b?.c?.(); a?.b.c?.(); a.b?.c?.(); a.b?.c?.().test; a.b?.c?.()?.test; a.b.c?.().test; a.b.c?.()?.test; a.b?.c()?.test;