diff options
author | Martin Probst <martin@probst.io> | 2016-09-02 14:06:32 +0000 |
---|---|---|
committer | Martin Probst <martin@probst.io> | 2016-09-02 14:06:32 +0000 |
commit | 6918dcafe8ea256ae1ff0b51a95d4a5d076cd380 (patch) | |
tree | 1c1ea5c67fecf9e98e3ba8e91044740c3ccb372b /clang | |
parent | b480ffbcef2e0833b471d304861e20c2d6d9e963 (diff) | |
download | bcm5719-llvm-6918dcafe8ea256ae1ff0b51a95d4a5d076cd380.tar.gz bcm5719-llvm-6918dcafe8ea256ae1ff0b51a95d4a5d076cd380.zip |
clang-format: [JS] handle default bindings in imports.
Summary:
Default imports appear outside of named bindings in curly braces:
import A from 'a';
import A, {symbol} from 'a';
Reviewers: djasper
Subscribers: klimek, cfe-commits
Differential Revision: https://reviews.llvm.org/D23973
llvm-svn: 280486
Diffstat (limited to 'clang')
-rw-r--r-- | clang/lib/Format/SortJavaScriptImports.cpp | 23 | ||||
-rw-r--r-- | clang/unittests/Format/SortImportsTestJS.cpp | 20 |
2 files changed, 35 insertions, 8 deletions
diff --git a/clang/lib/Format/SortJavaScriptImports.cpp b/clang/lib/Format/SortJavaScriptImports.cpp index 72da52bf16b..2a90e9ab760 100644 --- a/clang/lib/Format/SortJavaScriptImports.cpp +++ b/clang/lib/Format/SortJavaScriptImports.cpp @@ -346,7 +346,6 @@ private: if (!parseModuleBindings(Keywords, Reference)) return false; - nextToken(); if (Current->is(Keywords.kw_from)) { // imports have a 'from' clause, exports might not. @@ -389,19 +388,28 @@ private: if (Current->isNot(tok::identifier)) return false; Reference.Prefix = Current->TokenText; + nextToken(); return true; } bool parseNamedBindings(const AdditionalKeywords &Keywords, JsModuleReference &Reference) { + if (Current->is(tok::identifier)) { + nextToken(); + if (Current->is(Keywords.kw_from)) + return true; + if (Current->isNot(tok::comma)) + return false; + nextToken(); // eat comma. + } if (Current->isNot(tok::l_brace)) return false; // {sym as alias, sym2 as ...} from '...'; - nextToken(); - while (true) { + while (Current->isNot(tok::r_brace)) { + nextToken(); if (Current->is(tok::r_brace)) - return true; + break; if (Current->isNot(tok::identifier)) return false; @@ -422,12 +430,11 @@ private: Symbol.Range.setEnd(Current->Tok.getLocation()); Reference.Symbols.push_back(Symbol); - if (Current->is(tok::r_brace)) - return true; - if (Current->isNot(tok::comma)) + if (!Current->isOneOf(tok::r_brace, tok::comma)) return false; - nextToken(); } + nextToken(); // consume r_brace + return true; } }; diff --git a/clang/unittests/Format/SortImportsTestJS.cpp b/clang/unittests/Format/SortImportsTestJS.cpp index e43844c49cb..2bb35a2de08 100644 --- a/clang/unittests/Format/SortImportsTestJS.cpp +++ b/clang/unittests/Format/SortImportsTestJS.cpp @@ -70,6 +70,26 @@ TEST_F(SortImportsTestJS, BasicSorting) { "let x = 1;"); } +TEST_F(SortImportsTestJS, DefaultBinding) { + verifySort("import A from 'a';\n" + "import B from 'b';\n" + "\n" + "let x = 1;", + "import B from 'b';\n" + "import A from 'a';\n" + "let x = 1;"); +} + +TEST_F(SortImportsTestJS, DefaultAndNamedBinding) { + verifySort("import A, {a} from 'a';\n" + "import B, {b} from 'b';\n" + "\n" + "let x = 1;", + "import B, {b} from 'b';\n" + "import A, {a} from 'a';\n" + "let x = 1;"); +} + TEST_F(SortImportsTestJS, WrappedImportStatements) { verifySort("import {sym1, sym2} from 'a';\n" "import {sym} from 'b';\n" |