git代码空行、注释分析与统计
2020-10-22 16:13
2076 查看
在做一个项目时,需要分析git上代码有效提交行数,即:添加的行数 - 空行 - 注释行,网上未找到支持多种语言的分析代码,自己写了段代码分享出来。
该代码接收两个参数。filepath变更的文件名称, 文件的变化内容(可以通过git diff {commit_id} 查看)
该段代码特点:
- 通过filepath的后缀,判断文件里包含的语言
- 获取该次提交的代码,里面注释和空行的增加数和删除数
- 支持文件类型,py,sh,java,rb,vue,html,js,xml,sql,css等
- 如果需要支持更多的语言代码分析,在luanges里加入对应的key即可,single代表单行注释,multi代表多行注释。
def get_commit_diff_comment_rows(filepath,diff): endfix = filepath.split("/")[-1].split('.')[-1] diff_rows = diff.split("\n") if len(diff_rows) < 3: return {} luanges={ 'py':{ 'single':'#', 'multi_start':["'''",'"""'], 'multi_end':["'''",'"""'] }, 'java':{ 'single':'//', 'multi_start':["/*"], 'multi_end':["*/"], }, 'js':{ 'single':'//', 'multi_start':["/*"], 'multi_end':["*/"], }, 'vue':{ 'single':'//', 'multi_start':["<!--",'/*'], 'multi_end':["-->","*/"], }, 'html':{ 'single':'//', 'multi_start':["<!--",'/*'], 'multi_end':["-->","*/"], 4fc0 }, 'jsx':{ 'multi_start':["/*","{/*"], 'multi_end':["*/","*/}"], }, 'less':{ 'single':'//', 'multi_start':["/*"], 'multi_end':["*/"], }, 'rb':{ 'single':'#', 'multi_start':["=begin"], 'multi_end':["=end"], }, 'yml':{ 'single':'#', }, 'xml':{ 'multi_start':["<!--"], 'multi_end':["-->"], }, 'sql':{ 'single':'--', 'multi_start':["/*"], 'multi_end':["*/"], }, 'sh':{ 'single':'#', }, 'css':{ 'multi_start':["/*"], 'multi_end':["*/"], }, } luange = luanges.get(endfix) if not luange: return {} single_start = luange.get("single") multi_start = luange.get("multi_start") multi_end = luange.get("multi_end") comment_add = 0 comment_del = 0 empty_add = 0 empty_del = 0 block_comment_flag=False #块注释默认为空 for row in diff_rows: if row.startswith("---") or row.startswith("+++") or row.startswith("@@"): continue if row.startswith("+"): node_type = '+' elif row.startswith("-"): node_type = '-' else: continue row = row[1:].strip() if row == '': if node_type == '+': empty_add += 1 elif node_type == '-': empty_del += 1 else: add_number = 0 if single_start: if row.startswith(single_start): add_number = 1 if multi_start: for i in multi_start: if row.startswith(i): add_number = 1 block_comment_flag=True if multi_end: for i in multi_end: if row.endswith(i): add_number = 1 block_comment_flag=False if block_comment_flag: add_number = 1 if node_type == '+': comment_add += add_number elif node_type == '-': comment_del += add_number return {"comment_add":comment_add, "comment_del":comment_del, "empty_add":empty_add, "empty_del":empty_del }
相关文章推荐
- PHP统计目录下的文件总数及代码行数(去除注释及空行)
- 每天一个python小程序 007有个目录,里面是你自己写过的程序,统计一下你写过多少行代码。包括空行和注释,但是要分别列出来。
- 用python统计代码行的示例(包括空行和注释)
- Python 练习 06 有个目录,里面是你自己写过的程序,统计一下你写过多少行代码。包括空行和注释
- PHP统计目录下的文件总数及代码行数(去除注释及空行)
- python写的统计PYTHON文件的(代码行数,空行数,注释行数)小程序
- 第 0007 题: 有个目录,里面是你自己写过的程序,统计一下你写过多少行代码。包括空行和注释,但是要分别列出来。
- Python Show-Me-the-Code 第 0007 题 统计代码行数(注释,空行,总行数)小程序
- Python练手小程序—统计目录下Python脚本的代码注释空行数量
- 利用正则表达式实现统计代码中的注释行、空行、以及代码行的数量。
- 统计文件有多少行代码。包括空行和注释
- python 统计一个目录下代码的行数、空行和注释
- 【Git】git代码统计分析工具-gitstats
- 统计java代码文件的代码行数(空行、注释不能计数)
- Python实现代码统计(代码+注释+空行)
- JAVA统计代码行数的简单代码,很准确,去掉注释,空行等
- python统计代码空行与注释
- 用python统计代码行(包括空行和注释)
- 第 0007 题:有个目录,里面是你自己写过的程序,统计一下你写过多少行代码。包括空行和注释,但是要分别列出来。
- 第 0007 题:有个目录,里面是你自己写过的程序,统计一下你写过多少行代码。包括空行和注释,但是要分别列出来。