Python拡張機能の作成
注: VS Code拡張機能の作成が初めての場合は、まず最初の拡張機能チュートリアルを読み、簡単なHello World拡張機能を作成してみることをお勧めします。
Python拡張機能は、ユーザーのマシンで利用可能なPython環境を他の拡張機能が操作するためのAPIを提供します。これらのAPIを拡張機能からアクセスするための型とヘルパーユーティリティを含む@vscode/python-extension npmモジュールを確認してください。
Python拡張機能テンプレート
Python拡張機能テンプレートは、お気に入りのPythonツール用のVisual Studio Code拡張機能の構築を開始するのに役立ちます。それはリンター、フォーマッター、コード分析、またはそれらすべてを組み合わせたものかもしれません。このテンプレートは、ツールをVS Codeに統合する拡張機能を構築するために必要な基本的な構成要素を提供し、上記のPython APIに既にアクセスできます。
プログラミング言語とフレームワーク
拡張機能テンプレートには、拡張機能部分と言語サーバー部分の2つの部分があります。拡張機能部分はTypeScriptで記述されており、言語サーバー部分はpygls (Python言語サーバー) ライブラリを介してPythonで記述されています。
このテンプレートを使用する場合、ほとんどの作業はコードのPython部分で行われます。Language Server Protocolを使用して、ツールを拡張機能部分と統合します。pyglsは現在、LSPのバージョン3.16で動作します。
TypeScript部分は、VS CodeとそのUIの操作を処理します。拡張機能テンプレートには、ツールで使用できるいくつかの組み込み設定が含まれています。ツールをサポートするために新しい設定を追加する必要がある場合は、少しTypeScriptを操作する必要があります。拡張機能テンプレートにはいくつかの設定の例があり、人気のあるツール向けにチームが開発した拡張機能も確認できます。
要件
- VS Code 1.64.0以上
- Python 3.7以上
- node >= 14.19.0
- npm >= 8.3.0 (
npmはnodeと一緒にインストールされます。npmのバージョンを確認し、npm install -g npm@8.3.0を使用して更新してください) - VS Code用のPython拡張機能
Python仮想環境の作成と操作方法を知っている必要があります。
はじめに
開始するには、テンプレートのREADMEの指示に従ってください。そこでは、テンプレートを使用してリポジトリを作成する方法、必要なツール(例:noxタスクランナー)およびオプションの依存関係(テストサポート)をインストールする方法について説明しています。
READMEには、最新の指示が記載されており、拡張機能のpackage.jsonプレースホルダー(<pythontool-module>、<pythontool-display-name>など)をカスタマイズする方法についても詳しく説明されています。
テンプレートの機能
テンプレートを介して拡張機能を作成すると、次の拡張機能の貢献が含まれます。<pytool-module>がmytoolに、<pytool-display-name>がMy Toolに置き換えられたと仮定します。
- コマンド My Tool: Restart Server (コマンドID:
mytool.restart)。 - 以下の設定
mytool.logLevelmytool.argsmytool.pathmytool.importStrategymytool.interpretermytool.showNotification
- 拡張機能のアクティベーションに対する以下のトリガー
- 言語
pythonの場合。 - 開いているワークスペースで
.py拡張子のファイルが見つかった場合。 - コマンド
mytool.restartの場合。
- 言語
- ログ用の出力チャンネル 出力 > My Tool。
ツールの統合
生成されたbundled/tool/server.pyファイルは、ほとんどの変更を行う場所です。ファイル内のTODOコメントは、さまざまなカスタマイズポイントを指摘しています。また、他のPythonファイルやMarkdownファイルなど、テンプレート内の他の場所にあるTODOコメントも検索してください。MITライセンスを維持したい場合でも、LICENSEファイルを確認することをお勧めします。
例
テンプレートから作成されたいくつかの実装例があります
- Pylint - ファイルの
open、save、close時にリンティングとコードアクションを実装します。 - Flake8 - リンティングとコードアクションを実装します。
- Black Formatter - Blackフォーマッターを統合します。
- autopep8 - autopep8フォーマッターを統合します。
- isort - インポートをソートするコードアクションを追加します。
pygls言語サーバーの統合をよりよく理解するために、Language Server Protocolの仕様も確認できます。
拡張機能開発
テンプレートのREADMEには、テンプレートに含まれる開発サイクルサポートについて詳しく説明されています。テンプレートには、拡張機能をビルド、実行、デバッグ、テストするためのコマンドと設定が含まれています。
開発中に問題が発生した場合は、一般的な問題に役立つトラブルシューティングセクションがあります。
パッケージングと公開
拡張機能を公開する前に、特定の拡張機能に合わせて、拡張機能のpackage.jsonフィールド(publisherやlicenseなど)を更新する必要があります。また、補助的なMarkdownファイル(CODE_OF_CONDUCT.md、CHANGELOG.mdなど)も更新することをお勧めします。
拡張機能の公開準備が整ったら、.vsixファイルを作成するためのnox build-packageタスクがあります。このファイルは、拡張機能の管理ページにアップロードできます。
VS Code拡張機能の作成と公開が初めての場合は、VS Codeの主要な拡張機能の作成トピックで概説されているベストプラクティスに従うことをお勧めします。ここでは、Marketplaceで拡張機能を魅力的に見せる方法や、ユーザーが安心して拡張機能をインストールできるように検証済み発行元になる方法についてのガイダンスが見つかります。