Tandoor Recipes(recipes)PyCharm 开发环境配置指南:借助 File Watchers 实现保存时自动 Lint 与格式化

Tandoor Recipes(recipes)PyCharm 开发环境配置指南:借助 File Watchers 实现保存时自动 Lint 与格式化 Tandoor RecipesrecipesPyCharm 开发环境配置指南借助 File Watchers 实现保存时自动 Lint 与格式化【免费下载链接】recipesApplication for managing recipes, planning meals, building shopping lists and much much more!项目地址: https://gitcode.com/GitHub_Trending/re/recipes本文是一份面向 Tandoor Recipes 开源项目仓库根目录GitHub_Trending/re/recipes贡献者的 PyCharm 开发环境配置指南核心目标是在 PyCharm 中通过 File Watchers 插件把 flake8、isort、yapf、prettier 四款工具的检查与格式化动作绑定到保存文件这一事件上从而在提交 Pull Request 前自动消除风格问题。读完本文你将能复刻项目官方推荐的 PyCharm 工作流理解每款工具在仓库中的真实配置列宽、忽略规则、作用域等并掌握调试前端vue3/Vite与后端Django时的服务启动顺序。为什么要用 File Watchers从手动格式化到保存即格式化Tandoor Recipes 的 贡献指南 明确要求所有代码贡献者使用项目定义配置的四个工具来维持风格一致flake8Python 静态检查lintyapfPython 代码格式化isortimport 语句排序prettierVue 前端与文档的格式化指南也给出了手动格式化的兜底命令flake8 file.py --ignoreE501 | isort -q file.py | yapf -i file.py prettier --write file.vue但手动执行容易遗漏、效率低下。官方在 PyCharm 配置文档 中推荐的做法是利用 JetBrains 的 File Watchers 插件在保存文件的瞬间自动触发上述工具实现保存即检查、保存即格式化。其核心思路是——一个 watcher 只负责一个工具、一种文件类型通过程序 参数 作用域的组合精确控制触发条件lint 结果还可以通过自定义 Severity严重级别直接在编辑器中醒目展示。本文涉及的四个 watcher 与仓库配置文件一一对应flake8 读取根目录 .flake8isort 与 yapf 读取 pyproject.toml 中的[tool.isort]与[tool.yapf]段prettier 读取 .prettierrc 并受 .prettierignore 约束。理解了这些配置文件才能理解 watcher 参数为何这样书写。第一步安装 File Watchers 插件并关闭 BlackFile Watchers 是 JetBrains 的官方插件需手动安装打开File - Settings - Plugins搜索并安装File Watchers插件对应仓库文档 pycharm.md 中的指引重启 PyCharm 使插件生效。安装完成后在配置 watcher 之前还有一步关键操作关闭 Black 格式化器。原因是项目用 yapf 而非 Black 作为 Python 格式化工具两者若同时开启会产生冲突。打开File - Settings - Tools - Black确认 Use Black Formatter 在 On code reformat 与 On save 两个选项上都保持未勾选。值得注意的是尽管项目不使用 Black其 .flake8 中的extend-ignore仍保留了与 Black 兼容而需要的E203冒号前空白与W503二元运算符前换行两条规则可见仓库在工具选型上经过了细致的兼容性考虑。第二步配置 flake8 WatcherPython 静态检查flake8 watcher 负责在你保存.py文件时运行静态检查并把问题以可点击的格式显示在控制台。配置步骤打开File - Settings - Tools - File Watchers点击新建 watcher按下表配置。配置项取值NameFlake8 WatcherFile typePythonScopeCurrent File仅监控当前文件Program$PyInterpreterDirectory$\Scripts\flake8Arguments$FilePath$ --config $contentRoot$/.flake8Output paths to refresh$FilePath$Show consoleAlwaysOutput filters$FILE_PATH$:$LINE$:$COLUMN$: $MESSAGE$参数含义说明$PyInterpreterDirectory$PyCharm 当前 Python 解释器所在目录其后拼接\Scripts\flake8可精确定位到 flake8 的可执行文件Windows 路径写法Linux/macOS 下对应解释器 bin 目录中的 flake8。前提是 flake8 已安装在该解释器环境中。--config $contentRoot$/.flake8显式指定项目根目录的 .flake8 配置文件避免 flake8 向上层目录探测到无关配置。Output filters 中的$FILE_PATH$:$LINE$:$COLUMN$: $MESSAGE$用于把控制台输出解析成文件:行:列: 消息的结构使错误位置可以在编辑器中直接点击跳转。仓库根目录 .flake8 的核心内容如下这些规则就是 flake8 watcher 在保存时实际执行的检查依据[flake8] extend-ignore E203, # Whitespace before : - Required for black compatibility W503, # Line break occurred before a binary operator - Required for black compatibility E712 # Comparison to False should be if cond is False: or if not cond: exclude .git, **/__pycache__, **/*.pyc, .vscode, ... per-file-ignores cookbook/apps.py:F401 max-line-length 179值得注意的两个事实max-line-length 179与 pyproject.toml 中 yapf 的column_limit 179保持一致——整套工具链统一约定单行 179 字符这也是 watcher 中 flake8/yapf/prettier 都使用同一宽度基准的原因。per-file-ignores cookbook/apps.py:F401单独豁免了 cookbook/apps.py 中未使用的 importDjango AppConfig 场景下的常见写法。第三步设置 Linting Error 严重级别错误高亮默认情况下File Watcher 的问题会以普通级别显示。官方文档建议自定义一个名为 Linting Error 的严重级别让 lint 错误在编辑器中以醒目的方式呈现打开File - Settings - Editor - Inspections - File watcher problems在 Severity严重级别下拉中选择Edit Severities...点击新建严重级别命名为Linting Error按下图配置背景色与效果。推荐效果参考Background使用亮粉色#BC20A4Effects使用深蓝色#0712BC并选择Bordered边框效果。这样一旦 flake8 发现问题相关代码段会被高亮框选开发者无需切换窗口即可定位。第四步配置 isort Watcherimport 排序isort 负责统一 import 语句的分组与排序规则保存.py文件时自动整理。打开File - Settings - Tools - File Watchers点击新建 watcher按下表配置配置项取值Nameisort watcherFile typePythonScopeProject FilesProgram$PyInterpreterDirectory$\Scripts\isortArguments$FilePath$Output paths to refresh$FilePath$Show consoleOn errorisort 不通过命令行参数指定配置而是在项目根目录 pyproject.toml 的[tool.isort]段中定义[tool.isort] multi_line_output 5 skip [.gitignore, .dockerignore] line_length 179multi_line_output 5当 import 语句超过行宽需换行时采用每个导入项单独一行的竖排模式skip跳过.gitignore、.dockerignore这类非代码文件line_length 179与 flake8、yapf 的行宽上限保持一致。第五步配置 yapf WatcherPython 格式化yapf watcher 在保存时对 Python 文件就地重排格式-i即 in-place。打开File - Settings - Tools - File Watchers点击新建 watcher按下表配置配置项取值Nameyapf watcherFile typePythonScopeProject FilesProgram$PyInterpreterDirectory$\Scripts\yapfArguments-i $FilePath$Output paths to refresh$FilePath$Show consoleAlwaysyapf 的样式在 pyproject.toml 的[tool.yapf]段中定义其中两个参数直接决定了格式化行为[tool.yapf] column_limit 179 based_on_style pep8 DISABLE_ENDING_COMMA_HEURISTIC false COALESCE_BRACKETS true DEDENT_CLOSING_BRACKETS true FORCE_MULTILINE_DICT false INDENT_DICTIONARY_VALUE true SPLIT_BEFORE_DOT true ALLOW_SPLIT_BEFORE_DICT_VALUE false实战提示官方文档特别强调DISABLE_ENDING_COMMA_HEURISTIC false意味着 yapf 的末尾逗号启发式处于启用状态——在列表、字典、参数列表最后一个元素后补一个逗号就会触发 yapf 把每个元素各放一行。写代码时如果想强制某段容器结构纵向展开只需在末尾补逗号即可。第六步配置 prettier WatcherVue 与文档格式化prettier watcher 与前三个不同它作用于Any任意文件类型并通过自定义 Scope精确限定到 Vue 源码与文档目录。创建自定义 Scope打开File - Settings - Tools - File Watchers点击新建 watcher将File Type改为Any点击Scope右侧的三个点创建自定义 scopeName:prettierPattern:file:vue/src//*||file:vue3/src//*||file:docs//*该 Pattern 把格式化范围限定在三个目录旧版前端vue/src/、当前前端vue3/src/、文档docs/。仓库当前的实际结构是 vue3/src 承载 Vue 3 前端入口见 vue3/package.json文档目录为 docs。配置 watcher 参数配置项取值Nameprettier watcherFile typeAnyScopeprettier自定义ProgramyarnArguments--cwd $ProjectFileDir$\vue prettier -w --config $ProjectFileDir$\.prettierrc $FilePath$Show consoleOn error参数拆解--cwd $ProjectFileDir$\vue把工作目录切换到仓库的vue目录下执行以便 yarn 找到项目依赖结合Program: yarn实际执行的是yarn prettier ...。-w--write的缩写直接改写源文件--config $ProjectFileDir$\.prettierrc显式指定根目录 .prettierrc 作为配置$FilePath$当前被触发的文件。仓库根目录 .prettierrc 定义的格式规范如下{ printWidth: 179, trailingComma: es5, tabWidth: 2, semi: false, experimentalTernaries: true }同样以 179 为行宽上限与 Python 工具链保持一致trailingComma: es5表示仅在 ES5 合法位置对象/数组补末尾逗号semi: false表示不写分号。此外.prettierignore 明确排除了以下内容因此即使它们在 scope 内也不会被 prettier 改写生成文件api.ts、vue/src/apps/*.js、vue/node_modules、staticfiles/、docs/reports/、/vue3/src/openapi/OpenAPI 自动生成的客户端见 vue3/src/openapiDjango 模板与 CI 配置*.html、*.yml、*.yamlprettier 会干扰 Django 模板语法与 GitHub Actions 文件。前端调试提示先启动 Vite再启动 Django官方文档在 prettier 章节后附了一条与前端开发强相关的注意事项为了调试 vueyarn 和 vite 服务器必须在 django 服务器启动之前启动。这是因为当前前端由 Vite 开发服务器驱动vue3/package.json 中的dev: viteDjango 服务器启动时会尝试对接该开发服务顺序颠倒会导致前端资源加载失败。这与 VSCode 配置文档 中yarn dev服务器必须在 django 服务器之前启动的要求完全一致。若不需要热更新调试则需要先构建前端再启动 Django在vue3目录执行yarn build或yarninstall确保collectstatic能收集到构建产物。手动格式化不用 watcher 的兜底方案如果暂时不想安装插件官方 贡献指南 也给出了命令行手动格式化的等价方案flake8 file.py --ignoreE501 | isort -q file.py | yapf -i file.py prettier --write file.vue其中--ignoreE501是因为 flake8 的 E501行超长检查与 yapf/prettier 的自动换行职责重叠行宽实际由 .flake8 的max-line-length 179统一管理。提交 PR 前用该命令自检效果与 watcher 等价。更多贡献配置上述 PyCharm 配置的原文见 docs/contribute/pycharm.md对应 VSCode 方案见 docs/contribute/vscode.md完整的代码贡献规范含测试要求Django 使用 pytest-django、API 客户端由 openapi-generator 生成见 docs/contribute/guidelines.md贡献总览翻译、文档、Issue、代码等参与方式见 docs/contribute/contribute.md。按本文配置完四个 watcher 后你的 PyCharm 将自动完成 flake8 检查、isort 排序、yapf 与 prettier 格式化直接对齐仓库的贡献规范把精力集中在功能实现而非风格问题上。【免费下载链接】recipesApplication for managing recipes, planning meals, building shopping lists and much much more!项目地址: https://gitcode.com/GitHub_Trending/re/recipes创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考