def find_forms(graph): # first try to do a wide sweep finding all forms in codebase # this is to find forms that are pulled in from dcus which cannot be # traced projfile = os.path.join(graph.abspath, graph.rootnode.path, graph.rootnode.filename) if projroot: io.write_next_action("Finding all forms in %s" % projroot) forms = io.ifind(projroot, "*.dfm") io.write_result("Found [%s]" % ", ".join(forms)) if forms: return forms # otherwise just return all the forms in the graph forms = graph.rootnode.collect_nodes(lambda n: n.filetype == FileTypes.Form) forms = map(lambda n: os.path.join(graph.abspath, n.path, n.filename), forms) return forms
def do_prune(projectroot_path, fileindex): fps = io.ifind(projectroot_path, '*') fps = sorted(fps, key=lambda fp:fp.lower()) fps = map(lambda fp: io.relpath(fp, relative_to=projectroot_path), fps) # filter out .git/* fps = filter(lambda fp: not re.match('(?i)\.git', fp), fps) filelist = filter(lambda fp: os.path.isfile(fp), fps) dirlist = filter(lambda fp: os.path.isdir(fp), fps) for fp in filelist: if not fileindex.has(fp): print('DELETE: %s' % fp) os.unlink(fp) # else: # print('KEEP : %s' % fp) for fp in dirlist: try: os.removedirs(fp) print('RMDIR : %s' % fp) except: pass
import os import re import sys from delpy import io from delpy import finders def find_types(fp): iden = '[a-zA-Z]+(\.[a-zA-Z]+)*' # namespaced rx = '(?P<subtype>%s)' % iden rx += '\s+=\s+' rx += 'class\s*' rx += '([(](?P<supertype>%s)[)])?' % iden s = open(fp).read() s = finders.find_stripComments(s) fp = os.path.basename(fp) (stem, _) = os.path.splitext(fp) for m in re.finditer(rx, s): subtype = m.group('subtype') supertype = m.group('supertype') or 'TObject' subtype = '%s.%s' % (stem, subtype) print("%-50.50s: %s" % (subtype, supertype)) if __name__ == '__main__': codebase = sys.argv[1] units = io.ifind(codebase, '*.pas') units.extend(io.ifind(codebase, '*.dpr')) for unit in units: find_types(unit)