如何在 VS 代码中关闭对选定文件、glob 或类似文件的排序导入?
How to turn off Sort Imports for a selection of files, glob or similar in VS Code?
我正在尝试在 python 中模拟导入以进行测试。我的代码看起来像这样。
"""Python file description."""
import sys
import pytest
import datetime as dt
from unittest.mock import Mock
sys.modules['module_A'] = Mock()
from module_to_test import function_to_test
我需要将 module_A
模拟为 module_to_test
的依赖项。
保存时,VSCode 自动按字母顺序排序,结果在尝试从具有依赖项的模块导入后创建 Mock。
如何防止排序导入对文件子集进行排序?这可能是通过文件列表、glob、正则表达式或类似的?
测试文件的全局模式./tests/test_*.py.
更新 - 下面发布了部分解决方案。
我认为您不必担心导入的排序问题。 Mock 应该处理它,您的测试应该使用 mock
模块提供的上下文管理器或装饰器,而不是自己直接分配 Mock
对象。
看看“patch”。
另请参阅“where to patch”
目前,您无法通过特定于 VS 代码的设置(打开或关闭)关闭每个模块级别的导入排序。它需要 isort 本身以某种方式支持它。
这里的问题来自 autopep8 规则在保存时 运行。具体来说,规则 E402,它要求首先进行所有导入。
虽然我无法将 VS Code 或其任何包添加到 运行 a 文件子集,但我确实找到了排除 autopep8 规则子集的解决方案。这是 settings.json
条目的样子,
"python.formatting.provider": "autopep8",
"python.formatting.autopep8Args": [
"--ignore",
"E402"
],
有关详细信息,请参阅 。
如果你的 VSCode 配置像我一样使用 isort(不是 autopep8)进行导入排序,那么你可以像这样有选择地覆盖它:
app = Flask(__name__)
from . import views # isort:skip
即添加# isort:skip
注释到您不想跳转到文件顶部的导入。
来源:https://github.com/timothycrosley/isort#skip-processing-of-imports-outside-of-configuration
VS Code 在保存时运行 autopep8,您可以在行尾添加 # noqa
或 # nopep8
注释以从中排除该行checking/sorting:
sys.modules['module_A'] = Mock()
from module_to_test import function_to_test # noqa
我正在尝试在 python 中模拟导入以进行测试。我的代码看起来像这样。
"""Python file description."""
import sys
import pytest
import datetime as dt
from unittest.mock import Mock
sys.modules['module_A'] = Mock()
from module_to_test import function_to_test
我需要将 module_A
模拟为 module_to_test
的依赖项。
保存时,VSCode 自动按字母顺序排序,结果在尝试从具有依赖项的模块导入后创建 Mock。
如何防止排序导入对文件子集进行排序?这可能是通过文件列表、glob、正则表达式或类似的?
测试文件的全局模式./tests/test_*.py.
更新 - 下面发布了部分解决方案。
我认为您不必担心导入的排序问题。 Mock 应该处理它,您的测试应该使用 mock
模块提供的上下文管理器或装饰器,而不是自己直接分配 Mock
对象。
看看“patch”。
另请参阅“where to patch”
目前,您无法通过特定于 VS 代码的设置(打开或关闭)关闭每个模块级别的导入排序。它需要 isort 本身以某种方式支持它。
这里的问题来自 autopep8 规则在保存时 运行。具体来说,规则 E402,它要求首先进行所有导入。
虽然我无法将 VS Code 或其任何包添加到 运行 a 文件子集,但我确实找到了排除 autopep8 规则子集的解决方案。这是 settings.json
条目的样子,
"python.formatting.provider": "autopep8",
"python.formatting.autopep8Args": [
"--ignore",
"E402"
],
有关详细信息,请参阅
如果你的 VSCode 配置像我一样使用 isort(不是 autopep8)进行导入排序,那么你可以像这样有选择地覆盖它:
app = Flask(__name__)
from . import views # isort:skip
即添加# isort:skip
注释到您不想跳转到文件顶部的导入。
来源:https://github.com/timothycrosley/isort#skip-processing-of-imports-outside-of-configuration
VS Code 在保存时运行 autopep8,您可以在行尾添加 # noqa
或 # nopep8
注释以从中排除该行checking/sorting:
sys.modules['module_A'] = Mock()
from module_to_test import function_to_test # noqa