gpt4 book ai didi

python - 我可以只对更改的代码执行静态分析吗?

转载 作者:行者123 更新时间:2023-12-04 17:15:51 26 4
gpt4 key购买 nike

我正在处理大量的代码库,我们正在全公司范围内开始努力实现静态类型化。我知道可以做 gradual typing .虽然我们不想花费时间和精力对整个代码库进行静态类型化,但我们也希望对代码库的任何更改(新代码或修改后的代码)进行正确类型化,并希望添加某种 CI 步骤来插入朝这个方向发展。

我指的不是像 MonkeyType 这样的解决方案,它试图为代码库起草类型注释。理想的解决方案是能够在 CI 管道中运行 mypy 以对所有已更改的对象进行静态分析。例如,考虑这段代码:

# main.py
"""
Legacy code that's dynamically typed
"""

MAX_LOOPS = 10
logger = ...


class Multiplier:
def __init__(...):
...

def __call__(self, left, right):
return left * right

def save(self):
...


def main(value, loops):
multiplier = Multiplier()
for ix in range(loops):
value = multiplier(value, ix)

return value

如果我创建一个 PR 来更改 MAX_LOOPS 的值,那么我必须对其进行类型提示,但我不必为 logger< 添加类型提示/em>、Multiplier 类或 main 方法。如果我更改了 main 方法签名,我只需键入 hint 其签名(但可能不是主体,尽管要求它也可能有用),等等。

我调查了 pre-commit钩子(Hook),但它需要每个开发人员进行一些设置,而且我似乎只能让它在文件级别工作(即:对整个修改后的文件运行静态分析,即使只有一行被更改)。

如果这不可能,我目前正在考虑更新 CI 管道以对旧文件使用更宽松的静态分析,并对任何新文件使用更严格的静态分析(例如:从今天开始创建的文件应该是完全静态类型化,旧文件上的任何类型注释都应该是连贯的)。

它并没有完全满足我的要求,但它可能是避免过度使用它的最佳解决方案。有没有人有处理这个问题的经验?

最佳答案

你可以试试Scanyp为了这个需要。它允许您比较代码库的两个版本并只关注新代码。

enter image description here

关于python - 我可以只对更改的代码执行静态分析吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68741395/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com