-
Notifications
You must be signed in to change notification settings - Fork 5.6k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
pylint docstring checker 不工作原因及可能的解决方案 #47821
Comments
This comment was marked as off-topic.
This comment was marked as off-topic.
@Ligoml 这里我整理了下 pylint 存在的问题及可能的修复方式,可能对规范 docstring 格式 / 内容有所帮助 PS: 这个原本是想和 cpplint 一起修的,flake8 tracking issue 里也一直放着这个的 TODO,但也因为上面所说的,存量很难修,所以暂时没有管 |
收到,很有用的信息~ |
Since you haven't replied for more than a year, we have closed this issue/pr. |
问题描述 Please describe your issue
目前 Paddle 的 pre-commit hooks 里是有 pylint 的,见
Paddle/.pre-commit-config.yaml
Lines 77 to 84 in 7c30253
这是一个 local hook,hook 源码见
Paddle/tools/codestyle/pylint_pre_commit.hook
Lines 1 to 25 in 7e91438
其实就是关闭所有的 pylint 内置规则,仅仅启用了本地自己写的 docstring_checker 规则
https://github.com/PaddlePaddle/Paddle/blob/develop/tools/codestyle/docstring_checker.py
具体规则可见:
Paddle/tools/codestyle/docstring_checker.py
Lines 122 to 159 in 7e91438
简单来说就是对函数有无 docstring、docstring 长度、包含字段等等做出了一些限制(比如含
return
语句的函数、类其 docstring 必须包含Returns
字段,包含raise
语句的则必须包含Raises
等等,其实这个已经与现有的文档规范不一致了)该 hook 于 #9848 最开始引入并在本地仅起到提示的作用,而在 #11351 正式启用,当时应该是可以在 CI 正确拦截有问题的 docstring 的
之后不清楚什么时候 CI 逻辑修改了导致该 hook 在 CI 上完全失效,cpplint hook 也有相似问题(见 #46102 (comment) ),这个问题在 #46136 修复了,其实 cpplint 问题还好,至少本地是 work 的,只是 CI 不 work 而已,而 pylint hook 因为直接使用 git diff 获得改动的文件,在 git 工作区干净的情况下是不会有任何输出的,而我们 commit 时绝大多数情况工作区都是干净的,简单来说,就是本地、CI 基本都不 work
因此 pylint docstring 的存量问题……很吓人,我们可以通过以下方式大概看一下存量:
pip install pylint==2.12.0 cd tools/codestyle pylint --disable=all --load-plugins=docstring_checker \ --enable=doc-string-one-line,doc-string-end-with,doc-string-with-all-args,doc-string-triple-quotes,doc-string-missing,doc-string-indent-error,doc-string-with-returns,doc-string-with-raises ../../python
唔,也就 17000+ 行输出吧……
这样的话直接启用肯定不可取,但如果修改一下脚本也许可以考虑一下,比如:
或者我们可以考虑直接按照新的需求重写一下
不过就算启用,修存量也是一件痛苦的事情,对于 docstring,我还没有找到一个比较合适的自动化修复工具,这意味着可能很大程度依赖于手动修复 / 自己写脚本
此外说一个算是有点相关的问题,Call-for-contribution - IDEA:iScan 流水线退场 中提到了可能会考虑 PR-CI-iScan-Python 的替代方式,如果考虑在 pre-commit 中的 pylint 来替代的话,就需要考虑开启其他规则,因此想要用 pylint 替代该流水线可能需要先修复下 pylint hook 的问题
The text was updated successfully, but these errors were encountered: