mirror of
				https://github.com/ethereum/solidity
				synced 2023-10-03 13:03:40 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			58 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			58 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
#! /usr/bin/env python3
 | 
						|
 | 
						|
"""
 | 
						|
Performs pylint on all python files in the project repo's {test,script,docs} directory recursively.
 | 
						|
 | 
						|
This script is meant to be run from the CI but can also be easily in local dev environment,
 | 
						|
where you can optionally pass `-d` as command line argument to let this script abort on first error.
 | 
						|
"""
 | 
						|
 | 
						|
from os import path, walk, system
 | 
						|
from sys import argv, exit as exitwith
 | 
						|
 | 
						|
PROJECT_ROOT = path.dirname(path.realpath(__file__))
 | 
						|
PYLINT_RCFILE = "{}/pylintrc".format(PROJECT_ROOT)
 | 
						|
 | 
						|
SGR_INFO = "\033[1;32m"
 | 
						|
SGR_CLEAR = "\033[0m"
 | 
						|
 | 
						|
def pylint_all_filenames(dev_mode, rootdirs):
 | 
						|
    """ Performs pylint on all python files within given root directory (recursively).  """
 | 
						|
    filenames = []
 | 
						|
    for rootdir in rootdirs:
 | 
						|
        for rootpath, _, filenames_w in walk(rootdir):
 | 
						|
            for filename in filenames_w:
 | 
						|
                if filename.endswith('.py'):
 | 
						|
                    filenames.append(path.join(rootpath, filename))
 | 
						|
 | 
						|
    checked_count = 0
 | 
						|
    failed = []
 | 
						|
    for filename in filenames:
 | 
						|
        checked_count += 1
 | 
						|
        cmdline = "pylint --rcfile=\"{}\" \"{}\"".format(PYLINT_RCFILE, filename)
 | 
						|
        print("{}[{}/{}] Running pylint on file: {}{}".format(SGR_INFO, checked_count, len(filenames),
 | 
						|
                                                              filename, SGR_CLEAR))
 | 
						|
        exit_code = system(cmdline)
 | 
						|
        if exit_code != 0:
 | 
						|
            if dev_mode:
 | 
						|
                return 1, checked_count
 | 
						|
            failed.append(filename)
 | 
						|
 | 
						|
    return len(failed), len(filenames)
 | 
						|
 | 
						|
def main():
 | 
						|
    """ Collects all python script root dirs and runs pylint on them. You can optionally
 | 
						|
        pass `-d` as command line argument to let this script abort on first error. """
 | 
						|
    dev_mode = len(argv) == 2 and argv[1] == "-d"
 | 
						|
    failed_count, total_count = pylint_all_filenames(dev_mode, [
 | 
						|
        path.abspath(path.dirname(__file__) + "/../docs"),
 | 
						|
        path.abspath(path.dirname(__file__) + "/../scripts"),
 | 
						|
        path.abspath(path.dirname(__file__) + "/../test")])
 | 
						|
    if failed_count != 0:
 | 
						|
        exitwith("pylint failed on {}/{} files.".format(failed_count, total_count))
 | 
						|
    else:
 | 
						|
        print("Successfully tested {} files.".format(total_count))
 | 
						|
 | 
						|
if __name__ == "__main__":
 | 
						|
    main()
 |