Index: lib/Format/SortJavaScriptImports.cpp =================================================================== --- lib/Format/SortJavaScriptImports.cpp +++ lib/Format/SortJavaScriptImports.cpp @@ -105,8 +105,8 @@ // Empty URLs sort *last* (for export {...};). if (LHS.URL.empty() != RHS.URL.empty()) return LHS.URL.empty() < RHS.URL.empty(); - if (LHS.URL != RHS.URL) - return LHS.URL < RHS.URL; + if (int Res = LHS.URL.compare_lower(RHS.URL)) + return Res < 0; // '*' imports (with prefix) sort before {a, b, ...} imports. if (LHS.Prefix.empty() != RHS.Prefix.empty()) return LHS.Prefix.empty() < RHS.Prefix.empty(); @@ -245,7 +245,8 @@ std::stable_sort( Symbols.begin(), Symbols.end(), [&](const JsImportedSymbol &LHS, const JsImportedSymbol &RHS) { - return LHS.Symbol < RHS.Symbol; + int Res = LHS.Symbol.compare_lower(RHS.Symbol); + return Res < 0; }); if (Symbols == Reference.Symbols) { // No change in symbol order. Index: unittests/Format/SortImportsTestJS.cpp =================================================================== --- unittests/Format/SortImportsTestJS.cpp +++ unittests/Format/SortImportsTestJS.cpp @@ -236,6 +236,27 @@ "1;"); } +TEST_F(SortImportsTestJS, SortCaseInsensitive) { + verifySort("import {A} from 'aa';\n" + "import {A} from 'Ab';\n" + "import {A} from 'b';\n" + "import {A} from 'Bc';\n" + "\n" + "1;", + "import {A} from 'b';\n" + "import {A} from 'Bc';\n" + "import {A} from 'Ab';\n" + "import {A} from 'aa';\n" + "\n" + "1;"); + verifySort("import {aa, Ab, b, Bc} from 'x';\n" + "\n" + "1;", + "import {b, Bc, Ab, aa} from 'x';\n" + "\n" + "1;"); +} + } // end namespace } // end namespace format } // end namespace clang