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()
 |