試験的: COBOL ソース・コードのフォーマット設定

IBM Z® Open Editor v2.1.0 またはそれ以降のバージョンでは、実験的な COBOL ソース・コード・フォーマット機能が提供され、開発者は VS Code フォーマット・メニューとショートカットを使用して、ファイル全体または現在選択されている部分のソース・コードを再フォーマットできます。 フォーマット設定の規則は、多くの基準に従ってカスタマイズできる共通のデフォルトのセットによって決定されます。 デフォルトのフォーマット設定ルールのカスタマイズは、プロジェクト内のすべての開発者が一貫してフォーマット設定を実行できるようにするために、実際のソース・コードを使用してバージョン管理システムに保管できる YAML ファイルまたは JSON ファイルで表されます。

フォーマット設定カスタマイズ・ファイルは、zcodeformat と呼ばれます。 これらは、デフォルトに対して行う変更のみを定義する、構造化されたフォーマット設定を記述します。 これらのファイルを処理するユーザー・エクスペリエンスは、 Z Open Editorで ZAPP ファイル を処理する方法と非常に一貫性があるように設計されていますが、ZAPP はコードの表示とは無関係にアプリケーション・プロパティーに焦点を当てているため、個別に保持されています。 IBM のビジョンは、他の多くの言語で使用可能な一般的な Prettier ツールを使用したフォーマット設定と同様に、zcodeformat ファイルが z/OS® エンタープライズ・アプリケーションにとって有用になることです。

現在、この機能は COBOL でのみ使用可能です。

COBOL ファイルのフォーマット設定

COBOL ファイル (プログラム・ファイルまたはコピーブック) をフォーマットするには、以下のいずれかを行います。

  • 右クリックの「文書の書式設定」コンテキスト・メニュー・オプション、またはショートカット Shift + Option + F (Mac) または Shift + Alt + F (Windows) を使用して、文書全体を書式設定します。

  • 右クリックの「Format Selection」コンテキスト・メニュー・オプション、またはショートカットの Command K Command F (Mac) または Ctrl-K Ctrl-F (Windows) を使用して、現在選択されているテキスト範囲をフォーマットします。

zcodeformat ファイルの使用開始

開発ワークスペースの、.git ディレクトリーを含む最上位ディレクトリー (git を使用している場合)、または VS Code で 「ファイル」>「開く ...」を使用して開く最上位ディレクトリー (あるいはその両方) に、zcodeformat ファイルを作成します。 このディレクトリーには通常、ワークスペース設定が保管されている .vscode ディレクトリーも含まれています。

注意: 現在のバージョンの zcodeformat は、シングルルートの VS Code と Eclipse Che/RedHat® OpenShift Dev Spaces だけをサポートしています。

YAML ファイルまたは JSON ファイルとして zcodeformat ファイルを編集し、以下のいずれかの名前のファイルを最上位ディレクトリーに作成することができます。 これらのうち 1 つのみを作成し、小文字のみを使用して、以下に示すとおりの名前を付けます。

  • zcodeformat.yaml

  • zcodeformat.json

推奨される形式である YAML を使用する場合は、 Red Hat VS Code 拡張機能 もインストールすることをお勧めします。 この VS Code 拡張機能は、zcodeformat に役立つコード補完、文書化、およびフォーマット設定の機能を提供します。 Z Open Editor は、 Red Hat YAML 拡張機能のインストールを自動的に認識し、VS Code ユーザー設定でそのための zcodeformat スキーマを構成します。 Red Hat Ansible VS Code 拡張機能もインストールしている場合は、VS Code で zcodeformat ファイル用に選択した言語が Ansibleではなく YAML であることを確認してください。

YAML の zcodeformat のコード・スニペットも用意されており、すぐに生産性を高めるのに役立ちます。 JSON を使用する場合、デフォルトの VS Code JSON エディターでもコードの補完とフォーマット設定が提供されますが、現時点ではコード・スニペットはサポートされていません。

