我想提取特定文件的所有添加注解行。为了做到这一点,我用tokenize和ast提取所有评论。此外,我将从git show commit -- pathfile
中获取此文件的所有添加行。
我很难获得添加的评论行,尤其是如果它们只是空行。我的匹配代码如下所示:
addedCommentLinesPerFile = []
for commentline in parsedCommentLines:
for line in addedLinesList:
if commentline == line or commentline in line:
try:
parsedCommentLines.remove(commentline)
addedLinesList.remove(line)
except ValueError:
continue
addedCommentLinesPerFile.append(commentline)
假设我的文件是这样的:
def function():
+ print("hello") #prints hello
+
"""
foo
"""
因此,列表如下所示:
parsedCommentLines = ["#prints hello","foo",""]
addedLinesList = [' print("hello") #prints hello',""]
期望的输出将是:
addedCommentLinesPerFile = ["#prints hello"]
但我会得到:
addedCommentLinesPerFile = ["#prints hello",""]
1条答案
按热度按时间ar7v8xwq1#
commentline in line
:如果注解行为空,则将始终返回True
,并且无论line
如何,都将正常工作。如果您想首先匹配与完全匹配的行,然后尝试查看现有行是否是其余行的子部分,您至少可以编写两个循环
第一个只匹配
if commentline == line:
,第二个匹配m1n 4o1p在检查
commentline in line
之前,您可能需要检查m1n 5o1p上的额外条件:最小长度,非白色字符。。。如果要检查
# one line comment
是否位于字符串*的末尾,请写下:commentline
是否以#
开头if line.endswith(commentline)
另一种方法可以是生成两个仅包含注解行的文件,并比较这两个文件以查看注解是如何修改的。
在git方面:
commit
影响的文件,可以使用:**之前的文件内容:
**之后的文件内容:
从这两个内容中,您可以使用代码提取注解
/tmp/comments.before
和/tmp/comments.after
),然后运行diff /tmp/comments.before /tmp/comments.after
diff
类算法的库