| //===- unittest/Format/FormatTestUtils.h - Formatting unit tests ----------===// |
| // |
| // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. |
| // See https://llvm.org/LICENSE.txt for license information. |
| // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception |
| // |
| //===----------------------------------------------------------------------===// |
| // |
| // This file defines utility functions for Clang-Format related tests. |
| // |
| //===----------------------------------------------------------------------===// |
| |
| #ifndef LLVM_CLANG_UNITTESTS_FORMAT_FORMATTESTUTILS_H |
| #define LLVM_CLANG_UNITTESTS_FORMAT_FORMATTESTUTILS_H |
| |
| #include "llvm/ADT/StringRef.h" |
| |
| namespace clang { |
| namespace format { |
| namespace test { |
| |
| inline std::string messUp(llvm::StringRef Code) { |
| std::string MessedUp(Code.str()); |
| bool InComment = false; |
| bool InPreprocessorDirective = false; |
| bool JustReplacedNewline = false; |
| for (unsigned i = 0, e = MessedUp.size() - 1; i != e; ++i) { |
| if (MessedUp[i] == '/' && MessedUp[i + 1] == '/') { |
| if (JustReplacedNewline) |
| MessedUp[i - 1] = '\n'; |
| InComment = true; |
| } else if (MessedUp[i] == '#' && |
| (JustReplacedNewline || i == 0 || MessedUp[i - 1] == '\n')) { |
| if (i != 0) |
| MessedUp[i - 1] = '\n'; |
| InPreprocessorDirective = true; |
| } else if (MessedUp[i] == '\\' && MessedUp[i + 1] == '\n') { |
| MessedUp[i] = ' '; |
| MessedUp[i + 1] = ' '; |
| } else if (MessedUp[i] == '\n') { |
| if (InComment) { |
| InComment = false; |
| } else if (InPreprocessorDirective) { |
| InPreprocessorDirective = false; |
| } else { |
| JustReplacedNewline = true; |
| MessedUp[i] = ' '; |
| } |
| } else if (MessedUp[i] != ' ') { |
| JustReplacedNewline = false; |
| } |
| } |
| std::string WithoutWhitespace; |
| if (MessedUp[0] != ' ') |
| WithoutWhitespace.push_back(MessedUp[0]); |
| for (unsigned i = 1, e = MessedUp.size(); i != e; ++i) { |
| if (MessedUp[i] != ' ' || MessedUp[i - 1] != ' ') |
| WithoutWhitespace.push_back(MessedUp[i]); |
| } |
| return WithoutWhitespace; |
| } |
| |
| } // end namespace test |
| } // end namespace format |
| } // end namespace clang |
| |
| #endif |