Z Open Editor が始動すると、 Red Hat YAML 拡張機能がインストールされているかどうかが検査されます。 その場合、エディターは、妥当性検査のために YAML エディターに使用される zcodeformat JSON スキーマへのリンクを自動的に追加します。 この拡張機能がインストールされていない場合、 Z Open Editor は JSON エディターのスキーマ・リンクのみを追加します。 Z Open Editor が Red Hat YAML 拡張機能または VS Code JSON と連動するように自動構成されていることを確認するには、VS Code のユーザー設定内で以下の項目を見つけてください。 Z Open Editorを開いた後に項目を追加する必要があります。 ここには、ZAPP スキーマへのリンクなど、他のスキーマ・エントリーがリストされている場合があります。

"yaml.schemas": {
  "file:///Users/user1/.vscode/extensions/ibm.zopeneditor-2.1.0/resources/zcodeformat-schema-0.0.1.json": [
    "zcodeformat.yaml"
  ]
},
"json.schemas": [
  {
    "fileMatch": [
      "/zcodeformat.json"
    ],
    "url": "file:///Users/user1/.vscode/extensions/ibm.zopeneditor-2.1.0/resources/zcodeformat-schema-0.0.1.json"
  }
]

これで、最初の zcodeformat ファイルを作成する準備ができました。

フォーマット設定セットの優先順位

Z Open Editor は、以下の順序でフォーマット設定を検索し、検出された最初のルール・セットのみを使用します。

  1. zcodeformat.yaml (ワークスペース・ディレクトリー内)

  2. zcodeformat.json (ワークスペース・ディレクトリー内)

zcodeformat ファイルの例

zcodeformat の使用を開始するには、以下の場所にあるサンプル GitHub リポジトリーを複製します。

https://github.com/IBM/zopeneditor-sample.

すべてのバリエーションを試して最適解を判別できるように、このリポジトリーには以下の設定ファイルが含まれています。

  • zcodeformat.yaml ファイル

  • zcodeformat-example.json ファイル

注意:zcodeformat ファイル内で省略されたプロパティは、COBOL Code Formatter template with all indentation options コードスニペット内で見つけられるデフォルト値に設定されます。

注意:前のセクションで述べた優先順位ルールによると、zcodeformat-example.jsonファイルを試したい場合は、まずzcodeformat.yamlファイルを削除し、zcodeformat.jsonにリネームする必要があります。

COBOL の例

zcodeformat.yaml ファイルには、以下の内容が含まれています。

cobol:
  dataDivision:
    alignValueClauses: false
    indentation:
      indentLength: 1
  procedureDivision:
    indentation:
      indentForAllBlocks: 1
  commentCase: none
copybook:
  codeCase: upper

この単純な例では、ファイルに使用することを選択したこのサンプル・リポジトリーに含まれている COBOL ファイルについて、いくつかのカスタム設定を定義します。

コピーブックの例

zcodeformat.yaml ファイルの末尾には、サポートされているコピーブック・ファイル・オプションの 1 つの例もあります。

コード補完による zcodeformat.yaml ファイルの編集

コード補完では、Red Hat VS Code YAML 拡張機能がインストールされており、前述のように構成されている必要があります。 以下のようにして試すことができます。

  1. カーソルを indentLength: 1 (5 行目付近) の行の後ろに置き、Enter キーを押して新しい行を開始します。

  2. Ctrl +Space キーを押して、コード補完のドロップダウンを開きます。

その後、この zcodeformat ファイルによってまだ指定されていない、ここで追加することができる他のプロパティー startOfAreaAが表示されます。

コード・スニペットを使用した zcodeformat.yaml ファイルの編集

zcodeformat エディターには、開始点として使用できる完全な zcodeformat ファイルのコード・スニペット・テンプレートも用意されています。 これらのコード・スニペットは、zcodeformat YAML ファイルを編集するときにコード・エディターでのみ使用できます。 VS Code は現在、スニペット・ギャラリー内の異なる YAML ファイル・タイプを区別できないため、これらのファイルは VS Code スニペット・ギャラリーには表示されません。

