###はじめにPythonクラスをスタブアウトするのが嫌いな場合は、VisualStudioCodeで拡張機能を作成してそれを行う方法を次に示します。 この記事では、その拡張機能を作成する方法を説明します。 そのためにいくつかの手法を使用します。

  • ユーザー入力のプロンプト
  • 配列マップおよび結合関数
  • ES6テンプレートリテラル
  • ファイルシステムへの書き込み

新しい拡張機能を作成し、ユーザーに入力を求め、入力を新しいクラスファイルを表す文字列に変換して、結果を書き出します。

プロジェクトの作成

コード拡張機能の開発を開始するには、「yo」と「generator-code」の2つの異なるNPMパッケージをインストールする必要があります。

プロジェクトを生成するには、次のコマンドを実行します。

yo code

これはあなたのプロジェクトについてあなたにいくつかの質問をすることによってフォローアップします。 拡張機能にはJavaScriptまたはTypeScriptのいずれかを選択してください。

すべての質問に答えたら、新しく作成したプロジェクトをVSCodeで開きます。

いくつかの異なるファイルが作成されますが、最も重要な2つは package.jsonextension.js ファイル。

を開くことから始めます extension.js ファイル。 次に、拡張コマンド名の名前を次のように変更します createPyClass.

次に、 package.json ファイルで、アクティベーションイベントとコマンドの名前をコマンドの名前と一致するように変更します。

コマンドをアクティブにするためにユーザーが入力するタイトルも更新します。

拡張機能を実行するには、デバッグパネルを開き(バグのように見えます)、再生を押します。 これにより、VSCodeの新しいインスタンスが開きます。 コマンドプロンプトを開きます(Macの場合は Command + Shift + P 、Macの場合は Control + Shift + P (Windowsの場合))、「Pythonクラスの作成」と入力します。

そして、「HelloWorld」メッセージが表示されるはずです。

ユーザーに入力を求める

クラス(クラス名とプロパティ)に関する入力をユーザーに求め、その入力を新しいクラスファイルに書き込める文字列に変換する必要があります。

まず、ユーザーが現在開いているフォルダーを持っていることを確認します。 そうでない場合は、新しいクラスファイルを書き込む場所がありません。 ユーザーがフォルダを開いていない場合は、エラーメッセージを表示して戻ります。

if (!vscode.workspace.workspaceFolders) {
  return vscode.window.showErrorMessage(
    "Please open a directory before creating a class."
  );
}

これで、作成するクラスの名前をユーザーに尋ねることができます。 ユーザーが何らかの理由で(エスケープを押すことによって)入力プロンプトを閉じると、戻ります。

const className = await vscode.window.showInputBox({
  prompt: "Class Name?"
});

if (!className) return;

ユーザーが必要な数のプロパティを入力できるようにします。 このために、最初にプロパティの入力を求め、次にwhileループを実行して、ユーザーが「done」と入力するまでプロパティを取得します。

let count = 1;
let property = await vscode.window.showInputBox({
  prompt: `Property #${count}? ('done' when finished)`
});
const properties = [];
while (property != "done") {
  properties.push(property);
  count++;
  property = await vscode.window.showInputBox({
    prompt: `Property #${count}? ('done' when finished)`
  });
}

拡張機能を再実行し、有効な入力を入力し、ユーザーの情報を印刷して、正しく表示されることを確認します。

クラスコンテンツ文字列を作成する

ここで、クラスのコンテンツを生成するためにユーザーの入力を取得し始めます。 クラス定義行とコンストラクター定義を作成することから始めましょう。

const classDefinition = `class ${className}:`;
const constructorDefinition = `def __init__(self, ${properties.join(", ")}):`;

次に、コンストラクター割り当て行を作成できます。 これは、ユーザーがコンストラクターパラメーターの値を使用して変数を初期化する場所です。 このために、私たちは使用します map (これから説明しますが)各プロパティ入力を何らかの方法で変換します。

const constructorAssignments = properties
  .map(property => `self.${property} = ${property}\n\t\t`)
  .join("");

ここで、プロパティごとに、getter関数を作成します。 繰り返しますが、 map 各プロパティをそのゲッターを表す文字列に変換します。

const classGetters = properties
  .map(
    property => `\tdef get_${property}(self):\n\t\treturn self.${property}\n\n`
  )
  .join("");

最後に作成したいのは、Pythonにこのオブジェクトの印刷方法を指示する文字列関数です。 繰り返しますが、 map プロパティの名前とその値を出力することにより、各プロパティを変換する関数。

マップの戻り値に、コンマとプラスを追加していることに注意してください。 これは、最後のプロパティについて、最後に不要な文字を追加することを意味します。 このため、結果の配列を文字列に変換し、次を使用して最後の11文字を切り取ります。 splice.

const dunderStrString = `\tdef __str__():\n \t\treturn ${properties
  .map(property => '"' + property + ': "' + " + " + property + ' + " , " + ')
  .join("")
  .slice(0, -11)}`;

この個々のピースを取り、それらをすべてまとめましょう!

const classString = `${classDefinition}
    ${constructorDefinition}
        ${constructorAssignments}
${classGetters}
${dunderStrString}`;

ログステートメントを作成し、これを再度実行して、クラス文字列が適切に表示されることを確認します。

クラスファイルの作成

次に、その文字列を新しいファイルに書き込む必要があります。 ファイルを操作するには、ページ上部のノードから「fs」モジュールと「path」モジュールをインポートする必要があります。

const fs = require("fs");
const path = require("path");

次に、ユーザーが現在開いているディレクトリのパスを取得する必要があります。 あなたはによって開いているディレクトリへの参照を得ることができます vscode.workspace.workspaceFolders. 次に、結果の配列から最初の配列を取得し、そのURIを取得して、文字列に変換します。 結果のパス文字列にはプレフィックスが含まれていたため、コロンで分割し、コロンの後に続くものを取得することで、プレフィックスを取り除きます。

const folderPath = vscode.workspace.workspaceFolders[0].uri
  .toString()
  .split(":")[1];

これで、fsモジュール、フォルダーパス、およびクラスファイルの名前を使用して、クラス文字列を新しいファイルに書き込むことができます。

fs.writeFile(path.join(folderPath, `${className}.py`), classString, err => {});

ファイルの書き込みが成功したかどうかに基づいてユーザーにフィードバックを提供することで、さらに一歩進めることができます。

fs.writeFile(path.join(folderPath, `${className}.py`), classString, err => {
  if (err) {
    vscode.window.showErrorMessage("Something went wrong");
    return console.log(err);
  }
  vscode.window.showInformationMessage(`${className} Class created.`);
});

それを実行します

デバッグインスタンスを更新するか、上記の手順に従ってやり直してください。 VS Codeのデバッグインスタンスを開いた状態で、「CreatePythonClass」コマンドを再度実行します。 次に、作成するクラスの名前を入力します。 この場合の「人」。

次に、プロパティを入力します。最初に「名前」を入力します。

次に「年齢」。

次に、「完了」して終了します。

ファイルは正常に作成されました。

次に、ファイルが実際に作成され、見栄えが良いことを再確認します

結論

このチュートリアルでは、特定の問題を解決するための拡張機能を作成しました。 これは、VS Codeについてさらに学ぶ機会を提供し、他の人が恩恵を受けるものでもあります。