forked from qt-creator/qt-creator
		
	Change-Id: I066c1c076c900e4eb3282e64b0b928327d15484d Reviewed-by: Christian Stenger <christian.stenger@qt.io>
		
			
				
	
	
		
			132 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			132 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
| #!/usr/bin/env python
 | |
| ############################################################################
 | |
| #
 | |
| # Copyright (C) 2019 The Qt Company Ltd.
 | |
| # Contact: https://www.qt.io/licensing/
 | |
| #
 | |
| # This file is part of Qt Creator.
 | |
| #
 | |
| # Commercial License Usage
 | |
| # Licensees holding valid commercial Qt licenses may use this file in
 | |
| # accordance with the commercial license agreement provided with the
 | |
| # Software or, alternatively, in accordance with the terms contained in
 | |
| # a written agreement between you and The Qt Company. For licensing terms
 | |
| # and conditions see https://www.qt.io/terms-conditions. For further
 | |
| # information use the contact form at https://www.qt.io/contact-us.
 | |
| #
 | |
| # GNU General Public License Usage
 | |
| # Alternatively, this file may be used under the terms of the GNU
 | |
| # General Public License version 3 as published by the Free Software
 | |
| # Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
 | |
| # included in the packaging of this file. Please review the following
 | |
| # information to ensure the GNU General Public License requirements will
 | |
| # be met: https://www.gnu.org/licenses/gpl-3.0.html.
 | |
| #
 | |
| ############################################################################
 | |
| 
 | |
| import argparse
 | |
| import json
 | |
| import os
 | |
| 
 | |
| def full_header_file_content(checks_initializer_as_string):
 | |
|     return '''/****************************************************************************
 | |
| **
 | |
| ** Copyright (C) 2019 The Qt Company Ltd.
 | |
| ** Contact: https://www.qt.io/licensing/
 | |
| **
 | |
| ** This file is part of Qt Creator.
 | |
| **
 | |
| ** Commercial License Usage
 | |
| ** Licensees holding valid commercial Qt licenses may use this file in
 | |
| ** accordance with the commercial license agreement provided with the
 | |
| ** Software or, alternatively, in accordance with the terms contained in
 | |
| ** a written agreement between you and The Qt Company. For licensing terms
 | |
| ** and conditions see https://www.qt.io/terms-conditions. For further
 | |
| ** information use the contact form at https://www.qt.io/contact-us.
 | |
| **
 | |
| ** GNU General Public License Usage
 | |
| ** Alternatively, this file may be used under the terms of the GNU
 | |
| ** General Public License version 3 as published by the Free Software
 | |
| ** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
 | |
| ** included in the packaging of this file. Please review the following
 | |
| ** information to ensure the GNU General Public License requirements will
 | |
| ** be met: https://www.gnu.org/licenses/gpl-3.0.html.
 | |
| **
 | |
| ****************************************************************************/
 | |
| 
 | |
| #pragma once
 | |
| 
 | |
| #include <vector>
 | |
| 
 | |
| namespace CppTools {
 | |
| namespace Constants {
 | |
| 
 | |
| class ClazyCheckInfo
 | |
| {
 | |
| public:
 | |
|     bool isValid() const { return !name.isEmpty() && level >= -1; }
 | |
| 
 | |
|     QString name;
 | |
|     int level; // "Manual level"
 | |
|     QStringList topics;
 | |
| };
 | |
| using ClazyCheckInfos = std::vector<ClazyCheckInfo>;
 | |
| 
 | |
| // CLANG-UPGRADE-CHECK: Run 'scripts/generateClazyChecks.py' after Clang upgrade to
 | |
| // update this header.
 | |
| static const ClazyCheckInfos CLAZY_CHECKS = {
 | |
| ''' + checks_initializer_as_string + '''
 | |
| };
 | |
| 
 | |
| } // namespace Constants
 | |
| } // namespace CppTools
 | |
| '''
 | |
| 
 | |
| def parse_arguments():
 | |
|     parser = argparse.ArgumentParser(description='Clazy checks header file generator')
 | |
|     parser.add_argument('--clazy-checks-json-path', help='path to clazy\'s checks.json',
 | |
|         default=None, dest='checks_json_path')
 | |
|     return parser.parse_args()
 | |
| 
 | |
| def quoted(text):
 | |
|    return '"%s"' % (text)
 | |
| 
 | |
| def categories_as_initializer_string(check):
 | |
|     if 'categories' not in check:
 | |
|         return '{}'
 | |
|     out = ''
 | |
|     for category in check['categories']:
 | |
|         out += quoted(category) + ','
 | |
|     if out.endswith(','):
 | |
|         out = out[:-1]
 | |
|     return '{' + out + '}'
 | |
| 
 | |
| def check_as_initializer_string(check):
 | |
|     return '{QString(%s), %d, %s}' %(quoted(check['name']),
 | |
|                                      check['level'],
 | |
|                                      categories_as_initializer_string(check))
 | |
| 
 | |
| def checks_as_initializer_string(checks):
 | |
|     out = ''
 | |
|     for check in checks:
 | |
|         out += '    ' + check_as_initializer_string(check) + ',\n'
 | |
|     if out.endswith(',\n'):
 | |
|         out = out[:-2]
 | |
|     return out
 | |
| 
 | |
| def main():
 | |
|     arguments = parse_arguments()
 | |
| 
 | |
|     content = file(arguments.checks_json_path).read()
 | |
|     checks = json.loads(content)['checks']
 | |
| 
 | |
|     current_path = os.path.dirname(os.path.abspath(__file__))
 | |
|     header_path = os.path.abspath(os.path.join(current_path, '..', 'src',
 | |
|         'plugins', 'cpptools', 'cpptools_clazychecks.h'))
 | |
| 
 | |
|     with open(header_path, 'w') as f:
 | |
|         f.write(full_header_file_content(checks_as_initializer_string(checks)))
 | |
| 
 | |
| if __name__ == "__main__":
 | |
|     main()
 |