// Part of the Carbon Language project, under the Apache License v2.0 with LLVM // Exceptions. See /LICENSE for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception #include #include "llvm/ADT/SmallVector.h" #include "re2/re2.h" #include "toolchain/driver/driver_file_test_base.h" namespace Carbon::Testing { namespace { class LexerFileTest : public DriverFileTestBase { public: explicit LexerFileTest(std::filesystem::path path) : DriverFileTestBase(std::move(path)), end_of_file_re_((R"((EndOfFile.*column: )( *\d+))")) {} auto GetDefaultArgs() -> llvm::SmallVector override { return {"compile", "--phase=lex", "--dump-tokens", "%s"}; } auto GetLineNumberReplacement(llvm::ArrayRef /*filenames*/) -> LineNumberReplacement override { return {.has_file = false, .pattern = R"(line: (\s*\d+))", // The `{{{{` becomes `{{`. .line_formatv = "{{{{ *}}{0}"}; } auto DoExtraCheckReplacements(std::string& check_line) -> void override { // Ignore the resulting column of EndOfFile because it's often the end of // the CHECK comment. RE2::Replace(&check_line, end_of_file_re_, R"(\1{{ *\\d+}})"); } private: RE2 end_of_file_re_; }; } // namespace CARBON_FILE_TEST_FACTORY(LexerFileTest); } // namespace Carbon::Testing