desc_test_comments.proto: Span: 8:1 -> 170:2 desc_test_comments.proto > syntax: Span: 8:1 -> 8:19 Detached Comments: This is the first detached comment for the syntax. This is a second detached comment. This is a third. Leading Comments: Syntax comment... Trailing Comments: Syntax trailer. desc_test_comments.proto > package: Span: 12:1 -> 12:17 Leading Comments: And now the package declaration desc_test_comments.proto > options: Span: 15:1 -> 15:78 desc_test_comments.proto > options > go_package: Span: 15:1 -> 15:78 Leading Comments: option comments FTW!!! desc_test_comments.proto > dependency[0]: Span: 17:1 -> 17:45 desc_test_comments.proto > public_dependency[0]: Span: 17:8 -> 17:14 desc_test_comments.proto > dependency[1]: Span: 18:1 -> 18:34 desc_test_comments.proto > message_type[0]: Span: 25:1 -> 116:2 Detached Comments: Multiple white space lines (like above) cannot be preserved... Leading Comments: We need a request for our RPC service below. desc_test_comments.proto > message_type[0] > name: Span: 25:68 -> 25:75 desc_test_comments.proto > message_type[0] > options: Span: 26:9 -> 26:34 desc_test_comments.proto > message_type[0] > options > deprecated: Span: 26:9 -> 26:34 Trailing Comments: deprecated! desc_test_comments.proto > message_type[0] > field[0]: Span: 29:9 -> 32:132 Leading Comments: A field comment Trailing Comments: field trailer #1... desc_test_comments.proto > message_type[0] > field[0] > label: Span: 29:9 -> 29:17 desc_test_comments.proto > message_type[0] > field[0] > type: Span: 29:18 -> 29:23 desc_test_comments.proto > message_type[0] > field[0] > name: Span: 29:24 -> 29:27 desc_test_comments.proto > message_type[0] > field[0] > number: Span: 29:70 -> 29:71 desc_test_comments.proto > message_type[0] > field[0] > options: Span: 32:11 -> 32:131 desc_test_comments.proto > message_type[0] > field[0] > options > packed: Span: 32:12 -> 32:23 desc_test_comments.proto > message_type[0] > field[0] > json_name: Span: 32:39 -> 32:56 desc_test_comments.proto > message_type[0] > field[0] > options > (testprotos.ffubar)[0]: Span: 32:77 -> 32:102 desc_test_comments.proto > message_type[0] > field[0] > options > (testprotos.ffubarb): Span: 32:104 -> 32:130 desc_test_comments.proto > message_type[0] > options: Span: 35:27 -> 35:61 desc_test_comments.proto > message_type[0] > options > (testprotos.mfubar): Span: 35:27 -> 35:61 Leading Comments: lead mfubar Trailing Comments: trailing mfubar desc_test_comments.proto > message_type[0] > field[1]: Span: 42:29 -> 43:77 Detached Comments: some detached comments some detached comments with unicode θΏ™δΈͺζ˜―ε€Ό Another field comment Leading Comments: label comment desc_test_comments.proto > message_type[0] > field[1] > label: Span: 42:29 -> 42:37 desc_test_comments.proto > message_type[0] > field[1] > type: Span: 42:57 -> 42:63 desc_test_comments.proto > message_type[0] > field[1] > name: Span: 42:83 -> 42:87 desc_test_comments.proto > message_type[0] > field[1] > number: Span: 42:90 -> 42:91 desc_test_comments.proto > message_type[0] > field[1] > options: Span: 43:17 -> 43:76 desc_test_comments.proto > message_type[0] > field[1] > default_value: Span: 43:37 -> 43:54 desc_test_comments.proto > message_type[0] > extension_range: Span: 46:9 -> 46:31 Leading Comments: extension range comments are (sadly) not preserved desc_test_comments.proto > message_type[0] > extension_range[0]: Span: 46:20 -> 46:30 desc_test_comments.proto > message_type[0] > extension_range[0] > start: Span: 46:20 -> 46:23 desc_test_comments.proto > message_type[0] > extension_range[0] > end: Span: 46:27 -> 46:30 desc_test_comments.proto > message_type[0] > extension_range: Span: 47:9 -> 47:109 desc_test_comments.proto > message_type[0] > extension_range[1]: Span: 47:20 -> 47:30 desc_test_comments.proto > message_type[0] > extension_range[1] > start: Span: 47:20 -> 47:23 desc_test_comments.proto > message_type[0] > extension_range[1] > end: Span: 47:27 -> 47:30 desc_test_comments.proto > message_type[0] > extension_range[1] > options: Span: 47:31 -> 47:108 desc_test_comments.proto > message_type[0] > extension_range[1] > options > (testprotos.exfubarb): Span: 47:32 -> 47:74 desc_test_comments.proto > message_type[0] > extension_range[1] > options > (testprotos.exfubar)[0]: Span: 47:76 -> 47:107 desc_test_comments.proto > message_type[0] > reserved_range: Span: 51:48 -> 51:77 Detached Comments: another detached comment Leading Comments: same for reserved range comments desc_test_comments.proto > message_type[0] > reserved_range[0]: Span: 51:57 -> 51:65 desc_test_comments.proto > message_type[0] > reserved_range[0] > start: Span: 51:57 -> 51:59 desc_test_comments.proto > message_type[0] > reserved_range[0] > end: Span: 51:63 -> 51:65 desc_test_comments.proto > message_type[0] > reserved_range[1]: Span: 51:67 -> 51:75 desc_test_comments.proto > message_type[0] > reserved_range[1] > start: Span: 51:67 -> 51:69 desc_test_comments.proto > message_type[0] > reserved_range[1] > end: Span: 51:73 -> 51:75 desc_test_comments.proto > message_type[0] > reserved_name: Span: 52:9 -> 52:38 Trailing Comments: reserved trailers desc_test_comments.proto > message_type[0] > reserved_name[0]: Span: 52:18 -> 52:23 desc_test_comments.proto > message_type[0] > reserved_name[1]: Span: 52:25 -> 52:30 desc_test_comments.proto > message_type[0] > reserved_name[2]: Span: 52:32 -> 52:37 desc_test_comments.proto > message_type[0] > field[2]: Span: 55:9 -> 73:10 desc_test_comments.proto > message_type[0] > field[2] > label: Span: 55:9 -> 55:17 desc_test_comments.proto > message_type[0] > field[2] > type: Span: 55:18 -> 55:23 desc_test_comments.proto > message_type[0] > field[2] > name: Span: 55:41 -> 55:47 desc_test_comments.proto > message_type[0] > field[2] > number: Span: 55:50 -> 55:51 desc_test_comments.proto > message_type[0] > nested_type[0]: Span: 55:9 -> 73:10 Leading Comments: Group comment with emoji πŸ˜€ 😍 πŸ‘» ❀ πŸ’― πŸ’₯ 🐢 πŸ¦‚ πŸ₯‘ 🍻 🌍 πŸš• πŸͺ Trailing Comments: trailer for Extras desc_test_comments.proto > message_type[0] > nested_type[0] > name: Span: 55:41 -> 55:47 desc_test_comments.proto > message_type[0] > field[2] > type_name: Span: 55:41 -> 55:47 desc_test_comments.proto > message_type[0] > nested_type[0] > options: Span: 59:17 -> 59:52 desc_test_comments.proto > message_type[0] > nested_type[0] > options > (testprotos.mfubar): Span: 59:17 -> 59:52 Leading Comments: this is a custom option desc_test_comments.proto > message_type[0] > nested_type[0] > field[0]: Span: 61:17 -> 61:41 Trailing Comments: trailing comment for dbl desc_test_comments.proto > message_type[0] > nested_type[0] > field[0] > label: Span: 61:17 -> 61:25 desc_test_comments.proto > message_type[0] > nested_type[0] > field[0] > type: Span: 61:26 -> 61:32 desc_test_comments.proto > message_type[0] > nested_type[0] > field[0] > name: Span: 61:33 -> 61:36 desc_test_comments.proto > message_type[0] > nested_type[0] > field[0] > number: Span: 61:39 -> 61:40 desc_test_comments.proto > message_type[0] > nested_type[0] > field[1]: Span: 61:126 -> 61:149 Detached Comments: detached comment Leading Comments: leading comment for flt desc_test_comments.proto > message_type[0] > nested_type[0] > field[1] > label: Span: 61:126 -> 61:134 desc_test_comments.proto > message_type[0] > nested_type[0] > field[1] > type: Span: 61:135 -> 61:140 desc_test_comments.proto > message_type[0] > nested_type[0] > field[1] > name: Span: 61:141 -> 61:144 desc_test_comments.proto > message_type[0] > nested_type[0] > field[1] > number: Span: 61:147 -> 61:148 desc_test_comments.proto > message_type[0] > nested_type[0] > options: Span: 63:17 -> 63:64 desc_test_comments.proto > message_type[0] > nested_type[0] > options > no_standard_descriptor_accessor: Span: 63:17 -> 63:64 desc_test_comments.proto > message_type[0] > nested_type[0] > options: Span: 68:79 -> 68:102 desc_test_comments.proto > message_type[0] > nested_type[0] > options > deprecated: Span: 68:79 -> 68:102 Detached Comments: weird trailing comment for the option that gets classified as detached since it's on the same line as the following element desc_test_comments.proto > message_type[0] > nested_type[0] > field[2]: Span: 71:17 -> 71:41 Leading Comments: Leading comment... Trailing Comments: Trailing comment... desc_test_comments.proto > message_type[0] > nested_type[0] > field[2] > label: Span: 71:17 -> 71:25 desc_test_comments.proto > message_type[0] > nested_type[0] > field[2] > type: Span: 71:26 -> 71:32 desc_test_comments.proto > message_type[0] > nested_type[0] > field[2] > name: Span: 71:33 -> 71:36 desc_test_comments.proto > message_type[0] > nested_type[0] > field[2] > number: Span: 71:39 -> 71:40 desc_test_comments.proto > message_type[0] > enum_type[0]: Span: 75:9 -> 96:10 Trailing Comments: trailer for enum desc_test_comments.proto > message_type[0] > enum_type[0] > name: Span: 75:14 -> 75:29 desc_test_comments.proto > message_type[0] > enum_type[0] > options: Span: 79:17 -> 79:43 desc_test_comments.proto > message_type[0] > enum_type[0] > options > allow_alias: Span: 79:17 -> 79:43 Leading Comments: allow_alias comments! desc_test_comments.proto > message_type[0] > enum_type[0] > value[0]: Span: 81:17 -> 81:86 desc_test_comments.proto > message_type[0] > enum_type[0] > value[0] > name: Span: 81:17 -> 81:22 desc_test_comments.proto > message_type[0] > enum_type[0] > value[0] > number: Span: 81:25 -> 81:26 desc_test_comments.proto > message_type[0] > enum_type[0] > value[0] > options: Span: 81:27 -> 81:85 desc_test_comments.proto > message_type[0] > enum_type[0] > value[0] > options > (testprotos.evfubars): Span: 81:28 -> 81:56 desc_test_comments.proto > message_type[0] > enum_type[0] > value[0] > options > (testprotos.evfubar): Span: 81:58 -> 81:84 desc_test_comments.proto > message_type[0] > enum_type[0] > value[1]: Span: 82:17 -> 82:100 desc_test_comments.proto > message_type[0] > enum_type[0] > value[1] > name: Span: 82:17 -> 82:22 desc_test_comments.proto > message_type[0] > enum_type[0] > value[1] > number: Span: 82:25 -> 82:26 desc_test_comments.proto > message_type[0] > enum_type[0] > value[1] > options: Span: 82:27 -> 82:99 desc_test_comments.proto > message_type[0] > enum_type[0] > value[1] > options > (testprotos.evfubaruf): Span: 82:29 -> 82:57 desc_test_comments.proto > message_type[0] > enum_type[0] > value[1] > options > (testprotos.evfubaru): Span: 82:73 -> 82:98 desc_test_comments.proto > message_type[0] > enum_type[0] > value[2]: Span: 83:17 -> 83:27 Trailing Comments: peach trailer desc_test_comments.proto > message_type[0] > enum_type[0] > value[2] > name: Span: 83:17 -> 83:22 desc_test_comments.proto > message_type[0] > enum_type[0] > value[2] > number: Span: 83:25 -> 83:26 desc_test_comments.proto > message_type[0] > enum_type[0] > value[3]: Span: 83:68 -> 83:79 Leading Comments: bowser leader desc_test_comments.proto > message_type[0] > enum_type[0] > value[3] > name: Span: 83:68 -> 83:74 desc_test_comments.proto > message_type[0] > enum_type[0] > value[3] > number: Span: 83:77 -> 83:78 desc_test_comments.proto > message_type[0] > enum_type[0] > options: Span: 85:17 -> 85:52 desc_test_comments.proto > message_type[0] > enum_type[0] > options > (testprotos.efubars): Span: 85:17 -> 85:52 desc_test_comments.proto > message_type[0] > enum_type[0] > value[4]: Span: 87:17 -> 87:27 desc_test_comments.proto > message_type[0] > enum_type[0] > value[4] > name: Span: 87:17 -> 87:22 desc_test_comments.proto > message_type[0] > enum_type[0] > value[4] > number: Span: 87:25 -> 87:26 desc_test_comments.proto > message_type[0] > enum_type[0] > value[5]: Span: 88:17 -> 88:29 desc_test_comments.proto > message_type[0] > enum_type[0] > value[5] > name: Span: 88:17 -> 88:24 desc_test_comments.proto > message_type[0] > enum_type[0] > value[5] > number: Span: 88:27 -> 88:28 desc_test_comments.proto > message_type[0] > enum_type[0] > value[6]: Span: 89:17 -> 89:60 desc_test_comments.proto > message_type[0] > enum_type[0] > value[6] > name: Span: 89:17 -> 89:24 desc_test_comments.proto > message_type[0] > enum_type[0] > value[6] > number: Span: 89:27 -> 89:28 desc_test_comments.proto > message_type[0] > enum_type[0] > value[6] > options: Span: 89:29 -> 89:59 desc_test_comments.proto > message_type[0] > enum_type[0] > value[6] > options > (testprotos.evfubarsf): Span: 89:30 -> 89:58 desc_test_comments.proto > message_type[0] > enum_type[0] > value[7]: Span: 90:17 -> 90:28 desc_test_comments.proto > message_type[0] > enum_type[0] > value[7] > name: Span: 90:17 -> 90:23 desc_test_comments.proto > message_type[0] > enum_type[0] > value[7] > number: Span: 90:26 -> 90:27 desc_test_comments.proto > message_type[0] > enum_type[0] > value[8]: Span: 91:17 -> 91:31 desc_test_comments.proto > message_type[0] > enum_type[0] > value[8] > name: Span: 91:17 -> 91:26 desc_test_comments.proto > message_type[0] > enum_type[0] > value[8] > number: Span: 91:29 -> 91:30 desc_test_comments.proto > message_type[0] > enum_type[0] > value[9]: Span: 92:17 -> 92:27 desc_test_comments.proto > message_type[0] > enum_type[0] > value[9] > name: Span: 92:17 -> 92:22 desc_test_comments.proto > message_type[0] > enum_type[0] > value[9] > number: Span: 92:25 -> 92:26 desc_test_comments.proto > message_type[0] > enum_type[0] > value[10]: Span: 93:17 -> 93:31 desc_test_comments.proto > message_type[0] > enum_type[0] > value[10] > name: Span: 93:17 -> 93:23 desc_test_comments.proto > message_type[0] > enum_type[0] > value[10] > number: Span: 93:26 -> 93:30 desc_test_comments.proto > message_type[0] > enum_type[0] > options: Span: 95:17 -> 95:50 desc_test_comments.proto > message_type[0] > enum_type[0] > options > (testprotos.efubar): Span: 95:17 -> 95:50 desc_test_comments.proto > message_type[0] > oneof_decl[0]: Span: 99:9 -> 104:10 Leading Comments: can be this or that Trailing Comments: trailer for oneof abc desc_test_comments.proto > message_type[0] > oneof_decl[0] > name: Span: 99:15 -> 99:18 desc_test_comments.proto > message_type[0] > field[3]: Span: 102:17 -> 102:33 desc_test_comments.proto > message_type[0] > field[3] > type: Span: 102:17 -> 102:23 desc_test_comments.proto > message_type[0] > field[3] > name: Span: 102:24 -> 102:28 desc_test_comments.proto > message_type[0] > field[3] > number: Span: 102:31 -> 102:32 desc_test_comments.proto > message_type[0] > field[4]: Span: 103:17 -> 103:32 desc_test_comments.proto > message_type[0] > field[4] > type: Span: 103:17 -> 103:22 desc_test_comments.proto > message_type[0] > field[4] > name: Span: 103:23 -> 103:27 desc_test_comments.proto > message_type[0] > field[4] > number: Span: 103:30 -> 103:31 desc_test_comments.proto > message_type[0] > oneof_decl[1]: Span: 106:9 -> 112:10 Leading Comments: can be these or those desc_test_comments.proto > message_type[0] > oneof_decl[1] > name: Span: 106:15 -> 106:18 desc_test_comments.proto > message_type[0] > oneof_decl[1] > options: Span: 108:17 -> 108:89 desc_test_comments.proto > message_type[0] > oneof_decl[1] > options > (testprotos.oofubar)[0]: Span: 108:17 -> 108:89 Leading Comments: whoops? desc_test_comments.proto > message_type[0] > field[5]: Span: 110:17 -> 110:34 desc_test_comments.proto > message_type[0] > field[5] > type: Span: 110:17 -> 110:23 desc_test_comments.proto > message_type[0] > field[5] > name: Span: 110:24 -> 110:29 desc_test_comments.proto > message_type[0] > field[5] > number: Span: 110:32 -> 110:33 desc_test_comments.proto > message_type[0] > field[6]: Span: 111:17 -> 111:33 desc_test_comments.proto > message_type[0] > field[6] > type: Span: 111:17 -> 111:22 desc_test_comments.proto > message_type[0] > field[6] > name: Span: 111:23 -> 111:28 desc_test_comments.proto > message_type[0] > field[6] > number: Span: 111:31 -> 111:32 desc_test_comments.proto > message_type[0] > field[7]: Span: 115:9 -> 115:40 Leading Comments: map field desc_test_comments.proto > message_type[0] > field[7] > type_name: Span: 115:9 -> 115:28 desc_test_comments.proto > message_type[0] > field[7] > name: Span: 115:29 -> 115:35 desc_test_comments.proto > message_type[0] > field[7] > number: Span: 115:38 -> 115:39 desc_test_comments.proto > extension: Span: 120:1 -> 131:2 Detached Comments: And next we'll need some extensions... Trailing Comments: trailer for extend block desc_test_comments.proto > extension[0]: Span: 128:9 -> 128:37 Leading Comments: comment for guid1 desc_test_comments.proto > extension[0] > extendee: Span: 122:1 -> 122:8 desc_test_comments.proto > extension[0] > label: Span: 128:9 -> 128:17 desc_test_comments.proto > extension[0] > type: Span: 128:18 -> 128:24 desc_test_comments.proto > extension[0] > name: Span: 128:25 -> 128:30 desc_test_comments.proto > extension[0] > number: Span: 128:33 -> 128:36 desc_test_comments.proto > extension[1]: Span: 130:9 -> 130:37 Leading Comments: ... and a comment for guid2 desc_test_comments.proto > extension[1] > extendee: Span: 122:1 -> 122:8 desc_test_comments.proto > extension[1] > label: Span: 130:9 -> 130:17 desc_test_comments.proto > extension[1] > type: Span: 130:18 -> 130:24 desc_test_comments.proto > extension[1] > name: Span: 130:25 -> 130:30 desc_test_comments.proto > extension[1] > number: Span: 130:33 -> 130:36 desc_test_comments.proto > message_type[1]: Span: 134:1 -> 134:127 desc_test_comments.proto > message_type[1] > name: Span: 134:36 -> 134:50 desc_test_comments.proto > message_type[2]: Span: 140:1 -> 141:2 Leading Comments: Tests javadoc style comment, where every line in block comment has leading asterisk that should be stripped. Trailing Comments: trailer for AnotherEmptyMessage desc_test_comments.proto > message_type[2] > name: Span: 140:9 -> 140:28 desc_test_comments.proto > service[0]: Span: 144:1 -> 170:2 Leading Comments: Service comment Trailing Comments: service trailer that spans multiple lines desc_test_comments.proto > service[0] > name: Span: 144:28 -> 144:38 desc_test_comments.proto > service[0] > options: Span: 149:9 -> 149:43 desc_test_comments.proto > service[0] > options > (testprotos.sfubar) > id: Span: 149:9 -> 149:43 Leading Comments: option that sets field desc_test_comments.proto > service[0] > options: Span: 151:9 -> 151:47 desc_test_comments.proto > service[0] > options > (testprotos.sfubar) > name: Span: 151:9 -> 151:47 Leading Comments: another option that sets field desc_test_comments.proto > service[0] > options: Span: 152:9 -> 152:35 desc_test_comments.proto > service[0] > options > deprecated: Span: 152:9 -> 152:35 Trailing Comments: DEPRECATED! desc_test_comments.proto > service[0] > options: Span: 158:9 -> 158:45 desc_test_comments.proto > service[0] > options > (testprotos.sfubare): Span: 158:9 -> 158:45 Leading Comments: * Another javadoc-style comment. This one has the double-asterisk on first line, like javadoc. desc_test_comments.proto > service[0] > method[0]: Span: 161:9 -> 162:84 Leading Comments: Method comment Trailing Comments: compact method trailer desc_test_comments.proto > service[0] > method[0] > name: Span: 161:28 -> 161:40 desc_test_comments.proto > service[0] > method[0] > client_streaming: Span: 161:73 -> 161:79 desc_test_comments.proto > service[0] > method[0] > input_type: Span: 161:96 -> 161:103 desc_test_comments.proto > service[0] > method[0] > output_type: Span: 162:57 -> 162:64 desc_test_comments.proto > service[0] > method[1]: Span: 164:9 -> 169:10 Trailing Comments: trailer for method desc_test_comments.proto > service[0] > method[1] > name: Span: 164:13 -> 164:21 desc_test_comments.proto > service[0] > method[1] > input_type: Span: 164:23 -> 164:30 desc_test_comments.proto > service[0] > method[1] > output_type: Span: 164:41 -> 164:62 desc_test_comments.proto > service[0] > method[1] > options: Span: 166:17 -> 166:42 desc_test_comments.proto > service[0] > method[1] > options > deprecated: Span: 166:17 -> 166:42 Leading Comments: this RPC is deprecated! desc_test_comments.proto > service[0] > method[1] > options: Span: 167:17 -> 167:53 desc_test_comments.proto > service[0] > method[1] > options > (testprotos.mtfubar)[0]: Span: 167:17 -> 167:53 desc_test_comments.proto > service[0] > method[1] > options: Span: 168:17 -> 168:56 desc_test_comments.proto > service[0] > method[1] > options > (testprotos.mtfubard): Span: 168:17 -> 168:56