diff options
| author | Jordan Rupprecht <rupprecht@google.com> | 2018-11-12 18:15:04 +0000 |
|---|---|---|
| committer | Jordan Rupprecht <rupprecht@google.com> | 2018-11-12 18:15:04 +0000 |
| commit | 054dc28afa225a3a7304f6e5bc3115986cdc65a9 (patch) | |
| tree | de0f1586ec4de5dc8a4daab65c45723b4f75fe5a /clang/unittests/Format/FormatTestTableGen.cpp | |
| parent | 5f9513147a4f0005a6a1bfa2da9081455ef906b4 (diff) | |
| download | bcm5719-llvm-054dc28afa225a3a7304f6e5bc3115986cdc65a9.tar.gz bcm5719-llvm-054dc28afa225a3a7304f6e5bc3115986cdc65a9.zip | |
[clang-format] Support breaking consecutive string literals for TableGen
Summary:
clang-format can get confused by string literals in TableGen: it knows that strings can be broken up, but doesn't seem to understand how that can be indented across line breaks, and arranges them in a weird triangular pattern. Take this output example from `clang-format tools/llvm-objcopy/ObjcopyOpts.td` (which has now been formatted in rL345896 with this patch applied):
```
defm keep_global_symbols
: Eq<
"keep-global-symbols", "Reads a list of symbols from <filename> and "
"runs as if " "--keep-global-symbol=<symbol> "
"is set for each one. "
"<filename> " "contains one "
"symbol per line "
"and may contain "
"comments "
"beginning " "with"
" '#'"
". "
"Lead"
"ing "
```
Reviewers: alexshap, MaskRay, djasper
Reviewed By: MaskRay
Subscribers: krasimir, mgorny, cfe-commits
Differential Revision: https://reviews.llvm.org/D53952
llvm-svn: 346687
Diffstat (limited to 'clang/unittests/Format/FormatTestTableGen.cpp')
| -rw-r--r-- | clang/unittests/Format/FormatTestTableGen.cpp | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/clang/unittests/Format/FormatTestTableGen.cpp b/clang/unittests/Format/FormatTestTableGen.cpp new file mode 100644 index 00000000000..820ea783cc9 --- /dev/null +++ b/clang/unittests/Format/FormatTestTableGen.cpp @@ -0,0 +1,56 @@ +//===- unittest/Format/FormatTestTableGen.cpp -----------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +#include "FormatTestUtils.h" +#include "clang/Format/Format.h" +#include "llvm/Support/Debug.h" +#include "gtest/gtest.h" + +#define DEBUG_TYPE "format-test" + +namespace clang { +namespace format { + +class FormatTestTableGen : public ::testing::Test { +protected: + static std::string format(llvm::StringRef Code, unsigned Offset, + unsigned Length, const FormatStyle &Style) { + LLVM_DEBUG(llvm::errs() << "---\n"); + LLVM_DEBUG(llvm::errs() << Code << "\n\n"); + std::vector<tooling::Range> Ranges(1, tooling::Range(Offset, Length)); + tooling::Replacements Replaces = reformat(Style, Code, Ranges); + auto Result = applyAllReplacements(Code, Replaces); + EXPECT_TRUE(static_cast<bool>(Result)); + LLVM_DEBUG(llvm::errs() << "\n" << *Result << "\n\n"); + return *Result; + } + + static std::string format(llvm::StringRef Code) { + FormatStyle Style = getGoogleStyle(FormatStyle::LK_TableGen); + Style.ColumnLimit = 60; // To make writing tests easier. + return format(Code, 0, Code.size(), Style); + } + + static void verifyFormat(llvm::StringRef Code) { + EXPECT_EQ(Code.str(), format(Code)) << "Expected code is not stable"; + EXPECT_EQ(Code.str(), format(test::messUp(Code))); + } +}; + +TEST_F(FormatTestTableGen, FormatStringBreak) { + verifyFormat("include \"OptParser.td\"\n" + "def flag : Flag<\"--foo\">,\n" + " HelpText<\n" + " \"This is a very, very, very, very, \"\n" + " \"very, very, very, very, very, very, \"\n" + " \"very long help string\">;\n"); +} + +} // namespace format +} // end namespace clang |

