<html>
    <head>
      <base href="https://bugs.llvm.org/">
    </head>
    <body><table border="1" cellspacing="0" cellpadding="8">
        <tr>
          <th>Bug ID</th>
          <td><a class="bz_bug_link 
          bz_status_NEW "
   title="NEW - clang-format messes up indentation when using JavaScript private fields and methods"
   href="https://bugs.llvm.org/show_bug.cgi?id=40999">40999</a>
          </td>
        </tr>

        <tr>
          <th>Summary</th>
          <td>clang-format messes up indentation when using JavaScript private fields and methods
          </td>
        </tr>

        <tr>
          <th>Product</th>
          <td>clang
          </td>
        </tr>

        <tr>
          <th>Version</th>
          <td>8.0
          </td>
        </tr>

        <tr>
          <th>Hardware</th>
          <td>PC
          </td>
        </tr>

        <tr>
          <th>OS</th>
          <td>Windows NT
          </td>
        </tr>

        <tr>
          <th>Status</th>
          <td>NEW
          </td>
        </tr>

        <tr>
          <th>Severity</th>
          <td>enhancement
          </td>
        </tr>

        <tr>
          <th>Priority</th>
          <td>P
          </td>
        </tr>

        <tr>
          <th>Component</th>
          <td>Formatter
          </td>
        </tr>

        <tr>
          <th>Assignee</th>
          <td>unassignedclangbugs@nondot.org
          </td>
        </tr>

        <tr>
          <th>Reporter</th>
          <td>d@domenic.me
          </td>
        </tr>

        <tr>
          <th>CC</th>
          <td>djasper@google.com, klimek@google.com, llvm-bugs@lists.llvm.org
          </td>
        </tr></table>
      <p>
        <div>
        <pre>Input:

class Example {
  pub = 1;
  #priv = 2;

  static pub2 = "foo"
  static #priv2 = "bar";

  method() {
    this.#priv = 5;
  }

  static staticMethod() {

  }

  #privateMethod() {
    this.#privateMethod(); // infinite loop
  }

  static #staticPrivateMethod() {

  }
}



clang-format -i test.js

Output:

class Example {
  pub = 1;
#priv = 2;

  static pub2 = 'foo' static #priv2 = 'bar';

  method() {
    this.#priv = 5;
  }

  static staticMethod() {}

#privateMethod() {
  this.#privateMethod();  // infinite loop
}

static #staticPrivateMethod() {}
}


Expected output: something like

class Example {
  pub = 1;
  #priv = 2;

  static pub2 = 'foo';
  static #priv2 = 'bar';

  method() {
    this.#priv = 5;
  }

  static staticMethod() {}

  #privateMethod() {
    this.#privateMethod();  // infinite loop
  }

  static #staticPrivateMethod() {}
}

Private fields are a relatively new JavaScript feature, but we are hoping to
use them in Google Chrome:
<a href="https://chromium-review.googlesource.com/c/chromium/src/+/1496278">https://chromium-review.googlesource.com/c/chromium/src/+/1496278</a>

clang-format version 8.0.0 (trunk 346566)</pre>
        </div>
      </p>


      <hr>
      <span>You are receiving this mail because:</span>

      <ul>
          <li>You are on the CC list for the bug.</li>
      </ul>
    </body>
</html>