Skip to content

formatter: Diff with Prettier on TS type assertion before private field access #20345

@WilcoKruijer

Description

@WilcoKruijer

Input

class X {
  #selectClause: unknown;

  test(columns: unknown) {
    (this as any).#selectClause = columns;
  }
}

Config

{}

Oxfmt output

Oxfmt version: 0.40.0

class X {
  #selectClause: unknown;

  test(columns: unknown) {
    this as any.#selectClause = columns;
  }
}

Oxfmt playground link

https://playground.oxc.rs/?t=formatter&options=%7B%22run%22%3A%7B%22lint%22%3Atrue%2C%22formatter%22%3Atrue%2C%22transform%22%3Afalse%2C%22isolatedDeclarations%22%3Afalse%2C%22whitespace%22%3Afalse%2C%22mangle%22%3Afalse%2C%22compress%22%3Afalse%2C%22scope%22%3Atrue%2C%22symbol%22%3Atrue%2C%22cfg%22%3Afalse%7D%2C%22parser%22%3A%7B%22extension%22%3A%22ts%22%2C%22allowReturnOutsideFunction%22%3Atrue%2C%22preserveParens%22%3Atrue%2C%22allowV8Intrinsics%22%3Atrue%2C%22semanticErrors%22%3Atrue%7D%2C%22linter%22%3A%7B%7D%2C%22formatter%22%3A%7B%22useTabs%22%3Afalse%2C%22tabWidth%22%3A2%2C%22endOfLine%22%3A%22lf%22%2C%22printWidth%22%3A80%2C%22singleQuote%22%3Afalse%2C%22jsxSingleQuote%22%3Afalse%2C%22quoteProps%22%3A%22as-needed%22%2C%22trailingComma%22%3A%22all%22%2C%22semi%22%3Atrue%2C%22arrowParens%22%3A%22always%22%2C%22bracketSpacing%22%3Atrue%2C%22bracketSameLine%22%3Afalse%2C%22objectWrap%22%3A%22preserve%22%2C%22singleAttributePerLine%22%3Afalse%7D%2C%22transformer%22%3A%7B%22target%22%3A%22es2015%22%2C%22useDefineForClassFields%22%3Atrue%2C%22experimentalDecorators%22%3Atrue%2C%22emitDecoratorMetadata%22%3Atrue%7D%2C%22isolatedDeclarations%22%3A%7B%22stripInternal%22%3Afalse%7D%2C%22codegen%22%3A%7B%22normal%22%3Atrue%2C%22jsdoc%22%3Atrue%2C%22annotation%22%3Atrue%2C%22legal%22%3Atrue%7D%2C%22compress%22%3A%7B%7D%2C%22mangle%22%3A%7B%22topLevel%22%3Atrue%2C%22keepNames%22%3Afalse%7D%2C%22controlFlow%22%3A%7B%22verbose%22%3Afalse%7D%2C%22inject%22%3A%7B%22inject%22%3A%7B%7D%7D%2C%22define%22%3A%7B%22define%22%3A%7B%7D%7D%7D&code=class+X+%7B%0A++%23selectClause%3A+unknown%3B%0A%0A++test%28columns%3A+unknown%29+%7B%0A++++%28this+as+any%29.%23selectClause+%3D+columns%3B%0A++%7D%0A%7D

Prettier output

Prettier version: 3.6.2

class X {
  #selectClause: unknown;

  test(columns: unknown) {
    (this as any).#selectClause = columns;
  }
}

Prettier playground link

https://prettier.io/playground/#N4Igxg9gdgLgprEAucAbAhgZ0wAgBo7AA6UOOAxJnKnGDAMIYCuVSOTUA1lBAO5QBuEiTLxMMABSRUTALZRMbDtz5QAlIRFkcEmAAsAlriw50UAJ5qAdJWq0GzKjgC8OaXIVDSOAL4kfIAA0IBAADjAG0JjIoOgATnF8AArxCNEo6Ki86ObRwQBGcehgnHAwAMrosnAAMgZQcMgAZplUwRD5AFb2AOpFocggoXFwVHEAbo0FRSVl5aHF9QDmyDBxTHDBVLIGq+ubIHAAHqFwcQbVsJkA8qdFMBBxSRCYBhHQgwgAJkGHJ2cXBAwTIAFTOUHiBlGzVaB1eUCWNAAikwIPAYag2iBOpgjuVlsjUeikC1MQcAI5EuBJRKhdIgLAAWgacC+rN+a3QBlQy3oEFksnQg0yqF+8MRcAAgjA1gZ8kx4EkznUGhisXoYLJUD1DGIFmA4OU0m8DOM3uZBmBsL9xhsAJJQNmwcpgc7hSWO8owcw0NUHYYvOB9dADFDDUZnSa-b7XJoqxooVBNX71MYwGnoJaCv3BBZxMaDfLofLURkwPJDc6wHoGL76ZAADgADMERpSDCMM1mhSTYcFgfka3W9MgAEzBFhwEHF9KkrFwWQlr5sr41MxLJiZuAAMUegply2FCogIB8PiAA

Additional notes

oxfmt removes the parentheses around the TypeScript as expression and produces invalid syntax:

  • expected valid form: (this as any).#selectClause = columns;
  • actual invalid form: this as any.#selectClause = columns;

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    Priority

    None yet

    Effort

    None yet

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions