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

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

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

Python Class Generator

プロジェクトの作成

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

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

yo code

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

Select JavaScript or TypeScript

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

Opening the new project in VS Code

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

Viewing the created files

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

Renaming the extension command name

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

Renaming the activation event and command

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

Updating the title

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

Using the new command

そして、「HelloWorld」メッセージが表示されます。

New command started successfully

ユーザーに入力を求める

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

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

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関数を使用して、プロパティの名前とその値を出力することにより、各プロパティを変換します。

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

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」コマンドを再度実行します。 次に、作成するクラスの名前を入力します。 この場合の「人」。

Enter the Person class

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

Enter the name property

次に「年齢」。

Enter the age property

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

Enter "done" to finish

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

The file is successfully created

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

Viewing the class in VS Code

結論

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