编写Python扩展

注意: 如果你是VS Code扩展开发的新手,你可能想先阅读你的第一个扩展教程,并尝试创建一个简单的Hello World扩展。

Python 扩展提供了API,供其他扩展与用户机器上可用的Python环境进行交互。查看 @vscode/python-extension npm 模块,该模块包含类型和辅助工具,以便从您的扩展中访问这些API。

Python 扩展模板

Python 扩展模板 帮助您开始为最喜爱的 Python 工具构建 Visual Studio Code 扩展。它可能是一个 linter、格式化工具或代码分析工具,或者所有这些功能的结合。该模板将为您提供构建扩展所需的基本构建块,该扩展将您的工具集成到 VS Code 中,并且它已经可以访问上述的 Python API。

编程语言和框架

扩展模板有两个部分,扩展部分和语言服务器部分。扩展部分是用TypeScript编写的,而语言服务器部分是用Python在pygls(Python语言服务器)库上编写的。

使用此模板时,您将主要处理代码的Python部分。您将使用语言服务器协议将您的工具与扩展部分集成。pygls目前适用于LSP的3.16版本

TypeScript部分负责处理与VS Code及其用户界面的交互。扩展模板内置了一些设置,可供您的工具使用。如果您需要添加新设置以支持您的工具,您将需要处理一些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. Python VS Code 扩展

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

入门指南

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

README 包含了最新的说明,并详细介绍了如何自定义扩展的 package.json 占位符(, 等)。

模板的特性

通过模板创建扩展后,它将包含以下扩展贡献。假设被替换为mytool,并且被替换为My Tool

  1. 一个命令 我的工具:重启服务器 (命令 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 文件。即使您想保留 MIT 许可证,您也需要查看 LICENSE 文件。

示例

有几种从模板创建的示例实现:

  • Pylint - 在文件opensaveclose时实现代码检查和代码操作。
  • Flake8 - 实现代码检查和代码操作。
  • Black Formatter - 集成了 Black 格式化工具。
  • autopep8 - 集成了 autopep8 格式化工具。
  • isort - 添加代码操作以排序导入。

你也可以查看语言服务器协议规范,以更好地理解pygls语言服务器集成。

扩展开发

模板的README详细介绍了模板中包含的开发周期支持。模板提供了命令和配置,以便您可以构建、运行、调试和测试您的扩展。

如果在开发过程中遇到问题,可以参考故障排除部分来解决常见问题。

打包和发布

在发布您的扩展之前,您需要为您的特定扩展更新package.json字段(例如publisherlicense)。您还需要更新辅助的Markdown文件(CODE_OF_CONDUCT.mdCHANGELOG.md等)。

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

如果你是新手,正在创建和发布VS Code扩展,我们建议你遵循主VS Code扩展创作主题中概述的最佳实践。在这里,你将找到帮助你的扩展在市场上看起来很棒,以及如何成为经过验证的发布者,以便用户有信心安装你的扩展的指导。