【问题标题】:Clang format to recognize main include with prefixed path识别带有前缀路径的主要包含的 Clang 格式
【发布时间】:2021-04-17 04:13:46
【问题描述】:

我一直在尝试使用 clang 格式来识别带有前缀路径的包含作为主要包含。

Project/B/Test.cpp 文件有以下包含块:

#include "Project/A/SomeInclude.h"
#include "Project/C/Other.h"
#include <libs/somelib.h>
#include <string>
#include "Project/Project.h"
#include "Project/B/Test.h"

我想使用这个规则对其进行排序:

IncludeCategories:
  - Regex:          'Project\/Project\.h'
    Priority:        0
  - Regex:           '".*"'
    Priority:        2
  - Regex:           '^<.*\.(h)>'
    Priority:        3
  - Regex:           '^<.*>'
    Priority:        4

结果应该是这样的:

(1)

#include "Project/Project.h"
#include "Project/A/SomeInclude.h"
#include "Project/B/Test.h"
#include "Project/C/Other.h"
#include <libs/somelib.h>
#include <string>

我还希望主包含的优先级为 1,这就是这一行应该做的,只要它与主包含匹配:

IncludeIsMainRegex: '()$?'

主要包含将始终具有格式#include "path/to/include/from/Project/folder/name.h" 这应该是最终结果:

(2)

#include "Project/Project.h"
#include "Project/B/Test.h"
#include "Project/A/SomeInclude.h"
#include "Project/C/Other.h"
#include <libs/somelib.h>
#include <string>

我尝试了很多版本的IncludeIsMainRegex,但都没有工作。关于上面的一个有趣的事情是,当我第一次运行该工具时,它会按照我想要的方式对所有内容进行排序 (2),但是如果我在同一个文件上再次运行它,它会将主要包含在类别 2 中,并弄乱了排序(1)。

我猜测前缀路径是问题所在。除了从主包含中删除路径之外,有没有办法让 clang 格式识别文件?该功能的文档对如何完成匹配并不是很清楚,我希望我可以告诉它该文件可能有一个前缀路径。

问题与this one 非常相似,但是提问者没有提供它使用的clang 格式,因此帮助有限。

【问题讨论】:

    标签: clang-format


    【解决方案1】:

    似乎简单的IncludeIsMainRegex: '$?' 就可以了。只需确保将此行放在IncludeCategories: 上方,以确保主文件在到达该行之前不会被拾取。

    【讨论】:

      猜你喜欢
      • 2014-02-17
      • 1970-01-01
      • 2019-12-18
      • 1970-01-01
      • 2015-03-06
      • 1970-01-01
      • 2016-11-13
      • 2020-05-12
      • 1970-01-01
      相关资源
      最近更新 更多