【发布时间】: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