PEP8 插件破坏了我在 Sublime 3 中的类型提示代码
PEP8 plugin breaks my Type Hint code in Sublime 3
我必须禁用保存设置时的格式,因为 Python PEP8 Autoformat 插件重新格式化了我的代码,导致语法错误。
我的代码(关注最后一行):
from typing import List, Tuple
from my_enent import MyEvent
def my_preprocessor(raw_event, context: object, env: MyEnv) \
-> Tuple[dict, VideoFreezeEvent]:
if isinstance(raw_event, dict) and 'Output' in raw_event:
# comments
raw_state_machine_event = json.loads(raw_state_machine_event['Output'])
# comments
parallel_outputs = raw_state_machine_event.get(
'my_data').get('parallel_outputs')
if len(parallel_outputs) > 0:
state_machine_event = parallel_outputs[0]
my_list: List[MyEvent] = [
my_util.populate_dataclass(MyEvent, event)
for event in parallel_outputs
]
another_event = events_list[0]
插件重新格式化代码后,导致语法错误的相关代码部分变为:
if len(parallel_outputs) > 0:
state_machine_event = parallel_outputs[0]
my_list:
List[MyEvent] = [
my_util.populate_dataclass(MyEvent, event)
for event in parallel_outputs
]
another_event = events_list[0]
我怎样才能 prevent/teach 插件不破坏此代码?
一些包设置可能是通过的方式,如果首先存在一段:
{
// list codes for fixes; used by --ignore and --select
"list-fixes": false,
// do not fix these errors / warnings (e.g. [ "E501" , "E4" , "W"])
"ignore": [],
// select errors / warnings (e.g. ["E4", "W"])
"select": [],
// Maximum line length
"max-line-length": 79
}
您的 linter 听起来已经过时了,因为它无法识别 walrus operator :=
or your type annotations. Looking at the plugin's Package Control page,您可以在顶部看到“MISSING” ,这意味着源代码 repo 已经消失,很可能是因为它不再被维护了。该软件包最后一次修改是在 5 年前,并且没有最近的安装,因此有很强的证据证明它已经死了。
作为替代插件,我强烈推荐 Anaconda
(与 Anaconda Python 发行版无关)。它工作得很好(大部分),正在积极开发中,经常更新、错误修复和新功能,并与 linting/autoformatting 一起完成代码完成和代码智能。该网站介绍了您需要进行的所有配置,以及如何关闭和打开不同的功能。有几个不同的 linting/formatting 选项可供选择,包括 AutoPEP8、PyFlakes 和 PyLint。非常喜欢
(不,我与它或其作者没有任何关联。)
我通过pip安装了Black,使用了sublack Sublime插件,看起来运行很顺利
MattDMo 建议的 Anaconda Sublime 插件很酷,但有点慢(至少在默认设置下),我的任何 Mac 笔记本电脑都是相当新的。
我找到了解决方法。转到插件设置(首选项 -> 包设置 -> Python PEP8 自动格式 -> ...),添加忽略规则,例如:
{
// Workaround for typing hints
"ignore": ["E701"],
}
我猜它忽略了这个警告:https://www.flake8rules.com/rules/E701.html
好像危害不大。
我必须禁用保存设置时的格式,因为 Python PEP8 Autoformat 插件重新格式化了我的代码,导致语法错误。
我的代码(关注最后一行):
from typing import List, Tuple
from my_enent import MyEvent
def my_preprocessor(raw_event, context: object, env: MyEnv) \
-> Tuple[dict, VideoFreezeEvent]:
if isinstance(raw_event, dict) and 'Output' in raw_event:
# comments
raw_state_machine_event = json.loads(raw_state_machine_event['Output'])
# comments
parallel_outputs = raw_state_machine_event.get(
'my_data').get('parallel_outputs')
if len(parallel_outputs) > 0:
state_machine_event = parallel_outputs[0]
my_list: List[MyEvent] = [
my_util.populate_dataclass(MyEvent, event)
for event in parallel_outputs
]
another_event = events_list[0]
插件重新格式化代码后,导致语法错误的相关代码部分变为:
if len(parallel_outputs) > 0:
state_machine_event = parallel_outputs[0]
my_list:
List[MyEvent] = [
my_util.populate_dataclass(MyEvent, event)
for event in parallel_outputs
]
another_event = events_list[0]
我怎样才能 prevent/teach 插件不破坏此代码?
一些包设置可能是通过的方式,如果首先存在一段:
{
// list codes for fixes; used by --ignore and --select
"list-fixes": false,
// do not fix these errors / warnings (e.g. [ "E501" , "E4" , "W"])
"ignore": [],
// select errors / warnings (e.g. ["E4", "W"])
"select": [],
// Maximum line length
"max-line-length": 79
}
您的 linter 听起来已经过时了,因为它无法识别 walrus operator :=
or your type annotations. Looking at the plugin's Package Control page,您可以在顶部看到“MISSING” ,这意味着源代码 repo 已经消失,很可能是因为它不再被维护了。该软件包最后一次修改是在 5 年前,并且没有最近的安装,因此有很强的证据证明它已经死了。
作为替代插件,我强烈推荐 Anaconda (与 Anaconda Python 发行版无关)。它工作得很好(大部分),正在积极开发中,经常更新、错误修复和新功能,并与 linting/autoformatting 一起完成代码完成和代码智能。该网站介绍了您需要进行的所有配置,以及如何关闭和打开不同的功能。有几个不同的 linting/formatting 选项可供选择,包括 AutoPEP8、PyFlakes 和 PyLint。非常喜欢
(不,我与它或其作者没有任何关联。)
我通过pip安装了Black,使用了sublack Sublime插件,看起来运行很顺利
MattDMo 建议的 Anaconda Sublime 插件很酷,但有点慢(至少在默认设置下),我的任何 Mac 笔记本电脑都是相当新的。
我找到了解决方法。转到插件设置(首选项 -> 包设置 -> Python PEP8 自动格式 -> ...),添加忽略规则,例如:
{
// Workaround for typing hints
"ignore": ["E701"],
}
我猜它忽略了这个警告:https://www.flake8rules.com/rules/E701.html 好像危害不大。