Skip to content

编写 Python 插件

INFO

注意:如果你是 VS Code 插件编写的新手,建议先阅读你的第一个插件教程,并尝试创建一个简单的 Hello World 插件。

Python 插件为其他插件提供了 API,用于处理用户机器上可用的 Python 环境。请查看 @vscode/python-extension npm 模块,它包含用于从你的插件访问这些 API 的类型和辅助工具。

Python 插件模板

Python 插件模板帮助你开始为你喜欢的 Python 工具构建 Visual Studio Code 插件。它可以是 linter、格式化器或代码分析工具,或者所有这些的组合。该模板将为你提供构建将你的工具集成到 VS Code 的插件所需的基本构建块,并且它已经可以访问上面提到的 Python API。

编程语言和框架

插件模板由两部分组成:插件部分和语言服务器语言服务器插件模式中使用C/S结构的的服务器端,用于高消耗的特殊插件场景,如语言解析、智能提示等。与之相对,客户端则是普通的插件,两者通过VS Code 的API进行通信。部分。插件部分用 TypeScript 编写,语言服务器语言服务器插件模式中使用C/S结构的的服务器端,用于高消耗的特殊插件场景,如语言解析、智能提示等。与之相对,客户端则是普通的插件,两者通过VS Code 的API进行通信。部分用 Python 编写,基于 pygls(Python 语言服务器语言服务器插件模式中使用C/S结构的的服务器端,用于高消耗的特殊插件场景,如语言解析、智能提示等。与之相对,客户端则是普通的插件,两者通过VS Code 的API进行通信。)库。

使用此模板时,你大部分时间会在代码的 Python 部分工作。你将使用语言服务器协议将你的工具与插件部分集成。pygls 目前基于 LSP 3.16 版本工作。

TypeScript 部分负责处理与 VS Code 及其 UI 的交互。插件模板内置了一些可供你的工具使用的设置。如果你需要添加新设置来支持你的工具,你将需要处理一些 TypeScript 代码。插件模板提供了一些设置的示例,你也可以查看我们团队为一些流行工具开发的扩展

要求

  1. VS Code 1.64.0 或更高版本
  2. Python 3.7 或更高版本
  3. node >= 14.19.0
  4. npm >= 8.3.0(npm 随 node 一起安装,检查 npm 版本,使用 npm install -g npm@8.3.0 更新)
  5. 适用于 VS Code 的 Python 插件

你应该知道如何创建和使用 Python 虚拟环境。

快速开始

要开始,请按照模板 README 中的说明操作。在那里你将学习如何使用模板创建你的仓库,以及如何安装必要的工具(例如 nox 任务运行器)和可选依赖(测试支持)。

README 包含最新的说明,并且还详细介绍了如何自定义插件的 package.json 占位符(<pythontool-module><pythontool-display-name> 等)。

模板的功能

通过模板创建插件后,它将包含以下插件配置。假设 <pytool-module> 被替换为 mytool<pytool-display-name> 被替换为 My Tool

  1. 一个 My Tool: Restart Server 命令(命令 ID:mytool.restart)。
  2. 以下设置:
    • mytool.logLevel
    • mytool.args
    • mytool.path
    • mytool.importStrategy
    • mytool.interpreter
    • mytool.showNotification
  3. 以下插件激活触发器:
    • 在语言 python 上。
    • 在打开的工作区中发现带有 .py 扩展名的文件时。
    • 在命令 mytool.restart 上。
  4. 用于日志记录的输出通道 输出(Output) > My Tool

整合你的工具

生成的 bundled/tool/server.py 文件是你进行大部分更改的地方。文件中的 TODO 注释指出了各种自定义点。也请在其他位置的模板中搜索 TODO 注释,例如其他 Python 和 Markdown 文件。你需要审阅 LICENSE 文件,即使你想保留 MIT License。

示例

有多个由该模板创建的示例实现:

  • Pylint - 在文件的 opensaveclose 时实现 linting 和代码操作(Code Actions)。
  • Flake8 - 实现 linting 和代码操作。
  • Black Formatter - 集成了 Black 格式化器。
  • autopep8 - 集成了 autopep8 格式化器。
  • isort - 添加排序 import 的代码操作。

你也可以查看语言服务器协议规范,以更好地理解 pygls 语言服务器语言服务器插件模式中使用C/S结构的的服务器端,用于高消耗的特殊插件场景,如语言解析、智能提示等。与之相对,客户端则是普通的插件,两者通过VS Code 的API进行通信。集成。

插件开发

模板 README 详细介绍了模板附带的开发周期支持。模板提供了命令和配置,以便你可以构建、运行、调试和测试你的插件。

如果在开发过程中遇到问题,有一个疑难解答部分可以帮助解决常见问题。

打包和发布

在发布插件之前,你需要针对你的特定插件更新插件的 package.json 字段(如 publisherlicense)。你还需要更新辅助的 Markdown 文件(CODE_OF_CONDUCT.mdCHANGELOG.md 等)。

一旦你的插件准备好发布,有一个 noxbuild-package 任务可以创建 .vsix 文件,然后你可以将其上传到你的插件管理页面

如果你是创建和发布 VS Code 插件的新手,我们建议你遵循主 VS Code 插件编写主题中概述的最佳实践。在这里你会找到帮助你的插件在 Marketplace 上看起来更出色的指南,以及如何成为已验证发布者,让用户放心安装你的插件。