~~ lineWidth: 40 ~~
== should format ==
log(`testing`);

[expect]
log(`testing`);

== should format multiple lines without indentation ==
function test() {
    log(`
const t = 5;
`);
}

[expect]
function test() {
    log(`
const t = 5;
`);
}

== should do string iterpolation ==
log(`testing ${  3 } this ${  6  } out`);

[expect]
log(`testing ${3} this ${6} out`);

== should not indent within the expression when it goes over the line width and the expression has no possible newlines ==
`testing this out a little bit ${4} testing`;

[expect]
`testing this out a little bit ${4} testing`;

== should indent within the expression when it goes over the line width and the expression has possible newlines ==
`testing this out a little bit ${[4]} testing`;

[expect]
`testing this out a little bit ${[
    4,
]} testing`;

== should indent properly within the expressions ==
function test() {
    `const t = 5; ${testing ? thisIsATest : testing}`;
}

[expect]
function test() {
    `const t = 5; ${testing
        ? thisIsATest
        : testing}`;
}

== should do a tagged template literal ==
log(myTag `some text`);

[expect]
log(myTag `some text`);

== should do a tagged template literal that goes over line width ==
myCustomTag `testing this out with an str`;

[expect]
myCustomTag
    `testing this out with an str`;

== should not do newlines for a member expression ==
`tttttttttttttest ${testing.this.out.testing}`;

[expect]
`tttttttttttttest ${testing.this.out.testing}`;

== should not do newlines for a member expression with a this or super keyword ==
`tttttttttttttest ${this.this.out.testing} or ${super.test}`;

[expect]
`tttttttttttttest ${this.this.out.testing} or ${super.test}`;

== should not do newlines for a member expression with a string literal ==
`tttttttttttttest ${"testing this out".test}`;

[expect]
`tttttttttttttest ${"testing this out".test}`;

== should not do newlines for a private property name ==
`tttttttttttttest ${ttttttttttttttt.#test}`;

[expect]
`tttttttttttttest ${ttttttttttttttt.#test}`;
