QtCreator:使用clang格式统一QtCreatorCodeStyle

时间:2017-03-09 11:46:57

标签: c++ qt-creator clang-format

我想知道是否有一种简单的方法可以将qt creator codestyle(xml文件)转换为clang格式文件?

我有从qtcreator生成的c ++代码的以下配置:

@Component({})
export class DummyComponent implements OnDestroy {
 form: FormGroup;
 subscription: Subscription; // from rxjs
 constructor(private fb: FormBuilder) {
    this.form = this.fb.group({
        firstName: [''],
        lastName: ['']
    });
    this.subscription = this.form.valueChanges.subscribe(
        x => console.log(x)
    );
 }

 ngOnDestroy(): void {
  this.subscription.unsubscribe();
 }
}

但我找不到大多数变量的clang格式等价物。 我的美化插件中的clang格式文件类似但不完全相同,每次都会导致我的git差异混乱。

2 个答案:

答案 0 :(得分:0)

您可以从已安装的格式中获取示例配置,例如llvm:

clang-format -style=llvm -dump-config > .clang-format

因此,您需要“值”元素的文本和键属性。 格式主要是。 :

使用python和lxml:

with open(xml_path) as xml_file: 
xml_content = xml_file.read()
tree = etree.parse(xml_path)
elements = tree.findall("value")
fileBuffer =""
for e in elements:
    filebuffer += e.attr["key"] + ": " + e.text + "\n"

未经测试

答案 1 :(得分:0)

我完成了 QtCreator 设置,并提出了以下常规映射。这些设置的列出顺序与它们在 Qt Creator 4.10.2 “代码样式”对话框中显示的顺序相同,这有助于识别有时是不明确的名称。

标记为N / A的设置似乎是clang-format所不支持的。 (根据文档clang-format故意仅支持一小部分固定样式,而不是通用格式化程序。)

我没有尝试匹配特定的设置值或更复杂的组合,但是此列表应该作为找出它的起点。

QtCreator                                     Clang-format
---------                                     ------------

[GENERAL]
SpacesForTabs                                 UseTab
TabSize                                       TabWidth
IndentSize                                    IndentWidth
PaddingMode                                   UseTab

[CONTENT]
IndentAccessSpecifiers                        AccessModifierOffset
IndentDeclarationsRelativeToAccessSpecifiers  N/A
IndentFunctionBody                            N/A
IndentBlockBody                               N/A
IndentNamespaceBody                           NamespaceIndentation

[BRACES]
# Qt's implied style matches Clang BreakBeforeBraces=Allman
# Qt's IndentX options match Clang's BreakBeforeBraces=GNU
# to customize GNU style, see:
IndentClassBraces       BraceWrapping:AfterClass:IndentBraces
IndentNamespaceBraces   BraceWrapping:AfterNamespace:IndentBraces
IndentEnumBraces        BraceWrapping:AfterEnum:IndentBraces
IndentFunctionBraces    BraceWrapping:AfterFunction:IndentBraces
IndentBlockBraces       N/A

[SWITCH]
IndentSwitchLabels                            IndentCaseLabels
IndentStatementsRelativeToSwitchLabels        N/A
IndentBlocksRelativeToSwitchLabels            N/A
IndentControlFlowRelativeToSwitchLabels       N/A

[ALIGNMENT]
AlignAssignments                              AlignOperands
ExtraPaddingForConditionsIfConfusingAlign     N/A

[POINTERS AND REFERENCES]
BindStarToIdentifier                          PointerAlignment
BindStarToTypeName                            PointerAlignment
BindStarToLeftSpecifier                       PointerAlignment
BindStarToRightSpecifier                      PointerAlignment

[?]
AutoSpacesForTabs                             N/A (editor setting)
相关问题