Python之自动生成代码继承关系

本文介绍了如何使用Python自动化地生成代码之间的继承关系图,帮助开发者更好地理解和管理复杂的代码结构。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

## 自动化生成代码继承关系


import os,sys,re

import shutil,string



#[OK]

gCount = 0

def getList(dirname,pFunc):

    global gCount

    try:

        ls=os.listdir(dirname)

    except:

        print dirname,'is access deny'

    else:

        for file in ls:

            temp = os.path.join(dirname,file)

            if(os.path.isdir(temp)):

                getList(temp,pFunc)

            else:

                gCount = gCount + 1

                if re.search(r'.h$',file):

                    pFunc(dirname,file)

#[OK]

def loadSiteList(file):

    file = open(file,"r")

    sites = file.readlines()

    return sites

#[OK]

def removeBR(site):

    result = re.search(r'\n',site)

    if result:

        return site.replace('\n','')

    return site

#[OK]

def process(dirname,file):

    global gCount

    #[1]

    #print '[%d]->%s' % (gCount,file)

    #[2]

    path = os.path.join(dirname,file)

    list = loadSiteList(path)

    #[3]

    for str in list:

        parseString(str,path)

#[OK]

def getRenderObject(str):

    res = re.search('[^<]?\s*class\s+(Render\w+)\s*[^\;\w,]',str)

    if res:

        return res.group(1)

    return None

#[OK]

def getParent(str):

    res = re.search(':\s*public\s+(\w+)\s*',str)

    if res:

        return res.group(1)

    return None

#[Test]

objList = []

objInfo = {}

urlList = {}

def parseString(str,path):

    global objList,objInfo

    str = removeBR(str)

    obj = getRenderObject(str)

    if obj != None:

        if obj in objList:

            #print "%s has exist in list" % (obj)

            return

        else:

            objList.append(obj)

            urlList[obj] = path

            objInfo[obj] = getParent(str)

            #print '%s->%s' % (obj,objInfo[obj])

def link(dest,src):

    return '<a href="%s" target="_blank">%s</a>' % (dest,src)

def HeadLink(dest,src):

    return '<a href="%s" style="color:red;font-weight:bold;" target="_blank">%s</a>' % (dest,src)

def link_form(dest):

    return '-->%s' % (dest)

def getPath(obj):

    global objList,objInfo,urlList

    if obj in objList:

        return urlList[obj]

    else:

        return "#"

#[OK]

def showResult():

    global objList,objInfo,urlList

    for obj in objList:

        tmp = obj

        print HeadLink(getPath(tmp),tmp),

        while tmp:

            parent = objInfo[tmp]

            print link_form( link(getPath(parent) ,parent) )

            if parent in objList:

                tmp = parent

            else:

                tmp = None

        print '<hr>'



getList(os.path.join(os.getcwd(),"src"),process)

#print "++++++++++++++++++++++++++++++++++++++++++++++"

print '<div style="width:1700;border:1px red solid;">'

showResult()

print '</div>'


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值