#!/usr/bin/env python3.10 # Copyright (C) 2019 The Qt Company Ltd. # SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0 WITH Qt-GPL-exception-1.0 import argparse import os # for installing use pip3 install robotpy-cppheaderparse import CppHeaderParser def parse_arguments(): parser = argparse.ArgumentParser(description='Clazy checks header file \ generator') parser.add_argument('--clang-format-header-file', help='path to \ Format.h usually /usr/lib/llvm-x/include/clang/Format/Format.h', default=None, dest='options_header', required=True) return parser.parse_args() def full_ui_content(checks): return ''' ClangFormat::ClangFormatChecksWidget 580 16777215 ''' + checks + ''' ''' def lable_ui(name, index, offset = ""): return ''' ''' + offset + name + ''' ''' def combobox_ui(name, values, index): combobox = ''' Qt::StrongFocus ''' for value in values: combobox += ''' ''' + value + ''' ''' # for combobox += ''' ''' return combobox def string_ui(name, index): return ''' 40 16777215 Set ''' def vector_ui(name, index): return ''' 16777215 50 40 16777215 Set ''' def combobox_ui_bool(name, index): return combobox_ui(name, ["Default", "true", "false"], index) def in_list(list, type): for element in list: if element["name"] == type: return element; return create_checks_index = 0 def create_checks(variables, enums, structs, offset = ""): checks = "" global create_checks_index # create BasedOnStyle combobox ussually not presented in FormatStyle struct if 0 == create_checks_index: create_checks_index += 1 checks = lable_ui("BasedOnStyle", create_checks_index) checks += combobox_ui("BasedOnStyle", ["LLVM", "Google", "Chromium", "Mozilla", "WebKit", "Microsoft", "GNU"], create_checks_index) for variable in variables: create_checks_index += 1 type = variable["type"] name = variable["name"] enum = in_list(enums, type) struct = in_list(structs, type) if enum: checks += lable_ui(name, create_checks_index, offset) checks += combobox_ui(name, [value["name"].split("_")[1] for value in enum["values"]], create_checks_index) elif struct: checks += lable_ui(name, create_checks_index, offset) check = create_checks(struct["properties"]["public"], enums, structs, " ") checks += check elif "std::string" == type or "unsigned" == type or "int" == type: checks += lable_ui(name, create_checks_index, offset) checks += string_ui(name, create_checks_index) elif "std::vector" == type: checks += lable_ui(name, create_checks_index, offset) checks += vector_ui(name, create_checks_index) elif "bool" == type: checks += lable_ui(name, create_checks_index, offset) checks += combobox_ui_bool(name, create_checks_index) return checks def main(): arguments = parse_arguments() header = CppHeaderParser.CppHeader(arguments.options_header) enums = header.classes["FormatStyle"]["enums"]["public"] structs = header.classes["FormatStyle"]["nested_classes"] variables = header.classes["FormatStyle"]["properties"]["public"] checks = create_checks(variables, enums, structs) current_path = os.path.dirname(os.path.abspath(__file__)) ui_path = os.path.abspath(os.path.join(current_path, '..', 'src', 'plugins', 'clangformat', 'clangformatchecks.ui')) with open(ui_path, 'w') as f: f.write(full_ui_content(checks)) if __name__ == "__main__": main()