1651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines//===- unittest/Format/FormatTestProto.cpp --------------------------------===// 2651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// 3651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// The LLVM Compiler Infrastructure 4651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// 5651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// This file is distributed under the University of Illinois Open Source 6651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// License. See LICENSE.TXT for details. 7651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// 8651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines//===----------------------------------------------------------------------===// 9651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 10651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines#include "FormatTestUtils.h" 11651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines#include "clang/Format/Format.h" 12651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines#include "llvm/Support/Debug.h" 13651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines#include "gtest/gtest.h" 14651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 156bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines#define DEBUG_TYPE "format-test" 166bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines 17651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesnamespace clang { 18651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesnamespace format { 19651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 20651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesclass FormatTestProto : public ::testing::Test { 21651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesprotected: 22651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines static std::string format(llvm::StringRef Code, unsigned Offset, 23651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines unsigned Length, const FormatStyle &Style) { 24651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines DEBUG(llvm::errs() << "---\n"); 25651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines DEBUG(llvm::errs() << Code << "\n\n"); 26651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines std::vector<tooling::Range> Ranges(1, tooling::Range(Offset, Length)); 27651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines tooling::Replacements Replaces = reformat(Style, Code, Ranges); 284967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar auto Result = applyAllReplacements(Code, Replaces); 294967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar EXPECT_TRUE(static_cast<bool>(Result)); 304967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar DEBUG(llvm::errs() << "\n" << *Result << "\n\n"); 314967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar return *Result; 32651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines } 33651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 34651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines static std::string format(llvm::StringRef Code) { 35651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines FormatStyle Style = getGoogleStyle(FormatStyle::LK_Proto); 36651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines Style.ColumnLimit = 60; // To make writing tests easier. 37651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines return format(Code, 0, Code.size(), Style); 38651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines } 39651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 40651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines static void verifyFormat(llvm::StringRef Code) { 41651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines EXPECT_EQ(Code.str(), format(test::messUp(Code))); 42651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines } 43651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}; 44651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 45651f13cea278ec967336033dd032faef0e9fc2ecStephen HinesTEST_F(FormatTestProto, FormatsMessages) { 46651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines verifyFormat("message SomeMessage {\n" 47651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines " required int32 field1 = 1;\n" 48651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines "}"); 49651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines verifyFormat("message SomeMessage {\n" 50c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines " required .absolute.Reference field1 = 1;\n" 51c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines "}"); 52c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines verifyFormat("message SomeMessage {\n" 53651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines " required int32 field1 = 1;\n" 54651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines " optional string field2 = 2 [default = \"2\"]\n" 55651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines "}"); 56651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 57651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines verifyFormat("message SomeMessage {\n" 586bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines " optional really.really.long.qualified.type.aaa.aaaaaaa\n" 59651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines " fiiiiiiiiiiiiiiiiiiiiiiiiield = 1;\n" 60651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines " optional\n" 616bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines " really.really.long.qualified.type.aaa.aaaaaaa.aaaaaaaa\n" 62651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines " another_fiiiiiiiiiiiiiiiiiiiiield = 2;\n" 63651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines "}"); 64651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines} 65651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 6687d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga NainarTEST_F(FormatTestProto, KeywordsInOtherLanguages) { 6787d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar verifyFormat("optional string operator = 1;"); 6887d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar} 6987d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar 70651f13cea278ec967336033dd032faef0e9fc2ecStephen HinesTEST_F(FormatTestProto, FormatsEnums) { 71651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines verifyFormat("enum Type {\n" 72651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines " UNKNOWN = 0;\n" 73651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines " TYPE_A = 1;\n" 74651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines " TYPE_B = 2;\n" 75651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines "};"); 7687d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar verifyFormat("enum Type {\n" 774967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar " UNKNOWN = 0 [(some_options) = {a: aa, b: bb}];\n" 784967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "};"); 794967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar verifyFormat("enum Type {\n" 8087d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar " UNKNOWN = 0 [(some_options) = {\n" 814967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar " a: aa, // wrap\n" 8287d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar " b: bb\n" 8387d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar " }];\n" 8487d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar "};"); 85651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines} 86651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 87651f13cea278ec967336033dd032faef0e9fc2ecStephen HinesTEST_F(FormatTestProto, UnderstandsReturns) { 88651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines verifyFormat("rpc Search(SearchRequest) returns (SearchResponse);"); 89651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines} 90651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 91651f13cea278ec967336033dd032faef0e9fc2ecStephen HinesTEST_F(FormatTestProto, MessageFieldAttributes) { 92651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines verifyFormat("optional string test = 1 [default = \"test\"];"); 93651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines verifyFormat("optional bool a = 1 [default = true, deprecated = true];"); 944967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar verifyFormat("optional LongMessageType long_proto_field = 1 [\n" 954967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar " default = REALLY_REALLY_LONG_CONSTANT_VALUE,\n" 964967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar " deprecated = true\n" 974967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "];"); 98651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines verifyFormat("optional LongMessageType long_proto_field = 1\n" 99651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines " [default = REALLY_REALLY_LONG_CONSTANT_VALUE];"); 100651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines verifyFormat("repeated double value = 1\n" 1016bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines " [(aaaaaaa.aaaaaaaaa) = {aaaaaaaaaaaaaaaaa: AAAAAAAA}];"); 102176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines verifyFormat("repeated double value = 1 [(aaaaaaa.aaaaaaaaa) = {\n" 103176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines " aaaaaaaaaaaaaaaa: AAAAAAAAAA,\n" 104176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines " bbbbbbbbbbbbbbbb: BBBBBBBBBB\n" 105176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines "}];"); 106176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines verifyFormat("repeated double value = 1 [(aaaaaaa.aaaaaaaaa) = {\n" 107176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines " aaaaaaaaaaaaaaaa: AAAAAAAAAA\n" 108176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines " bbbbbbbbbbbbbbbb: BBBBBBBBBB\n" 109176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines "}];"); 1104967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar verifyFormat("repeated double value = 1 [\n" 1114967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar " (aaaaaaa.aaaaaaaaa) = {\n" 1124967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar " aaaaaaaaaaaaaaaa: AAAAAAAAAA\n" 1134967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar " bbbbbbbbbbbbbbbb: BBBBBBBBBB\n" 1144967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar " },\n" 1154967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar " (bbbbbbb.bbbbbbbbb) = {\n" 1164967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar " aaaaaaaaaaaaaaaa: AAAAAAAAAA\n" 1174967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar " bbbbbbbbbbbbbbbb: BBBBBBBBBB\n" 1184967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar " }\n" 1194967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "];"); 120176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines verifyFormat("repeated double value = 1 [(aaaaaaa.aaaaaaaaa) = {\n" 12158878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar " type: \"AAAAAAAAAA\"\n" 12258878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar " is: \"AAAAAAAAAA\"\n" 12358878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar " or: \"BBBBBBBBBB\"\n" 12458878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar "}];"); 12558878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar verifyFormat("repeated double value = 1 [(aaaaaaa.aaaaaaaaa) = {\n" 126176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines " aaaaaaaaaaaaaaaa: AAAAAAAAAA,\n" 127176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines " bbbbbbb: BBBB,\n" 128176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines " bbbb: BBB\n" 129176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines "}];"); 1304967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar verifyFormat("optional AAA aaa = 1 [\n" 1314967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar " foo = {\n" 1324967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar " key: 'a' //\n" 1334967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar " },\n" 1344967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar " bar = {\n" 1354967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar " key: 'a' //\n" 1364967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar " }\n" 1374967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "];"); 138651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines} 139651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 140b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga NainarTEST_F(FormatTestProto, DoesntWrapFileOptions) { 141b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar EXPECT_EQ( 142b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar "option java_package = " 143b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar "\"some.really.long.package.that.exceeds.the.column.limit\";", 144b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar format("option java_package = " 145b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar "\"some.really.long.package.that.exceeds.the.column.limit\";")); 146b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar} 147b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar 148651f13cea278ec967336033dd032faef0e9fc2ecStephen HinesTEST_F(FormatTestProto, FormatsOptions) { 149176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines verifyFormat("option (MyProto.options) = {\n" 150176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines " field_a: OK\n" 151176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines " field_b: \"OK\"\n" 152176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines " field_c: \"OK\"\n" 153176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines " msg_field: {field_d: 123}\n" 154176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines "};"); 155176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines verifyFormat("option (MyProto.options) = {\n" 156176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines " field_a: OK\n" 157176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines " field_b: \"OK\"\n" 158176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines " field_c: \"OK\"\n" 1594967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar " msg_field: {field_d: 123 field_e: OK}\n" 160176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines "};"); 161176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines verifyFormat("option (MyProto.options) = {\n" 162176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines " field_a: OK // Comment\n" 163176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines " field_b: \"OK\"\n" 164176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines " field_c: \"OK\"\n" 165176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines " msg_field: {field_d: 123}\n" 166176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines "};"); 167176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines verifyFormat("option (MyProto.options) = {\n" 168176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines " field_c: \"OK\"\n" 169176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines " msg_field{field_d: 123}\n" 170176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines "};"); 1714967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 1724967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar // Support syntax with <> instead of {}. 1734967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar verifyFormat("option (MyProto.options) = {\n" 1744967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar " field_c: \"OK\",\n" 1754967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar " msg_field: <field_d: 123>\n" 1764967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "};"); 177651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines} 178651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 1796bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen HinesTEST_F(FormatTestProto, FormatsService) { 1806bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines verifyFormat("service SearchService {\n" 1816bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines " rpc Search(SearchRequest) returns (SearchResponse) {\n" 1826bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines " option foo = true;\n" 1836bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines " }\n" 1846bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines "};"); 1856bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines} 1866bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines 18787d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga NainarTEST_F(FormatTestProto, ExtendingMessage) { 18887d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar verifyFormat("extend .foo.Bar {\n" 18987d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar "}"); 19087d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar} 19187d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar 1924967a710c84587c654b56c828382219c3937dacbPirama Arumuga NainarTEST_F(FormatTestProto, FormatsImports) { 1934967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar verifyFormat("import \"a.proto\";\n" 1944967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "import \"b.proto\";\n" 1954967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "// comment\n" 1964967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "message A {\n" 1974967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "}"); 1984967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 1994967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar verifyFormat("import public \"a.proto\";\n" 2004967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "import \"b.proto\";\n" 2014967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "// comment\n" 2024967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "message A {\n" 2034967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "}"); 2044967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 2054967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar // Missing semicolons should not confuse clang-format. 2064967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar verifyFormat("import \"a.proto\"\n" 2074967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "import \"b.proto\"\n" 2084967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "// comment\n" 2094967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "message A {\n" 2104967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "}"); 2114967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar} 2124967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 213651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines} // end namespace tooling 214651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines} // end namespace clang 215