代码中写注释会报错_用Python检查代码中的TODO、FIXME、XXX

我们写代码时,常常会写一个TODO的注释来表明这里还需要添加或完善功能(先集中精力完成重要的功能)。或者用FIXME来表明这里有一些小BUG(但现在不影响主要功能)。也可能会用XXX来表明这里还有改进的空间(但现在还不是时候)。这些额外注释的确是写code的小助手。但如果在Tapeout前忘了(或者漏掉)要完善或改进一些细节,倒有些可惜。代码太多、太长,谁记得有没有加过FIXME?!

今天我们来用Python写一段脚本检查代码中是不是有被遗忘的特殊注释。

需求分析

1. 可以指定要检查代码的目录

2. 只检查目录里的.v和.sv的文件,忽略其它文件

3. 支持TODO,FIXME,XXX三种特殊注释

4. 报错时显示文件与行号,方便后续修改

实现过程

通过命令行参数指定代码目录,如下:

 1import argparse
2
3if __name__ == '__main__':
4    cmdline_parser = argparse.ArgumentParser()
5    cmdline_parser.add_argument('-y', help='specify rtl dirs')
6    args = cmdline_parser.parse_args()
7
8    if args.y:
9        rtl = args.y
10    else:
11        rtl = 'rtl'

通过depth确定项目根目录,再拼接上指定的代码目录。用os.listdir()来获取代码目录中的所有有文件和子目录,再用for循环逐个判断是文件(os.path.isfile)还是子目录,如果是文件,再判断文件后缀是否是.sv或.v。

 1import os
2#...
3    dep = os.popen('depth').readlines()[0]
4    print('project root: {}\n'.format(dep))
5
6    rtlbasedir = dep + os.sep + rtl
7    rtlfiles = os.listdir(rtlbasedir)
8    for f in rtlfiles:
9        absf = rtlbasedir + os.sep + f
10        if os.path.isfile(absf):
11            if re.search(r'\.s?v$', f):
12                #check(absf)  

把文件路径传递给检查函数,打开文件,逐行检查有无TODO、FIXME、XXX等特殊注释。如果有,则报错Error: +lineno file,并打印出错行。

1def check(f):
2    print('Checking file: {}'.format(f))
3    with open(f, 'r') as lines:
4        lineno = 0
5        for l in lines:
6            lineno += 1
7            if re.search(r'(TODO|FIXME|XXX)', l):
8                print('Error: +{} {}'.format(lineno, f))
9                print('\t{}'.format(l))

最终效果

最终效果如下:

[bill@server script]$ ./rtl_check.py 
           TODO/FIXME/XXX Checker 1.0

Usage: python3 rtl_check.py -y rtl_dir_name
For example:
python3 rtl_check.py -y rtl

project root: ./../..

Checking file: ./../../rtl/ctrl.v
Checking file: ./../../rtl/process.v
Error: +83 ./../../rtl/process.v
      // TODO: may have no relationship with rim, need to confirm

Checking file: ./../../rtl/seq.v
Checking file: ./../../rtl/merge.v
Checking file: ./../../rtl/fifo.v
Checking file: ./../../rtl/wrapper.v
Error: +136 ./../../rtl/bist.v
      assign wr_clk = clk; //TODO: add clk gate

Error: +137 ./../../rtl/bist.v
      assign rd_clk = clk; //TODO: add clk gate

欢迎关注ExASIC

9d41986fa716db38230a4b87c16af42d.png

分享数字集成电路设计中的经验和方法

分享让工作更轻松

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值