From: Martin Probst Date: Sat, 9 Jul 2016 15:11:18 +0000 (+0000) Subject: clang-format: [JS] Sort imports case insensitive. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=3d1d8197d5a0c2e9e0b9d6da0b77f375c2062b2b;p=clang clang-format: [JS] Sort imports case insensitive. Summary: ASCII case sorting does not help finding imported symbols quickly, and it is common to have e.g. class Foo and function fooFactory exported/imported from the same file. Reviewers: djasper Subscribers: klimek, cfe-commits Differential Revision: http://reviews.llvm.org/D22146 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@274977 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Format/SortJavaScriptImports.cpp b/lib/Format/SortJavaScriptImports.cpp index 8010e4914f..32d5d756a3 100644 --- a/lib/Format/SortJavaScriptImports.cpp +++ b/lib/Format/SortJavaScriptImports.cpp @@ -105,8 +105,8 @@ bool operator<(const JsModuleReference &LHS, const JsModuleReference &RHS) { // 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,7 @@ private: std::stable_sort( Symbols.begin(), Symbols.end(), [&](const JsImportedSymbol &LHS, const JsImportedSymbol &RHS) { - return LHS.Symbol < RHS.Symbol; + return LHS.Symbol.compare_lower(RHS.Symbol) < 0; }); if (Symbols == Reference.Symbols) { // No change in symbol order. diff --git a/unittests/Format/SortImportsTestJS.cpp b/unittests/Format/SortImportsTestJS.cpp index 769fa793da..e6b5273f7b 100644 --- a/unittests/Format/SortImportsTestJS.cpp +++ b/unittests/Format/SortImportsTestJS.cpp @@ -240,6 +240,27 @@ TEST_F(SortImportsTestJS, TrailingComma) { verifySort("import {A, B,} from 'aa';\n", "import {B, A,} from 'aa';\n"); } +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