#!/usr/bin/python3 """ simple source-code line count script, used for dev metrics only [2.2] """ import os, glob, sys srcenc = 'utf8' # allow for Unicode source files def collect(paths): manifest = [] for path in paths: manifest += glob.glob(path.replace('/', os.sep)) return manifest # the basics sources = ('*.py', '*.pyw', '*.bat') # files here # imported tools from PP4E, many updated much for 2.2 pkg = '../../..' sources += ( pkg + '/PP4E/Gui/Tools/guimaker.py', # menus, toolbars pkg + '/PP4E/Gui/ShellGui/formrows.py', # input fields pkg + '/PP4E/Gui/Tour/scrolledlist.py', # grep list pkg + '/PP4E/Tools/find.py', # grep walk pkg + '/PP4E/launchmodes.py' # run code exec ) # app/exe/src build scripts count too (but skip iconify.py and tools/) sources += ('build/build-app-exe/build4.0/*.py',) sources += ('build/build-source/*.py',) # skip generated pyinstaller or py2app stdlib module list files skips = ('setup.py', 'hook-os.py') tally = count = 0 for fname in collect(sources): # used files in this tree if (not fname.startswith('__') and # skip self and extras in '.' not fname.endswith(skips)): # skip generated stdlib lists fobj = open(fname, encoding=srcenc) # else do os.path.basename() lcnt = len(fobj.readlines()) tally += lcnt count += 1 print(f'{fname} => {lcnt:,}') print(f'Total sloc in {count} files (sans docs): {tally:,}') if sys.platform.startswith('win'): input('Press Enter') # if clicked on Windows """ ================================================================================ Example output (current counts/manifest): textEditor.py => 6,742 multiprocessing_exe_patch.py => 180 fixfrozenpaths.py => 453 subprocproxy.py => 415 textConfig.py => 917 textEditorNoConsole.pyw => 12 pyedit.bat => 27 ../../../PP4E/Gui/Tools/guimaker.py => 730 ../../../PP4E/Gui/ShellGui/formrows.py => 71 ../../../PP4E/Gui/Tour/scrolledlist.py => 62 ../../../PP4E/Tools/find.py => 35 ../../../PP4E/launchmodes.py => 632 build/build-app-exe/build4.0/build.py => 894 build/build-app-exe/build4.0/_winver-maker.py => 23 build/build-app-exe/build4.0/include-full-stdlib.py => 116 build/build-source/build.py => 113 Total sloc in 16 files (sans docs): 11,422 ================================================================================ """