clang-format 17格式化Proto文件字段对齐异常求助
问题:clang-format 17格式化Proto文件时,带
optional的字段无法与其他字段对齐 我使用clang-format 17工具,搭配以下.clang-format配置文件:
# other languages ... --- Language: "Proto" BasedOnStyle: Google UseTab: Never TabWidth: 4 LineEnding: LF InsertNewlineAtEOF: true ColumnLimit: 120 IndentWidth: 4 ContinuationIndentWidth: 4 BreakBeforeBraces: Allman AlignConsecutiveDeclarations: AcrossEmptyLinesAndComments AlignConsecutiveAssignments: AcrossEmptyLinesAndComments AlignTrailingComments: true SpacesBeforeTrailingComments: 1 ...
格式化后得到如下结果:
message AssignUserTickets { int64 user_id = 1; int64 ticket_type_id = 2; optional google.protobuf.Timestamp expires_at = 3; int32 num_tickets = 4; }
而期望的格式化结果为:
message AssignUserTickets { int64 user_id = 1; int64 ticket_type_id = 2; optional google.protobuf.Timestamp expires_at = 3; int32 num_tickets = 4; }
移除optional关键字可实现期望的格式化效果,但我们不想这么做(注:虽然Timestamp是消息类型,默认具备显式存在性,无需使用optional,但为了与简单类型保持一致性,并向协议使用者说明省略该字段具有特定含义,我们仍希望保留它)。请问如何在不修改消息定义的前提下实现预期的格式化?
解决方案
在你的.clang-format配置的Proto语言块中添加AlignProtoFieldNames: true选项,修改后的配置片段如下:
--- Language: "Proto" BasedOnStyle: Google # 保留原有配置项... AlignProtoFieldNames: true # 新增该配置 ...
AlignProtoFieldNames是clang-format针对Proto文件提供的专用对齐选项,开启后会强制所有字段的名称部分对齐,无论字段前是否带有optional这类修饰符,完美匹配你期望的格式化效果。
内容的提问来源于stack exchange,提问作者Alex O
相关产品推荐
相关产品推荐

