如何使 clang-format 尊重“类似表格”的代码格式

2024-03-12

我的代码具有按列对齐的数据或参数表,如下所示(人为的简单示例;实际代码具有更大的表):

//        Name    Size    Starting val
//        ======= ======= ============
S s = {
        { "Dubs", abc,    123 },
        { "X",    n,      m   },
        { "YZ",   ij / q, kl  } 
    };

//           Name    Size    Starting val
//           ======= ======= ============
w  = Create( "Dubs", abc,    123 );
x  = Create( "X",    n,      m   );
yz = Create( "YZ",   ij / q, kl  );

clang-format 取消表格格式:

//        Name    Size    Starting val
//        ======= ======= ============
S s = {
    { "Dubs", abc, 123 },
    { "X", n, m },
    { "YZ", ij / q, kl }
};

//           Name    Size    Starting val
//           ======= ======= ============
w  = Create( "Dubs", abc, 123 );
x  = Create( "X", n, m );
yz = Create( "YZ", ij / q, kl );

我们的团队希望采用 clang-format 并自动运行它,但这个问题阻止了我们这样做。我们可以手动检查并将所有此类情况包装在// clang-format off/on标签,但那是体力劳动。

有没有办法设置 clang-format 来保留这样的表格,甚至自动表格化新代码?


您将无法让 clang-format 尊重所有自定义内部格式及其有关添加新样式选项的文档 https://clang.llvm.org/docs/ClangFormatStyleOptions.html#adding-additional-style-options相当紧。将 clang-format 采用到现有代码库中需要some妥协。这是这些妥协之一。

我遇到了你的情况,一个庞大的代码库,有数十名工程师固定在他们的方式上,不愿意改变他们的内部编码标准。我已经完成了几次大型重构,花了数周的时间来修复间距。没有好好利用时间。

我无法驾驭标准化遗留格式的政治。 Clang-Formats 的采用是以尊重我们的旧格式为条件的。

我的解决方案是编写一个包装脚本,该脚本将读入文件,检测内部奇怪之处(在您的情况下,查找仅包含“=”和“”的长注释)并将它们夹在 clang 格式的指令中:

// clang-format off
// AddedByYourTool
//           Name    Size    Starting val
//           ======= ======= ============
w  = Create( "Dubs", abc,    123 );
x  = Create( "X",    n,      m );
yz = Create( "YZ",   ij / q, kl );
// clang-format on

然后它会通过 clang-format 进行管道传输。然后在输出中找到AddedByYourTool并删除周围的clang-format。 (您需要该令牌,这样您就不会删除现有的 clang-format 关闭)。

太糟糕了。这是一个可怕的解决方案,但除非你有能力命令这种格式消失,或者有政治技巧来协商它的消失,或者想要在你的余下职业生涯中手动重新格式化,否则这是唯一真正的解决方案。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使 clang-format 尊重“类似表格”的代码格式 的相关文章

