c++ - clang 格式的多行变量赋值
问题描述
对于某些项目,我正在尝试使用 clang-format 脚本为我自动格式化 c++ 文件。当变量赋值包含更多部分并且必须拆分为多行时,我希望在变量名之后有一个换行符。像这样:
anytype result = veerrrryyyyloooonnnnggggvaaarrriiiaabbblleeenameeee + seccconnnddverrryyyloooonnnggvarriaabbleeenammeeee + orjustalotofvariablesinvolvedinoneassignment;
应该变成:
anytype result =
veerrrryyyyloooonnnnggggvaaarrriiiaabbblleeenameeee +
seccconnnddverrryyyloooonnnggvarriaabbleeenammeeee +
orjustalotofvariablesinvolvedinoneassignment;
我一直在浏览 clang-format 样式选项,但找不到适合我的情况的任何东西。我将其作为格式脚本的输出:
anytype result = veerrrryyyyloooonnnnggggvaaarrriiiaabbblleeenameeee +
seccconnnddverrryyyloooonnnggvarriaabbleeenammeeee +
orjustalotofvariablesinvolvedinoneassignment;
我查看了 clang-format 样式选项,最接近我想要的(我能找到的)的选项是AlwaysBreakBeforeMultilineStrings。这个选项附带的示例是我想要的,但是我想要它用于所有变量分配。
AlwaysBreakBeforeMultilineStrings (bool)
If true, always break before multiline string literals.
This flag is mean to make cases where there are multiple multiline strings in a file look more consistent. Thus, it will only take effect if wrapping the string at that point leads to it being indented ContinuationIndentWidth spaces from the start of the line.
true: false:
aaaa = vs. aaaa = "bbbb"
"bbbb" "cccc";
"cccc";
但我希望它不仅适用于字符串,还适用于所有其他类型的多行变量声明。我如何实现这一目标?
编辑 我把问题具体化了,我提供了使用的文件。按照评论中的建议,丢弃我的包装脚本并在 .clang 格式文件中添加样式选项 AlwaysBreakBeforeMultilineStrings 后,问题仍然存在。我的 clang 格式版本是 9.0.1 。这是我的 clang 格式文件:.clang-format
BasedOnStyle: Google
IndentWidth: 4
AlwaysBreakAfterReturnType: AllDefinitions
AccessModifierOffset: -4
AlignAfterOpenBracket: AlwaysBreak
ColumnLimit: 78
AlwaysBreakBeforeMultilineStrings: true
输入:main.c
int main(int argc, char** argv) {
std::string stringname1 = "something that could be input from somehwere";
std::string stringname2 = "another string we have from somewhere";
std::string looooongstringname = "very loooooooonggggggg long striiiiiiiiiingggggggggg" + stringname1 + "more thingss and more " + stringname2 + :"strings";
return 0;
}
我使用了命令: $clang-format main.c > formattedmain.c 这是输出的 formattedmain.c 文件:
int main(int argc, char** argv) {
std::string stringname1 = "something that could be input from somehwere";
std::string stringname2 = "another string we have from somewhere";
std::string looooongstringname = "raaaannndddoooommm teexxtt hheeeerree" +
stringname1 + "more thingss and more " +
stringname2 + : "strings";
return 0;
}
解决方案
推荐阅读
- c - 写下这个给定代码的最坏情况运行时间 O(n)?
- linux - 如何在 Debian 10 Buster XFCE 中启用第三个屏幕
- html - Spring Security 自定义登录页面不允许我进入
- python - 时间序列分析的熊猫日期时间问题
- r - 在r中创建一个计算列表中元素数量的函数
- python - 为什么使用停用词或 nltk 语料库后有些英语单词会被删除?
- javascript - Apexcharts 工具提示样式在角度更新后中断
- sql - 如何将特定列变为行并更改 SQL 中的特定值
- r - R中数据帧中dput(head(data,20))的输出
- css - Delphi Webbrowser:将 div 样式更改为显示:无