问题描述
我正在尝试配置.clang格式。我的目的是使包含组保持在代码中的原样,但按字母顺序对它们进行排序。我设法通过mypy
达到了想要的结果,但是它以区分大小写的方式对每个块中的内容进行了排序:
这是应用格式后得到的结果
mypy
这就是我想要实现的
3.8.6
我使用的是clang格式的版本10.0。我的.clang格式文件,如果相关的话:
0.782
谢谢!
解决方法
这是从 LLVM 12 开始添加的(将在 Clang 13 中发布?有点令人困惑);引用the in-progress release notes of LLVM 12/Clang 13 [强调我的]:
clang 格式
Option SortIncludes
已从 bool 更新为 enum
向后兼容。除了之前的 true
/false
状态(现在为 CaseInsensitive
/Never
),添加了第三个状态
(CaseSensitive
) 导致字母排序,大小写用作
决胜局。
// Never (previously false)
#include "B/A.h"
#include "A/B.h"
#include "a/b.h"
#include "A/b.h"
#include "B/a.h"
// CaseInsensitive (previously true)
#include "A/B.h"
#include "A/b.h"
#include "B/A.h"
#include "B/a.h"
#include "a/b.h"
// CaseSensitive
#include "A/B.h"
#include "A/b.h"
#include "a/b.h"
#include "B/A.h"
#include "B/a.h"
most recent Clang Format docs 已更新为使用 CaseSensitive
的示例:
IncludeCategories (std::vector<IncludeCategory>)
[...]
每个正则表达式都可以用字段标记为区分大小写
CaseSensitive
,默认情况下不是。
要在 .clang 格式文件中进行配置,请使用:
IncludeCategories:
- Regex: '^"(llvm|llvm-c|clang|clang-c)/'
Priority: 2
SortPriority: 2
CaseSensitive: true
- Regex: '^(<|"(gtest|gmock|isl|json)/)'
Priority: 3
- Regex: '<[[:alnum:].]+>'
Priority: 4
- Regex: '.*'
Priority: 1
SortPriority: 0