随机推荐

  • 人类可读、递归、排序的最大文件列表

    在 POSIX shell 中打印前 10 个最大文件列表的最佳实践是什么 必须有比我当前的解决方案更优雅的东西 DIR N 10 LIMIT 512000 find DIR type f size LIMIT k exec du sort
  • np.fromfile 文件大小的最大限制?

    np fromfile 是否有最大文件大小 我正在尝试读取一个 48GB 文件 其中包含大约 2 1e9 条记录 每条记录有 5 个值 当我将计数限制为 8e7 时它起作用 fromfile filename dtp int 8e7 Out
  • 使用散点数据集生成热图

    我有一组 X Y 数据点 大约 10k 很容易绘制为散点图 但我想将其表示为热图 我查看了 Matplotlib 中的示例 它们似乎都已经从热图单元格值开始生成图像 有没有一种方法可以将一堆不同的 x y 转换为热图 其中 x y 频率较高
  • 在 React 中管理用户会话的最佳方法是什么?

    我对如何在 React 中管理用户会话有疑问 例如在 MVC NET 中 您只能使用 Session 对象 例如Session test 但显然 React 无法做到这一点 我正在阅读有关使用组件状态的内容 我认为在主要组件处设置状态并使用
  • Xcode Source Kit 将不会停止使用 Swift 崩溃[重复]

    这个问题在这里已经有答案了 我需要找到一个解决方案来解决 Swift 中超级棒的 Source Kit Crashing 错误 我读过很多堆栈溢出帖子 但似乎没有人有解决方案 如果有一行代码导致了问题 我不可能通过 50 多个源文件来找到它
  • 如何将字符串值从一个视图控制器传递到另一个视图控制器

    你好 我是目标 c 的新手 我有一个带有 h m xib 文件的登录视图控制器 成功登录后我需要转到第二页 场景是这样的 我正在访问网络服务 为了验证用户身份 我将用户名和密码发送到 Web 服务 作为回报我得到一个字符串值 根据字符串值的
  • 测量协议中的UserId、CID

    测量协议 为了识别新用户与回访用户 我们可以使用用户 ID 字段吗 即我们可以对用户名或其他用户唯一的标识符进行哈希处理 并将其与特定用户相关联 这样我们就可以有效地识别新用户与回访用户 关于 CID 的问题 CID 用于唯一标识用户的会话
  • EF6 与 Entity Framework Core:插入实体而不将主键(身份)重置为零

    EF6 插入已经具有主键值的实体可以正常工作 并向主键分配新值 EF Core 它尝试插入主键的值 但显然失败了异常 当 IDENTITY INSERT 设置为 OFF 时 无法在表 Asset 中插入标识列的显式值 我发现的解决方法是将
  • 如果没有 h3 标签,JQuery 手风琴将无法工作

    我正在尝试用 JQuery 制作手风琴 但遇到了一些麻烦 JQuery 网站显示如何创建您的手风琴内容 如下所示 div a href First header a div First content div a href Second h
  • 如何将数据访问映射到实体框架中的业务逻辑对象

    我在 ASP NET C MVC 应用程序中使用实体框架 我在数据访问层中有由 EF 生成的对象 namespace Project1 DataAccess using System using System Collections Gen
  • 如何在 jQuery Mobile 中检测设备的互联网连接

    我正在使用 HTML5 CSS3 jQuery Mobile jQuery UI ASP NET C 和一些 jQuery 插件为调查创建这个简单的移动网页 要求之一是显示一个弹出窗口 对话框 JavaScript 警报或 jQuery 移
  • 使用 Saxon 读取 XSLT 样式表中的环境变量

    我正在尝试生成一个 XML 文件 其中包含我的机器的主机名的任意元素或属性 例如
  • 通用类的通用父级

    我为此使用了一个虚构的例子 比如说 我有一个 Widget 类 例如 abstract class Widget Widget parent 现在 我的其他类将从这个 Widget 类派生 但假设我想在定义派生类型时在类中放置一些约束 以便
  • 如何在android上使用kso​​ap2调用WCF服务?

    这是我的代码 import org ksoap2 import org ksoap2 serialization import org ksoap2 transport import android app Activity import
  • 无法在PHP中的遍历预序中显示所有树

    我的数据库中有一个表 其中包含许多家谱树 id name parent id 1 grandfather NULL 2 father 1 3 uncle 1 4 son 2 5 brother 2 6 cousin s dauther 7
  • R 中随机森林的分层抽样

    我在文档中阅读了以下内容randomForest strata 用于分层抽样的 因子 变量 sampsize 要绘制的样本大小 对于分类 如果 sampsize 是一个长度为层数的向量 然后采样 按strata分层 sampsize的元素
  • 装饰器可以装饰递归函数吗?

    我想看看两种计算斐波那契数列的方法之间的时间成本差异 首先 我创建了一个装饰器 将 输出时间成本 函数添加到函数中 def time cost func def wed n start time time func n stop time
  • SQL依赖+服务代理

    我正在使用 SqlDependency 在某些表中的数据发生更改时获取通知 private void subscribeBroker using var conn new SqlConnection connString conn Open
  • 在Python中使用curses和raw_input

    在我的Python Linux控制台应用程序中 我使用curses来处理数据的显示 同时 我希望有一个输入行来输入命令 几乎是良好的 ol irssi 风格 使用默认的curses getch 我必须做大量的编码才能获得raw input函
  • 如何使 clang-format 尊重“类似表格”的代码格式

    我的代码具有按列对齐的数据或参数表 如下所示 人为的简单示例 实际代码具有更大的表 Name Size Starting val S s Dubs abc 123 X n m YZ ij q kl Name Size Starting va