https://github.com/Trim21/find-trailing-comma
好几次不小心在句尾多敲了一个逗号,半天 debug 不出问题。
找了一圈又没有任何一个 lint 工具或者格式化工具能帮我。
迫于无奈自己写了一个
a = 1, # not ok
b = 1, # not ok
d = (1, ) # ok
c = {1, 2,
3, 4}, # not ok
只有在下面两个条件都满足的情况下才会报错
这是我唯一想到的可能会引起问题的写法
这是一个用在 pre-commit
中的钩子,如果你想要使用请参照文档 https://pre-commit.com/
在项目的.pre-commit-config.yaml
添加如下配置,就可以生效了
- repo: https://github.com/Trim21/find-trailing-comma
rev: v0.0.1
hooks:
- id: find-trailing-comma
效果如下
Find trailing commas.....................................................Failed
hookid: find-trailing-comma
my_project/cli.py:533 has single element tuple with no brackets "a = 1,"
只支持 python3,python2 未经测试,说不定也能跑
1
omph 2019-05-19 12:28:09 +08:00
确实是坑
("abc")和("abc",) 遍历一下试试 |
2
thechosenone 2019-05-19 12:33:24 +08:00
写 python 加逗号那你要解决的不仅仅是检查 tuple 了
|
3
Trim21 OP @omph #1 这两个是不会报错的,前一个不是 tuple,后一个有括号
你说我还以为出 bug 了。。。 @thechosenone #2 其他能加括号而不造成语法错误的情况不会造成什么严重后果,比如函数参数和字典内最后的括号,顶多影响一下格式化插件的行为。 |
4
thechosenone 2019-05-19 13:08:09 +08:00
@Trim21 你 sqlalchemy 定义表的时候每行加逗号试试
|
5
Trim21 OP @thechosenone #4 没能理解,我不太熟悉 sqlalchemy,举个例子?
不太清楚你说的是 Table 还是 declarative_base ?前者是函数调用或者类实例化,最后有没有逗号无所谓。 后者是定义类的属性,加逗号的话属性的类型就会从原本的值变成一个 tuple,这本来就是我写这个东西想要避免发生的情况。 |
6
guyskk0x0 2019-05-19 13:39:31 +08:00 via Android
好东西,曾经就被坑过。考虑 PR 到 flake8, pycodestyle 吗
|
7
Trim21 OP @guyskk0x0 考虑过,只是现在还没太有时间,感觉要向大开源项目提 PR 要做的事情太多了(他们还不一定能合并)。
但是现在这样写个 pre-commit 的钩子随意性就强很多了,我连 ci 和单元测试都没写😂 因为我主要目的是用在另一个项目里,所以现在都是粗放的人肉测试的… |
8
wzw 2019-05-20 07:44:12 +08:00 via iPhone
也坑过,好东西
|
9
thechosenone 2019-05-21 08:24:28 +08:00
@Trim21 我说的是 declarative_base,确实也符合你说的这种情况
|