diff --git a/clang/lib/Format/Format.cpp b/clang/lib/Format/Format.cpp --- a/clang/lib/Format/Format.cpp +++ b/clang/lib/Format/Format.cpp @@ -3447,11 +3447,11 @@ tooling::Replacements Replaces = Formatter(*Env, Style, Status).process().first; // add a replacement to remove the "x = " from the result. - if (!Replaces.add(tooling::Replacement(FileName, 0, 4, ""))) { - // apply the reformatting changes and the removal of "x = ". - if (applyAllReplacements(Code, Replaces)) - return {Replaces, 0}; - } + Replaces = Replaces.merge( + tooling::Replacements(tooling::Replacement(FileName, 0, 4, ""))); + // apply the reformatting changes and the removal of "x = ". + if (applyAllReplacements(Code, Replaces)) + return {Replaces, 0}; return {tooling::Replacements(), 0}; } diff --git a/clang/unittests/Format/FormatTestJson.cpp b/clang/unittests/Format/FormatTestJson.cpp --- a/clang/unittests/Format/FormatTestJson.cpp +++ b/clang/unittests/Format/FormatTestJson.cpp @@ -251,5 +251,25 @@ Style); } +TEST_F(FormatTestJson, StartsWithWhitespaces) { + FormatStyle Style = getLLVMStyle(FormatStyle::LK_Json); + EXPECT_EQ("{\n" + " \"name\": 1\n" + "}", + format(" {\n" + " \"name\": 1\n" + "}", + Style)); + + // FIXME: The block below is over-indented. + EXPECT_EQ(" {\n" + " \"name\": 1\n" + " }", + format("\n{\n" + " \"name\": 1\n" + "}", + Style)); +} + } // namespace format } // end namespace clang