17e91b033SKrasimir Georgiev #include "clang/Format/Format.h"
27e91b033SKrasimir Georgiev #include "gtest/gtest.h"
37e91b033SKrasimir Georgiev
47e91b033SKrasimir Georgiev #define DEBUG_TYPE "format-test"
57e91b033SKrasimir Georgiev
67e91b033SKrasimir Georgiev namespace clang {
77e91b033SKrasimir Georgiev namespace format {
87e91b033SKrasimir Georgiev namespace {
97e91b033SKrasimir Georgiev
10*1c58208dSOwen Pan class SortImportsTestJava : public testing::Test {
117e91b033SKrasimir Georgiev protected:
GetCodeRange(StringRef Code)127e91b033SKrasimir Georgiev std::vector<tooling::Range> GetCodeRange(StringRef Code) {
137e91b033SKrasimir Georgiev return std::vector<tooling::Range>(1, tooling::Range(0, Code.size()));
147e91b033SKrasimir Georgiev }
157e91b033SKrasimir Georgiev
sort(StringRef Code,std::vector<tooling::Range> Ranges)167e91b033SKrasimir Georgiev std::string sort(StringRef Code, std::vector<tooling::Range> Ranges) {
177e91b033SKrasimir Georgiev auto Replaces = sortIncludes(FmtStyle, Code, Ranges, "input.java");
187e91b033SKrasimir Georgiev Ranges = tooling::calculateRangesAfterReplacements(Replaces, Ranges);
197e91b033SKrasimir Georgiev auto Sorted = applyAllReplacements(Code, Replaces);
207e91b033SKrasimir Georgiev EXPECT_TRUE(static_cast<bool>(Sorted));
217e91b033SKrasimir Georgiev auto Result = applyAllReplacements(
227e91b033SKrasimir Georgiev *Sorted, reformat(FmtStyle, *Sorted, Ranges, "input.java"));
237e91b033SKrasimir Georgiev EXPECT_TRUE(static_cast<bool>(Result));
247e91b033SKrasimir Georgiev return *Result;
257e91b033SKrasimir Georgiev }
267e91b033SKrasimir Georgiev
sort(StringRef Code)277e91b033SKrasimir Georgiev std::string sort(StringRef Code) { return sort(Code, GetCodeRange(Code)); }
287e91b033SKrasimir Georgiev
297e91b033SKrasimir Georgiev FormatStyle FmtStyle;
307e91b033SKrasimir Georgiev
317e91b033SKrasimir Georgiev public:
SortImportsTestJava()327e91b033SKrasimir Georgiev SortImportsTestJava() {
337e91b033SKrasimir Georgiev FmtStyle = getGoogleStyle(FormatStyle::LK_Java);
347e91b033SKrasimir Georgiev FmtStyle.JavaImportGroups = {"com.test", "org", "com"};
35a8105b37SKent Sommer FmtStyle.SortIncludes = FormatStyle::SI_CaseInsensitive;
367e91b033SKrasimir Georgiev }
377e91b033SKrasimir Georgiev };
387e91b033SKrasimir Georgiev
TEST_F(SortImportsTestJava,StaticSplitFromNormal)397e91b033SKrasimir Georgiev TEST_F(SortImportsTestJava, StaticSplitFromNormal) {
407e91b033SKrasimir Georgiev EXPECT_EQ("import static org.b;\n"
417e91b033SKrasimir Georgiev "\n"
429299ace0SOwen Pan "import org.a;",
437e91b033SKrasimir Georgiev sort("import org.a;\n"
449299ace0SOwen Pan "import static org.b;"));
457e91b033SKrasimir Georgiev }
467e91b033SKrasimir Georgiev
TEST_F(SortImportsTestJava,CapitalBeforeLowercase)477e91b033SKrasimir Georgiev TEST_F(SortImportsTestJava, CapitalBeforeLowercase) {
487e91b033SKrasimir Georgiev EXPECT_EQ("import org.Test;\n"
497e91b033SKrasimir Georgiev "import org.a.Test;\n"
509299ace0SOwen Pan "import org.b;",
517e91b033SKrasimir Georgiev sort("import org.a.Test;\n"
527e91b033SKrasimir Georgiev "import org.Test;\n"
539299ace0SOwen Pan "import org.b;"));
547e91b033SKrasimir Georgiev }
557e91b033SKrasimir Georgiev
TEST_F(SortImportsTestJava,KeepSplitGroupsWithOneNewImport)567e91b033SKrasimir Georgiev TEST_F(SortImportsTestJava, KeepSplitGroupsWithOneNewImport) {
577e91b033SKrasimir Georgiev EXPECT_EQ("import static com.test.a;\n"
587e91b033SKrasimir Georgiev "\n"
597e91b033SKrasimir Georgiev "import static org.a;\n"
607e91b033SKrasimir Georgiev "\n"
617e91b033SKrasimir Georgiev "import static com.a;\n"
627e91b033SKrasimir Georgiev "\n"
637e91b033SKrasimir Georgiev "import com.test.b;\n"
647e91b033SKrasimir Georgiev "import com.test.c;\n"
657e91b033SKrasimir Georgiev "\n"
667e91b033SKrasimir Georgiev "import org.b;\n"
677e91b033SKrasimir Georgiev "\n"
689299ace0SOwen Pan "import com.b;",
697e91b033SKrasimir Georgiev sort("import static com.test.a;\n"
707e91b033SKrasimir Georgiev "\n"
717e91b033SKrasimir Georgiev "import static org.a;\n"
727e91b033SKrasimir Georgiev "\n"
737e91b033SKrasimir Georgiev "import static com.a;\n"
747e91b033SKrasimir Georgiev "\n"
757e91b033SKrasimir Georgiev "import com.test.b;\n"
767e91b033SKrasimir Georgiev "\n"
777e91b033SKrasimir Georgiev "import org.b;\n"
787e91b033SKrasimir Georgiev "\n"
797e91b033SKrasimir Georgiev "import com.b;\n"
809299ace0SOwen Pan "import com.test.c;"));
817e91b033SKrasimir Georgiev }
827e91b033SKrasimir Georgiev
TEST_F(SortImportsTestJava,SplitGroupsWithNewline)837e91b033SKrasimir Georgiev TEST_F(SortImportsTestJava, SplitGroupsWithNewline) {
847e91b033SKrasimir Georgiev EXPECT_EQ("import static com.test.a;\n"
857e91b033SKrasimir Georgiev "\n"
867e91b033SKrasimir Georgiev "import static org.a;\n"
877e91b033SKrasimir Georgiev "\n"
887e91b033SKrasimir Georgiev "import static com.a;\n"
897e91b033SKrasimir Georgiev "\n"
907e91b033SKrasimir Georgiev "import com.test.b;\n"
917e91b033SKrasimir Georgiev "\n"
927e91b033SKrasimir Georgiev "import org.b;\n"
937e91b033SKrasimir Georgiev "\n"
949299ace0SOwen Pan "import com.b;",
957e91b033SKrasimir Georgiev sort("import static com.test.a;\n"
967e91b033SKrasimir Georgiev "import static org.a;\n"
977e91b033SKrasimir Georgiev "import static com.a;\n"
987e91b033SKrasimir Georgiev "import com.test.b;\n"
997e91b033SKrasimir Georgiev "import org.b;\n"
1009299ace0SOwen Pan "import com.b;"));
1017e91b033SKrasimir Georgiev }
1027e91b033SKrasimir Georgiev
TEST_F(SortImportsTestJava,UnspecifiedGroupAfterAllGroups)1037e91b033SKrasimir Georgiev TEST_F(SortImportsTestJava, UnspecifiedGroupAfterAllGroups) {
1047e91b033SKrasimir Georgiev EXPECT_EQ("import com.test.a;\n"
1057e91b033SKrasimir Georgiev "\n"
1067e91b033SKrasimir Georgiev "import org.a;\n"
1077e91b033SKrasimir Georgiev "\n"
1087e91b033SKrasimir Georgiev "import com.a;\n"
1097e91b033SKrasimir Georgiev "\n"
1107e91b033SKrasimir Georgiev "import abc.a;\n"
1119299ace0SOwen Pan "import xyz.b;",
1127e91b033SKrasimir Georgiev sort("import com.test.a;\n"
1137e91b033SKrasimir Georgiev "import com.a;\n"
1147e91b033SKrasimir Georgiev "import xyz.b;\n"
1157e91b033SKrasimir Georgiev "import abc.a;\n"
1169299ace0SOwen Pan "import org.a;"));
1177e91b033SKrasimir Georgiev }
1187e91b033SKrasimir Georgiev
TEST_F(SortImportsTestJava,NoSortOutsideRange)1197e91b033SKrasimir Georgiev TEST_F(SortImportsTestJava, NoSortOutsideRange) {
1207e91b033SKrasimir Georgiev std::vector<tooling::Range> Ranges = {tooling::Range(27, 15)};
1217e91b033SKrasimir Georgiev EXPECT_EQ("import org.b;\n"
1227e91b033SKrasimir Georgiev "import org.a;\n"
1237e91b033SKrasimir Georgiev "// comments\n"
1247e91b033SKrasimir Georgiev "// that do\n"
1259299ace0SOwen Pan "// nothing",
1267e91b033SKrasimir Georgiev sort("import org.b;\n"
1277e91b033SKrasimir Georgiev "import org.a;\n"
1287e91b033SKrasimir Georgiev "// comments\n"
1297e91b033SKrasimir Georgiev "// that do\n"
1309299ace0SOwen Pan "// nothing",
1317e91b033SKrasimir Georgiev Ranges));
1327e91b033SKrasimir Georgiev }
1337e91b033SKrasimir Georgiev
TEST_F(SortImportsTestJava,SortWhenRangeContainsOneLine)1347e91b033SKrasimir Georgiev TEST_F(SortImportsTestJava, SortWhenRangeContainsOneLine) {
1357e91b033SKrasimir Georgiev std::vector<tooling::Range> Ranges = {tooling::Range(27, 20)};
1367e91b033SKrasimir Georgiev EXPECT_EQ("import org.a;\n"
1377e91b033SKrasimir Georgiev "import org.b;\n"
1387e91b033SKrasimir Georgiev "\n"
1397e91b033SKrasimir Georgiev "import com.a;\n"
1407e91b033SKrasimir Georgiev "// comments\n"
1417e91b033SKrasimir Georgiev "// that do\n"
1429299ace0SOwen Pan "// nothing",
1437e91b033SKrasimir Georgiev sort("import org.b;\n"
1447e91b033SKrasimir Georgiev "import org.a;\n"
1457e91b033SKrasimir Georgiev "import com.a;\n"
1467e91b033SKrasimir Georgiev "// comments\n"
1477e91b033SKrasimir Georgiev "// that do\n"
1489299ace0SOwen Pan "// nothing",
1497e91b033SKrasimir Georgiev Ranges));
1507e91b033SKrasimir Georgiev }
1517e91b033SKrasimir Georgiev
TEST_F(SortImportsTestJava,SortLexicographically)1527e91b033SKrasimir Georgiev TEST_F(SortImportsTestJava, SortLexicographically) {
1537e91b033SKrasimir Georgiev EXPECT_EQ("import org.a.*;\n"
1547e91b033SKrasimir Georgiev "import org.a.a;\n"
1557e91b033SKrasimir Georgiev "import org.aA;\n"
1569299ace0SOwen Pan "import org.aa;",
1577e91b033SKrasimir Georgiev sort("import org.aa;\n"
1587e91b033SKrasimir Georgiev "import org.a.a;\n"
1597e91b033SKrasimir Georgiev "import org.a.*;\n"
1609299ace0SOwen Pan "import org.aA;"));
1617e91b033SKrasimir Georgiev }
1627e91b033SKrasimir Georgiev
TEST_F(SortImportsTestJava,StaticInCommentHasNoEffect)1637e91b033SKrasimir Georgiev TEST_F(SortImportsTestJava, StaticInCommentHasNoEffect) {
1647e91b033SKrasimir Georgiev EXPECT_EQ("import org.a; // static\n"
1657e91b033SKrasimir Georgiev "import org.b;\n"
1669299ace0SOwen Pan "import org.c; // static",
1677e91b033SKrasimir Georgiev sort("import org.a; // static\n"
1687e91b033SKrasimir Georgiev "import org.c; // static\n"
1699299ace0SOwen Pan "import org.b;"));
1707e91b033SKrasimir Georgiev }
1717e91b033SKrasimir Georgiev
TEST_F(SortImportsTestJava,CommentsWithAffectedImports)1727e91b033SKrasimir Georgiev TEST_F(SortImportsTestJava, CommentsWithAffectedImports) {
1737e91b033SKrasimir Georgiev EXPECT_EQ("import org.a;\n"
1747e91b033SKrasimir Georgiev "// commentB\n"
1757e91b033SKrasimir Georgiev "/* commentB\n"
1767e91b033SKrasimir Georgiev " commentB*/\n"
1777e91b033SKrasimir Georgiev "import org.b;\n"
1787e91b033SKrasimir Georgiev "// commentC\n"
1799299ace0SOwen Pan "import org.c;",
1807e91b033SKrasimir Georgiev sort("import org.a;\n"
1817e91b033SKrasimir Georgiev "// commentC\n"
1827e91b033SKrasimir Georgiev "import org.c;\n"
1837e91b033SKrasimir Georgiev "// commentB\n"
1847e91b033SKrasimir Georgiev "/* commentB\n"
1857e91b033SKrasimir Georgiev " commentB*/\n"
1869299ace0SOwen Pan "import org.b;"));
1877e91b033SKrasimir Georgiev }
1887e91b033SKrasimir Georgiev
TEST_F(SortImportsTestJava,CommentWithUnaffectedImports)1897e91b033SKrasimir Georgiev TEST_F(SortImportsTestJava, CommentWithUnaffectedImports) {
1907e91b033SKrasimir Georgiev EXPECT_EQ("import org.a;\n"
1917e91b033SKrasimir Georgiev "// comment\n"
1929299ace0SOwen Pan "import org.b;",
1937e91b033SKrasimir Georgiev sort("import org.a;\n"
1947e91b033SKrasimir Georgiev "// comment\n"
1959299ace0SOwen Pan "import org.b;"));
1967e91b033SKrasimir Georgiev }
1977e91b033SKrasimir Georgiev
TEST_F(SortImportsTestJava,CommentAfterAffectedImports)1987e91b033SKrasimir Georgiev TEST_F(SortImportsTestJava, CommentAfterAffectedImports) {
1997e91b033SKrasimir Georgiev EXPECT_EQ("import org.a;\n"
2007e91b033SKrasimir Georgiev "import org.b;\n"
2019299ace0SOwen Pan "// comment",
2027e91b033SKrasimir Georgiev sort("import org.b;\n"
2037e91b033SKrasimir Georgiev "import org.a;\n"
2049299ace0SOwen Pan "// comment"));
2057e91b033SKrasimir Georgiev }
2067e91b033SKrasimir Georgiev
TEST_F(SortImportsTestJava,CommentBeforeAffectedImports)2077e91b033SKrasimir Georgiev TEST_F(SortImportsTestJava, CommentBeforeAffectedImports) {
2087e91b033SKrasimir Georgiev EXPECT_EQ("// comment\n"
2097e91b033SKrasimir Georgiev "import org.a;\n"
2109299ace0SOwen Pan "import org.b;",
2117e91b033SKrasimir Georgiev sort("// comment\n"
2127e91b033SKrasimir Georgiev "import org.b;\n"
2139299ace0SOwen Pan "import org.a;"));
2147e91b033SKrasimir Georgiev }
2157e91b033SKrasimir Georgiev
TEST_F(SortImportsTestJava,FormatTotallyOff)2167e91b033SKrasimir Georgiev TEST_F(SortImportsTestJava, FormatTotallyOff) {
2177e91b033SKrasimir Georgiev EXPECT_EQ("// clang-format off\n"
2187e91b033SKrasimir Georgiev "import org.b;\n"
2197e91b033SKrasimir Georgiev "import org.a;\n"
2209299ace0SOwen Pan "// clang-format on",
2217e91b033SKrasimir Georgiev sort("// clang-format off\n"
2227e91b033SKrasimir Georgiev "import org.b;\n"
2237e91b033SKrasimir Georgiev "import org.a;\n"
2249299ace0SOwen Pan "// clang-format on"));
2257e91b033SKrasimir Georgiev }
2267e91b033SKrasimir Georgiev
TEST_F(SortImportsTestJava,FormatTotallyOn)2277e91b033SKrasimir Georgiev TEST_F(SortImportsTestJava, FormatTotallyOn) {
2287e91b033SKrasimir Georgiev EXPECT_EQ("// clang-format off\n"
2297e91b033SKrasimir Georgiev "// clang-format on\n"
2307e91b033SKrasimir Georgiev "import org.a;\n"
2319299ace0SOwen Pan "import org.b;",
2327e91b033SKrasimir Georgiev sort("// clang-format off\n"
2337e91b033SKrasimir Georgiev "// clang-format on\n"
2347e91b033SKrasimir Georgiev "import org.b;\n"
2359299ace0SOwen Pan "import org.a;"));
2367e91b033SKrasimir Georgiev }
2377e91b033SKrasimir Georgiev
TEST_F(SortImportsTestJava,FormatPariallyOnShouldNotReorder)2387e91b033SKrasimir Georgiev TEST_F(SortImportsTestJava, FormatPariallyOnShouldNotReorder) {
2397e91b033SKrasimir Georgiev EXPECT_EQ("// clang-format off\n"
2407e91b033SKrasimir Georgiev "import org.b;\n"
2417e91b033SKrasimir Georgiev "import org.a;\n"
2427e91b033SKrasimir Georgiev "// clang-format on\n"
2437e91b033SKrasimir Georgiev "import org.d;\n"
2449299ace0SOwen Pan "import org.c;",
2457e91b033SKrasimir Georgiev sort("// clang-format off\n"
2467e91b033SKrasimir Georgiev "import org.b;\n"
2477e91b033SKrasimir Georgiev "import org.a;\n"
2487e91b033SKrasimir Georgiev "// clang-format on\n"
2497e91b033SKrasimir Georgiev "import org.d;\n"
2509299ace0SOwen Pan "import org.c;"));
2517e91b033SKrasimir Georgiev }
2527e91b033SKrasimir Georgiev
TEST_F(SortImportsTestJava,SortJavaStaticImport)2532e7add81Smydeveloperday TEST_F(SortImportsTestJava, SortJavaStaticImport) {
2542e7add81Smydeveloperday FmtStyle.SortJavaStaticImport = FormatStyle::SJSIO_Before;
2552e7add81Smydeveloperday EXPECT_EQ("import static com.test.a;\n"
2562e7add81Smydeveloperday "\n"
2572e7add81Smydeveloperday "import static org.a;\n"
2582e7add81Smydeveloperday "\n"
2592e7add81Smydeveloperday "import static com.a;\n"
2602e7add81Smydeveloperday "\n"
2612e7add81Smydeveloperday "import com.test.b;\n"
2622e7add81Smydeveloperday "\n"
2632e7add81Smydeveloperday "import org.b;\n"
2642e7add81Smydeveloperday "\n"
2659299ace0SOwen Pan "import com.b;",
2662e7add81Smydeveloperday sort("import static com.test.a;\n"
2672e7add81Smydeveloperday "import static org.a;\n"
2682e7add81Smydeveloperday "import static com.a;\n"
2692e7add81Smydeveloperday "import com.test.b;\n"
2702e7add81Smydeveloperday "import org.b;\n"
2719299ace0SOwen Pan "import com.b;"));
2722e7add81Smydeveloperday
2732e7add81Smydeveloperday FmtStyle.SortJavaStaticImport = FormatStyle::SJSIO_After;
2742e7add81Smydeveloperday EXPECT_EQ("import com.test.b;\n"
2752e7add81Smydeveloperday "import com.test.c;\n"
2762e7add81Smydeveloperday "\n"
2772e7add81Smydeveloperday "import org.b;\n"
2782e7add81Smydeveloperday "\n"
2792e7add81Smydeveloperday "import com.b;\n"
2802e7add81Smydeveloperday "\n"
2812e7add81Smydeveloperday "import static com.test.a;\n"
2822e7add81Smydeveloperday "\n"
2832e7add81Smydeveloperday "import static org.a;\n"
2842e7add81Smydeveloperday "\n"
2859299ace0SOwen Pan "import static com.a;",
2862e7add81Smydeveloperday sort("import static com.test.a;\n"
2872e7add81Smydeveloperday "import static org.a;\n"
2882e7add81Smydeveloperday "import static com.a;\n"
2892e7add81Smydeveloperday "import com.test.b;\n"
2902e7add81Smydeveloperday "import org.b;\n"
2912e7add81Smydeveloperday "import com.b;\n"
2929299ace0SOwen Pan "import com.test.c;"));
2932e7add81Smydeveloperday }
2942e7add81Smydeveloperday
TEST_F(SortImportsTestJava,SortJavaStaticImportAsGroup)2952e7add81Smydeveloperday TEST_F(SortImportsTestJava, SortJavaStaticImportAsGroup) {
2962e7add81Smydeveloperday FmtStyle.SortJavaStaticImport = FormatStyle::SJSIO_After;
2972e7add81Smydeveloperday
2982e7add81Smydeveloperday EXPECT_EQ("import com.test.a;\n"
2992e7add81Smydeveloperday "import com.test.b;\n"
3002e7add81Smydeveloperday "\n"
3012e7add81Smydeveloperday "import static org.a;\n"
3029299ace0SOwen Pan "import static org.b;",
3032e7add81Smydeveloperday sort("import com.test.a;\n"
3042e7add81Smydeveloperday "import static org.a;\n"
3052e7add81Smydeveloperday "import com.test.b;\n"
3069299ace0SOwen Pan "import static org.b;"));
3072e7add81Smydeveloperday }
3082e7add81Smydeveloperday
TEST_F(SortImportsTestJava,DeduplicateImports)3097e91b033SKrasimir Georgiev TEST_F(SortImportsTestJava, DeduplicateImports) {
3109299ace0SOwen Pan EXPECT_EQ("import org.a;", sort("import org.a;\n"
3119299ace0SOwen Pan "import org.a;"));
3127e91b033SKrasimir Georgiev }
3137e91b033SKrasimir Georgiev
TEST_F(SortImportsTestJava,NoNewlineAtEnd)3147e91b033SKrasimir Georgiev TEST_F(SortImportsTestJava, NoNewlineAtEnd) {
3157e91b033SKrasimir Georgiev EXPECT_EQ("import org.a;\n"
3167e91b033SKrasimir Georgiev "import org.b;",
3177e91b033SKrasimir Georgiev sort("import org.b;\n"
3187e91b033SKrasimir Georgiev "import org.a;"));
3197e91b033SKrasimir Georgiev }
3207e91b033SKrasimir Georgiev
TEST_F(SortImportsTestJava,ImportNamedFunction)32188335c21SPaul Hoad TEST_F(SortImportsTestJava, ImportNamedFunction) {
32288335c21SPaul Hoad EXPECT_EQ("import X;\n"
32388335c21SPaul Hoad "class C {\n"
32488335c21SPaul Hoad " void m() {\n"
32588335c21SPaul Hoad " importFile();\n"
32688335c21SPaul Hoad " }\n"
3279299ace0SOwen Pan "}",
32888335c21SPaul Hoad sort("import X;\n"
32988335c21SPaul Hoad "class C {\n"
33088335c21SPaul Hoad " void m() {\n"
33188335c21SPaul Hoad " importFile();\n"
33288335c21SPaul Hoad " }\n"
3339299ace0SOwen Pan "}"));
33488335c21SPaul Hoad }
33588335c21SPaul Hoad
TEST_F(SortImportsTestJava,NoReplacementsForValidImports)336777bb825SKrasimir Georgiev TEST_F(SortImportsTestJava, NoReplacementsForValidImports) {
337777bb825SKrasimir Georgiev // Identical #includes have led to a failure with an unstable sort.
338777bb825SKrasimir Georgiev std::string Code = "import org.a;\n"
339777bb825SKrasimir Georgiev "import org.b;\n";
340777bb825SKrasimir Georgiev EXPECT_TRUE(
341777bb825SKrasimir Georgiev sortIncludes(FmtStyle, Code, GetCodeRange(Code), "input.java").empty());
342777bb825SKrasimir Georgiev }
343777bb825SKrasimir Georgiev
TEST_F(SortImportsTestJava,NoReplacementsForValidImportsWindows)34460365021SPaul Hoad TEST_F(SortImportsTestJava, NoReplacementsForValidImportsWindows) {
34560365021SPaul Hoad std::string Code = "import org.a;\r\n"
34660365021SPaul Hoad "import org.b;\r\n";
34760365021SPaul Hoad EXPECT_TRUE(
34860365021SPaul Hoad sortIncludes(FmtStyle, Code, GetCodeRange(Code), "input.java").empty());
34960365021SPaul Hoad }
35060365021SPaul Hoad
3517e91b033SKrasimir Georgiev } // end namespace
3527e91b033SKrasimir Georgiev } // end namespace format
3537e91b033SKrasimir Georgiev } // end namespace clang
354