在 clang-tidy 中有 readability-isolate-declaration 检查。我正在尝试为字段声明做类似的事情。
让我们说我们有以下
typedef struct s{
int x,y;
}s;
如果我们在 clang-query 中检查上面的示例,我们会得到类似
CXXRecordDecl 0x555e28564740 <<source>:1:9, line:4:1> line:1:16 struct s definition
|-DefinitionData pass_in_registers aggregate standard_layout trivially_copyable pod trivial literal
| |-DefaultConstructor exists trivial needs_implicit
| |-CopyConstructor simple trivial has_const_param needs_implicit implicit_has_const_param
| |-MoveConstructor exists simple trivial needs_implicit
| |-CopyAssignment trivial has_const_param needs_implicit implicit_has_const_param
| |-MoveAssignment exists simple trivial needs_implicit
| `-Destructor simple irrelevant trivial needs_implicit
|-CXXRecordDecl 0x555e28564858 <col:9, col:16> col:16 implicit struct s
|-FieldDecl 0x555e28564900 <line:2:5, col:9> col:9 x 'int'
-FieldDecl 0x555e28564968 <col:5, col:11> col:11 y 'int'
在这里,我得到了 x 和 y 的 2 个不同的 FieldDecl。在以下情况下,我也得到 2 个 FieldDecls
typedef struct s{
int x;
int y;
}s;
CXXRecordDecl 0x5648bcf47740 <<source>:1:9, line:5:1> line:1:16 struct s definition
|-DefinitionData pass_in_registers aggregate standard_layout trivially_copyable pod trivial literal
| |-DefaultConstructor exists trivial needs_implicit
| |-CopyConstructor simple trivial has_const_param needs_implicit implicit_has_const_param
| |-MoveConstructor exists simple trivial needs_implicit
| |-CopyAssignment trivial has_const_param needs_implicit implicit_has_const_param
| |-MoveAssignment exists simple trivial needs_implicit
| `-Destructor simple irrelevant trivial needs_implicit
|-CXXRecordDecl 0x5648bcf47858 <col:9, col:16> col:16 implicit struct s
|-FieldDecl 0x5648bcf47900 <line:2:5, col:9> col:9 x 'int'
`-FieldDecl 0x5648bcf47968 <line:3:5, col:9> col:9 y 'int'
这几乎是相同的。有人如何根据 AST 区分这两种情况?