グローバル警告の生成をカスタマイズする

警告は、4D開発者に潜在的なコードミスを警告するための貴重なツールです。4D 20 R6のリリースでは、どの警告を発生させるかをグローバルに定義できるようになり、全体的な開発エクスペリエンスが向上しました。

コンパイラーとライブ・シンタックス・チェッカーによって生成される警告は、コードエラーを回避するために非常に重要です。警告は早期警告システムとして機能し、実行エラーを引き起こす可能性のあるコードを開発者に通知します。これは、ポインタの使用など、コンパイルでポイント先の変数の型を確認できない場合や、暗黙的な変数型のキャストがある場合に特に便利です。

プロジェクトに合わせた警告

プロジェクトの規模や複雑さによっては、数多くの警告が生成されることがあります。これらの警告はコンパイルを妨げるものではないものの、時には警告の多さに開発者が圧倒され、一番重要な問題に集中できなくなることがあります。このため、多くの開発者は、生成される警告コードや、コンパイラのダイアログボックス/コードエディタに表示される警告コードをカスタマイズできることを望んでいます。

グローバル警告定義の導入

私たちは、このような開発者の声に耳を傾け、4D 20 R6では、データベース全体において生成させたい警告を定義できるようにしました。
プロジェクトのストラクチャー設定ダイアログボックスのコンパイラページに、新しいタブが追加されました。このタブには、利用可能なすべての警告のリストが含まれています。リストでチェックされた警告のみが、コンパイラーダイアログとコードエディター(4DコードエディターとVS Code)でグローバルに生成されます。

設定されたパラメータに従って警告タイプが生成されたり(あるいはされなかったり)しても、従来から使用されている //%W+ と //%W- スイッチを使って、コード内で警告タイプのチェックをローカルに(局所的に)有効/無効にすることができます。

デフォルトでは、すべての警告タイプが有効になっています。これは、これらの警告タイプが開発者にとって重要な補助としての価値を持っているという4Dの考え方が反映されています。しかし、プロジェクトごとに固有の要件があることも理解しているため、ニーズに合わせて特定の警告を表示または非表示にできるようにしています。

COMPILE PROJECTコマンドの新しいオプション

この Compile projectコマンドはコンパイル中に発生した警告のリストを返します。デフォルトでは、このコマンドはストラクチャー設定で設定された警告を考慮し、コンパイラーダイアログボックスに表示されるものと同じリストを返します。
しかし、コマンドのoptions引数でwarningsコレクションを使用することで、このリストを編集することができます。

このコード例では、#518.1と#518.2を除くすべての警告が$warningsコレクションに返されます:

var $options:={warnings: []}
$options.warnings.push({major: 518; minor: 1; enabled: False})
$options.warnings.push({major: 518; minor: 2; enabled: False})
var $result:=Compile project($options)
var $warnings:=$result.errors.query("isError = :1"; False)

あなたのフィードバックが重要です

4Dフォーラムでは、ユーザーの皆様に可能な限り最高の体験を提供できるよう努力しております。あなたのフィードバックは、私たちがあなたのニーズを理解し、私たちの製品とサービスを継続的に改善するのに役立ちます。是非使用した感想をお寄せ下さい!
それでよいコーディングライフを!

Avatar
- プロダクトオーナー - Damien Fuzeauは、2019年2月に4D Productチームに参加しました。プロダクトオーナーとして、ユーザーストーリー(ユーザーが期待する新機能とその使用法)を書き、それを具体的な機能仕様に変換することを担当しています。また、実装された機能が顧客のニーズを満たしているかどうかを確認することも彼の役割です。ナント大学のソフトウェア工学科を卒業。前職の会社では最初は開発者として(1997年に4Dを発見)、後にエンジニアリングマネージャーとソフトウェアアーキテクトとして、23年以上勤務しました。この会社は、4DのOEMパートナーであり、現在は数千のユーザーと数百のサーバーに向けて4Dベースのビジネスソフトを展開しています。ですから、Damienは、多言語環境での4D開発・導入に慣れています。