如何在该行代码中永久地沉默一个或多个问题

82 阅读2分钟

在你的代码中,并非每一个违反代码惯例的行为都是你想采取的行动。以Python中的一个例子为例--mark_safe ,这个函数认为所有传递的输入都是有效的,在处理用户输入的视图中会出现安全漏洞。但如果在用户输入被保证为可信的环境中使用,它就完全合理了。管理员视图是这方面的一个完美例子。DeepSource对这种违规行为提出了一个问题,不管它在什么环境下使用。

在最新的版本中,我们引入了一个新的关键字,你可以把它作为注释添加到你的代码中。这将允许你在该行代码中永久地沉默一个或多个问题。

迎接,skipcq (代表跳过 连续 质量)--一种统一的方式来沉默源代码中的问题,在DeepSource上所有可用的分析器上都能工作。这个特殊的关键字可以作为注释的一部分,在发生违规的同一行或周围行中使用,以使其沉默。

沉默一个特定的问题

skipcq 作为注释与问题的短代码一起添加到该行的末尾,或添加到它上面的一行,以压制该问题:

input = 10  # skipcq: PYL-W0622
# skipcq: PYL-W0622
input = 10

这样做将抑制这一行的PYL-W0622 ,因为内置的函数input 已经被重新定义。

压制多个问题

要使一行中的多个问题保持沉默,请在skipcq: 关键字后面添加一个逗号分隔的问题短代码列表:

def function(input, an_argument_not_used):  # skipcq: PYL-W0622, PYL-W0613
    pass
# skipcq: PYL-W0622, PYL-W0613
def function(input, an_argument_not_used):
    pass

使一行中的所有问题保持沉默

要使某一行可能提出的所有问题保持沉默,只需在该行对应的注释中使用关键字skipcq

except Exception:  # skipcq
    pass
# skipcq
except Exception:
    pass

不过需要注意的是--这将阻止所有问题在这一行被提出,这可能不是你想要的。我们建议对你想抑制的问题明确使用这个关键词。

好问题!只要在你对该行的评论末尾加上skipcq

class Klass:
    def __init__(self):
        pass

    def func(self, x):  # This function does not use `self`. Hence an issue will be raised. Lets ignore it. skipcq
        return x ** 2

如果skipcq ,你可以在相关行的上方放置尽可能多的注释或换行符:

class Klass:
    def __init__(self):
        pass

    # skipcq
    # This function does not use `self`.
    # Hence an issue will be raised. Lets ignore it.
    def func(self, x):
        return x ** 2

我们对这个版本感到非常兴奋,我们希望它有助于减少假阳性,并使您能够轻松地调整DeepSource的结果以适应您的环境,这样您就可以做您最擅长的事情--发布好的代码。