clang-format 主要包括使用文件夹前缀排序
clang-format main include sorting with folders prefix
我正在尝试让 clang-format 识别以下设置中 foo.cpp
的主要包含:
project/my_lib
├── CMakeLists.txt
├── include
│ └── project
│ └── my_lib
│ └── foo.hpp
├── src
│ └── foo.cpp
└── tests
└── foo_test.cpp
而foo.cpp
有以下内容:
#include <project/another_lib/bar.hpp>
#include <project/my_lib/foo.hpp>
#include <vector>
// ...
我认为我已经确定的问题如下:clang 尝试根据文件名识别 'main' 包含,在本例中为 foo.cpp
。当它查看 #include <project/my_lib/foo.hpp>
时,它不会将此识别为此 cpp 文件的 'main' 包含。我知道可以为“主包含文件”逻辑指定后缀,但这里需要的是前缀正则表达式。
关于如何让 clang 将正确的 include 设置为上面示例中的优先级 0 的任何帮助?
参考:Clang format options, section "IncludeCategories" and following
编辑: 我正在使用 Visual Studio 2019 中集成的 clang-format
,这意味着我认为我无法访问命令行选项。此外,这是一个共享项目,我想改变默认行为。
作为一个快速更新,哪种方式解决了我的问题:如果包含使用常规引号 ("
),那么 clang-format 与 Visual Studio 捆绑在一起似乎会得到“ main" header 并相应地排序。
不理想,但仍然是一个可行的解决方案。
即使您使用的是 Visual Studio,您仍然可以在存储库的顶层拥有一个 .clang-format 文件,并且 Visual studio 将能够检测并应用格式按照文件中设置的规则。
要解决您提到的问题,请使用以下选项。如果您的代码库不使用它,您可以忽略“stdafx.h”。
# Sort includes, import and using declarations.
SortIncludes: true
SortUsingDeclarations: true
IncludeBlocks: Regroup
IncludeIsMainSourceRegex: '$?'
# Group includes, sorting lowest priority number first
IncludeCategories:
- Regex: '[<"]stdafx.h'
Priority: -1
- Regex: '[<"].*(/|\).*'
Priority: 2
- Regex: '^<.*'
Priority: 1
- Regex: '.*'
Priority: 3
IncludeIsMainRegex: '([-_](test|unittest))?$'
我正在尝试让 clang-format 识别以下设置中 foo.cpp
的主要包含:
project/my_lib
├── CMakeLists.txt
├── include
│ └── project
│ └── my_lib
│ └── foo.hpp
├── src
│ └── foo.cpp
└── tests
└── foo_test.cpp
而foo.cpp
有以下内容:
#include <project/another_lib/bar.hpp>
#include <project/my_lib/foo.hpp>
#include <vector>
// ...
我认为我已经确定的问题如下:clang 尝试根据文件名识别 'main' 包含,在本例中为 foo.cpp
。当它查看 #include <project/my_lib/foo.hpp>
时,它不会将此识别为此 cpp 文件的 'main' 包含。我知道可以为“主包含文件”逻辑指定后缀,但这里需要的是前缀正则表达式。
关于如何让 clang 将正确的 include 设置为上面示例中的优先级 0 的任何帮助?
参考:Clang format options, section "IncludeCategories" and following
编辑: 我正在使用 Visual Studio 2019 中集成的 clang-format
,这意味着我认为我无法访问命令行选项。此外,这是一个共享项目,我想改变默认行为。
作为一个快速更新,哪种方式解决了我的问题:如果包含使用常规引号 ("
),那么 clang-format 与 Visual Studio 捆绑在一起似乎会得到“ main" header 并相应地排序。
不理想,但仍然是一个可行的解决方案。
即使您使用的是 Visual Studio,您仍然可以在存储库的顶层拥有一个 .clang-format 文件,并且 Visual studio 将能够检测并应用格式按照文件中设置的规则。
要解决您提到的问题,请使用以下选项。如果您的代码库不使用它,您可以忽略“stdafx.h”。
# Sort includes, import and using declarations.
SortIncludes: true
SortUsingDeclarations: true
IncludeBlocks: Regroup
IncludeIsMainSourceRegex: '$?'
# Group includes, sorting lowest priority number first
IncludeCategories:
- Regex: '[<"]stdafx.h'
Priority: -1
- Regex: '[<"].*(/|\).*'
Priority: 2
- Regex: '^<.*'
Priority: 1
- Regex: '.*'
Priority: 3
IncludeIsMainRegex: '([-_](test|unittest))?$'