python - 防止自我分配的 pylint 保护
问题描述
我有这个测试文件:
"""module docstring"""
class Aclass:
"""class docstring"""
def __init__(self, attr=None, attr2=None):
self.attr = attr
self.attr2 = attr2
def __repr__(self):
return 'instance_of the Aclass {self.attr}.'
def __str__(self):
return 'The A with: {self.attr}.'
def init_a():
"""function docstring"""
a_inst = Aclass()
attr = 1
attr2 = 2
a_inst.attr2 = attr2
# should be: a_inst.attr = attr, but have a typo
attr = attr
我使用 pylint 检查它,输出显示一切正常。
$ pylint test.py
--------------------------------------------------------------------
Your code has been rated at 10.00/10 (previous run: 10.00/10, +0.00)
基于linting,我期望在软件语言中出现可疑使用的标志,因为我不知道这段代码什么时候a=1; a=a
有用。我想看到一些警告,例如:未使用的变量或自赋值等。有没有使用 pylint 的方法?(我知道 Pycharm 和 sonarqube)。声纳规则示例。
public void foo() {
int x = 3;
x = x;
}
Such assignments are useless, and may indicate a logic error or typo.
有关详细信息pylint
pylint 2.3.1
astroid 2.2.5
Python 3.6.5 (default, May 5 2019, 22:05:54)
[GCC 6.3.0 20170516]
更新已添加到版本pylint 2.4
解决方案
我查看了 Pylint 规则,但没有找到任何可以帮助您解决此问题的方法。我确实发现您可以编写自己的检查器并使用它制作 pylint :
$ pylint yourpieceofcode.py --load-plugins=checker
检查器.py:
from pylint.checkers import BaseChecker
from pylint.interfaces import IAstroidChecker
class SelfAssignChecker(BaseChecker):
__implements__ = IAstroidChecker
name = 'self-assign-returns'
priority = -1
msgs = {
'W5555': (
'Self assignment (%s).',
'self-assign',
'useless assignment.'
),
}
def visit_assign(self, node):
names = []
for child in node.get_children():
if not hasattr(child, 'name'):
return
if child.name not in names:
names.append(child.name)
else:
self.add_message("self-assign", node=node, args=child.name)
def register(linter):
linter.register_checker(SelfAssignChecker(linter))
医生在这里!:)
对您的文件进行了测试test.py
。输出 :
$ pylint --load-plugins=checker test.py
************* Module test
test.py:25:0: C0304: Final newline missing (missing-final-newline)
test.py:25:4: W5555: Self assignment (attr). (self-assign)
------------------------------------------------------------------
Your code has been rated at 8.57/10 (previous run: 9.29/10, -0.71)
皮林特版本:
$ pylint --version
pylint 2.3.1
astroid 2.2.5
Python 3.6.7 (default, Oct 22 2018, 11:32:17)
[GCC 8.2.0]
推荐阅读
- javascript - 如何在setAttribute java-script函数中动态添加输入类型范围拇指css
- javascript - React 路由器不会在刷新时呈现单个 id 路由
- sql - 如果行值被欺骗,则增加数字
- c++ - 如何解决堆栈“检测到粉碎”
- react-native - ImageBackground 不覆盖 resizeMode 重复的背景
- ocr - 使用 Sikuli 识别文本时的不一致
- javascript - 从 Docker 卷反应导入/使用图像(png)
- javascript - Mongo db 写命令
- flutter - 我的屏幕没有按要求跳转到下一个屏幕
- c# - 查询返回同一客户