[PATCH] D101515: clang-format: [JS] handle "off" in imports

Hana Joo via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Thu Apr 29 14:10:15 PDT 2021


h-joo added inline comments.


================
Comment at: clang/lib/Format/SortJavaScriptImports.cpp:252
+  SmallVector<JsModuleReference, 16>
+  sortModuleReferences(SmallVector<JsModuleReference, 16> &References) {
+    // Sort module references.
----------------
`References` seem read-only. Can you make it `const Smallvector &`?


================
Comment at: clang/lib/Format/SortJavaScriptImports.cpp:257
+    // references per group.
+    auto *start = References.begin();
+    SmallVector<JsModuleReference, 16> ReferencesSorted;
----------------
nit : `Start`


================
Comment at: clang/lib/Format/SortJavaScriptImports.cpp:377
+      }
       skipComments();
       if (Start.isInvalid() || References.empty())
----------------
I think this has a potential bug that if the user makes
```
// clang-format off
// clang-format on
```
Every subsequent import will fail to be sorted. 

or maybe something like below
```
//clang-format off
import {A, B} from "./a"
//clang-format on
//clang-format off
```
will make the 'should not be sorted' part of the code be sorted.

Even if this is not the case, could you write a test for this one?


================
Comment at: clang/unittests/Format/SortImportsTestJS.cpp:405
+  // Boundary cases
+  verifySort("// clang-format on\n", "// clang-format on\n");
+  verifySort("// clang-format off\n", "// clang-format off\n");
----------------
Do you think it makes sense to add some weird test cases that // clang-format on-off switch, is pointless or ill-formed?
examples : 
```
// this is for the corner-case I mentioned above around the comment token handler
// clang-format off
// clang-format on
import {C} from "./.."
import {B} from "./.."
import {A} from "./.."
```

```
// The clang-format off comment might be dropped or not?
// clang-format on
import {C} from "./.."
import {B} from "./.."
import {A} from "./.."
// clang-format off
```

```
// This test maybe isn't necessary?
// clang-format off
// clang-format off
import {C} from "./.."
import {B} from "./.."
import {A} from "./.."
```

...and maybe some other fun examples! :) 


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D101515/new/

https://reviews.llvm.org/D101515



More information about the cfe-commits mailing list