【问题标题】:How to make clang-format keep closing braces on same line如何使clang-format保持在同一行上的大括号
【发布时间】:2016-07-06 09:13:53
【问题描述】:

基本上我想获得的缩进样式是'Lisp style' on Wikipedia

while (x == y) {
    something();
    somethingelse(); }

我正在使用自定义 .clang-format 文件(版本 3.8),但找不到适合我需要的选项。

提前致谢。

【问题讨论】:

  • 不是您的问题的答案(因此是评论),而是每个人自己的答案;我个人无法忍受这种格式,而是喜欢Allman 格式,就像大多数其他人一样。祝你好运。有趣,锻炼。
  • @WhozCraig 我不喜欢 Allman 风格,但习惯了 Python 和 Lisp 括号我可以使用多个右大括号,我更喜欢垂直紧凑性和有点 Python 的感觉(第一个我在新行上看到的总是一个关键字)。
  • 只需将大括号视为关键字。让 C++ 看起来像 Python 永远是个错误。
  • @CodyGray 叫它 Python、YAML 什么的,我喜欢有意义的缩进,经过格式化程序处理后,即使是 C++ 缩进也毫无疑问是有意义的。既然是有意义的,我认为看到给我已经拥有的信息的右括号是没有意义的。无论如何,最重要的是,de gustibus non disputandum est
  • lisp 风格的维基百科样本看起来很漂亮。 clang-format 拒绝支持它真是太可惜了。 coffeeppCPYSugerCPP 是一些可供考虑的替代方案。

标签: c++ indentation clang-format


【解决方案1】:

clang 格式的源代码非常干净,一旦你有了想法,阅读或修改它并不难。

这是我在一年前制作的一个补丁,在 clang 3.7 中添加了“在构造函数初始化列表之后大括号之前的中断”。 (不幸的是,它在讨论后没有合并,但我一直在自己的项目中使用它。)代码不多:https://github.com/cbeck88/clang/commit/e4f65cf7ab3deea9e6c7cdd5900ad0362835e514

弄清楚如何构建 clang 和运行 clang 单元测试可能与实际制作补丁来完成您所说的工作一样多。

我记得,源代码更多地基于添加中断而不是删除它们,因此取决于您希望如何形式化您的想法(这只是控制结构吗?对于 if's?对于大括号结束函数或类?)这可能很棘手。但我仍然希望你能够让它工作。

据我回忆,没有内置选项可以做一些接近你所说的事情。

【讨论】:

  • 另外,fwiw 构建 clang 并不难,唯一复杂的部分是它的模块化程度,基本上有独立的 LLVM,然后是需要它的 clang,然后是作为子模块的 clang-tools在那里,所以你最终不得不稍微协调不同的组件。但是构建 gcc 要困难得多,至少对我来说:p
  • 感谢您的建议,顺便说一下,在自定义 clang-format 的源代码之前,我想我会尝试 Artistic Style,它似乎有一个预定义的“Lisp 样式”选项.
猜你喜欢
  • 1970-01-01
  • 2020-08-10
  • 2016-12-23
  • 2015-06-11
  • 2019-03-20
  • 1970-01-01
  • 2019-01-27
  • 1970-01-01
  • 2020-12-25
相关资源
最近更新 更多