diff --git a/clang/lib/Format/SortJavaScriptImports.cpp b/clang/lib/Format/SortJavaScriptImports.cpp index af2d3400c970d..e24fe051a26ce 100644 --- a/clang/lib/Format/SortJavaScriptImports.cpp +++ b/clang/lib/Format/SortJavaScriptImports.cpp @@ -517,7 +517,7 @@ class JavaScriptImportSorter : public TokenAnalyzer { } // eat a potential "import X, " prefix. - if (Current->is(tok::identifier)) { + if (!Reference.IsExport && Current->is(tok::identifier)) { Reference.DefaultImport = Current->TokenText; nextToken(); if (Current->is(Keywords.kw_from)) diff --git a/clang/unittests/Format/SortImportsTestJS.cpp b/clang/unittests/Format/SortImportsTestJS.cpp index 9d779cd988d0c..2778d6efcdf9a 100644 --- a/clang/unittests/Format/SortImportsTestJS.cpp +++ b/clang/unittests/Format/SortImportsTestJS.cpp @@ -503,6 +503,15 @@ TEST_F(SortImportsTestJS, ImportExportType) { verifySort("export {A, type B} from 'foo';\n", "export {A} from 'foo';\n" "export {type B} from 'foo';"); + + // `export type X = Y;` should terminate import sorting. The following export + // statements should therefore not merge. + verifySort("export type A = B;\n" + "export {X};\n" + "export {Y};\n", + "export type A = B;\n" + "export {X};\n" + "export {Y};\n"); } } // end namespace