以下のコード・スニペットを使用するには、以下のようにします。

  1. zcodeformat.yamlの現行エディター・ウィンドウで、「すべて選択」を実行し、ファイルのすべての内容を削除します。 ファイルは Git で管理されるので、後で削除を撤回できます。

  2. 空の文書の最初の行と列で、Ctrl + Space を押して COBOL Code Formatter template with all indentation options Template スニペットを選択します。 一番下までスクロールする代わりに、そのスニペット名を入力します。

  3. COBOL およびコピーブックのフォーマット設定のデフォルト値を含むスニペットが挿入されたことが分かります。

構文エラーの検討

誤った YAML 名またはつづりの誤ったプロパティー名を入力して無効な zcodeformat.yaml ファイルを作成すると、 Red Hat YAML 拡張機能 の「問題」ビューに構文エラーが表示されます。 以下のように試すことができます。

  1. 任意のプロパティーから 2、3 文字を削除して、誤ったスペルにします。

  2. VS Code の問題ビューに切り替えます。 表示されない場合は、表示 > 問題表示メニューを使用します。 このビューには、正確な構文エラーと、そのエラーが発生した行と列が表示されます。

Red Hat YAML 拡張機能がインストールされていない場合でも、以下のようにして Z Open Editor で提供される単純なエラー・リストを出力ビューに表示できます。

  1. 出力ビューに切り替えます。 表示されない場合は、表示 > 出力表示のメニューを使用します。

  2. 「出力」表示の右側で、ドロップダウンから IBM Z Open Editor を選択します。

  3. 構文エラーをいくつか作成します。

  4. 構文エラーのあるファイルを保存します。 ( Red Hat 拡張機能は、ファイルを保存するまでエラーを表示しません。) これで、出力ビューに should NOT have additional propertiesなどのエラー・メッセージが表示されます。

表示されているように、この場合の出力の方がはるかに単純で、行番号がありません。 Red Hat Extension は、アウトライン・ビューを生成する完全な YAML 言語サーバーが組み込まれているため、zcodeformat ファイルを編集するための優れたソリューションです。

一般的な構文エラー

zcodeformat ファイル内の特定の従属プロパティーおよび競合プロパティーには、いくつかの制約事項があります。

  1. 同じレベルの enableIndentation が false に設定されている場合、 indentation 項目内の項目は許可されません。

    cobol:
      dataDivision:
        enableIndentation: false
        indentation:
          startOfAreaA: 8

    この場合、 enableIndentation が false であるため、 startOfAreaA は許可されません。

  2. cobol> procedureDivision > blocks内で使用される項目がある場合、 indentForAllBlockscobol> procedureDivision内で許可されるようになりました。

    cobol:
      procedureDivision:
        enableIndentation:
        indentation:
          indentForAllBlocks: 5
          blocks:
            indentExecBlock: 5

    この場合、 indentExecBlocks が指定されているため、 indentForAllBlocks は許可されません。

    注: blocks の下に子プロパティーが存在する場合、 indentForAllBlocks プロパティーは許可されません。

スキーマの学習

VS Code の組み込みスキーマ・サポートにより、コード補完とリッチ・ホバーが提供されます。これらの機能は、使用可能なコード・テンプレートとともに、これらのファイルを作成するための zcodeformat スキーマの背後にある詳細を学習することができます。 ただし、フォーマッターとスキーマは、 IBM Developer for z/OSで使用可能なコード・フォーマッターに基づいています。 詳しくは、 COBOL コード・エレメントのフォーマット設定を参照してください。

zcodeformat.yaml ファイルのフォーマット設定

Red Hat YAML 拡張機能のもう 1 つの機能は、zcodeformat ファイルを一貫してフォーマットする機能です。 例えば、誤って別のインデントを使用した場合は、以下の 2 つのフォーマット設定コマンドのいずれかを使用して、ファイル全体のフォーマット設定を単に訂正することができます。

  • ショートカット Shift+Option+F (Mac) または Shift+Alt+F (Windows) を使用します。

  • Cmd+Shift+P (Mac) または Ctrl+Shift+P (Windows) を押し、 文書のフォーマットを選択するには「フォーマット」を入力します。