Skip to content

📝 Line comment for case: statement is dissociated by unstable formatting #2786

Open
@lgarron

Description

@lgarron

Environment information

Reproduces in playground (presumably v1.7.3).

Configuration

Default config.

Playground link

https://biomejs.dev/playground/?code=ZgB1AG4AYwB0AGkAbwBuACAAYwBvAG8AbAAoAHgAKQAgAHsACgAgACAAcwB3AGkAdABjAGgAIAAoAHgAKQAgAHsACgAgACAAIAAgAGMAYQBzAGUAIAA0ADoAIAAvAC8AIABnAHUAYQByAGEAbgB0AGUAZQBkACAAdABvACAAYgBlACAAcgBhAG4AZABvAG0ACgAgACAAIAAgAGMAYQBzAGUAIAA0ADIAOgAgAC8ALwAgAGMAbABhAHMAcwBpAGMACgAgACAAIAAgAGMAYQBzAGUAIAAxADMAMwA3ADoAIAAvAC8AIABFAEwASQBUAEUACgAgACAAIAAgAHsACgAgACAAIAAgACAAIABjAG8AbgBzAG8AbABlAC4AbABvAGcAKAAiAHgAIABpAHMAIABjAG8AbwBsACIAKQA7AAoAIAAgACAAIAAgACAAYgByAGUAYQBrADsACgAgACAAIAAgAH0ACgAgACAAIAAgAGQAZQBmAGEAdQBsAHQAOgAgAHsACgAgACAAIAAgACAAIABjAG8AbgBzAG8AbABlAC4AZQByAHIAbwByACgAIgB4ACAAaQBzACAAbgBvAHQAIABjAG8AbwBsACIAKQA7AAoAIAAgACAAIAB9AAoAIAAgAH0ACgB9AA%3D%3D

function cool(x) {
  switch (x) {
    case 4: // guaranteed to be random
    case 42: // classic
    case 1337: // ELITE
    {
      console.log("x is cool");
      break;
    }
    default: {
      console.error("x is not cool");
    }
  }
}

… is reformatted into:

// …
		case 42: // classic
		case 1337: { // ELITE
			console.log("x is cool");
// …

However, this is not stable. Running the formatter again produces:

// …
		case 42: // classic
		case 1337: {
			// ELITE
			console.log("x is cool");

// …

The comment now appears to refer to the contents of the case block rather than the case statement. I would suggest that the original formatting is preserved, else it becomes impossible to annotate the final case statement in a situation like this.

Code of Conduct

  • I agree to follow Biome's Code of Conduct

Metadata

Metadata

Assignees

No one assigned

    Labels

    A-FormatterArea: formatterL-JavaScriptLanguage: JavaScript and super languagesS-Bug-confirmedStatus: report has been confirmed as a valid bug

    Type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions