すべての警告はユーザーに問題を説明するためのテキストのメッセージと、それに関連付けられた重大度レベル(severity level)をもっています。重大度レベルはシンボルです。以下に想定される重大度レベルと意味を重大度の降順で示します:
:emergency
ユーザーが直ちに対処しなければEmacs処理が間もなく深刻に害される問題。
:error
本質的に悪いデータや状況に関するレポート。
:warning
本質的に悪くはないが、可能性のある問題を励起する恐れのあるデータや状況に関するレポート。
:debug
ユーザーが警告を発するLispプログラムをデバッグ中に役に立つかもしれない情報のレポート。
あなたのプログラムが無効な入力データに遭遇した際には、error
やsignal
(エラーをシグナルする方法を参照)の呼び出しによってLispエラーのシグナルするか、あるいは重大度:error
の警告をレポートすることができます。もっとも簡単なのはLispエラーのシグナルですが、それはプログラムが処理を継続できないようシグナルすることを意味します。間違ったデータでも処理を継続するための方法を実装するためにトラブルを受け取めたい場合には、その問題をユーザーに知らせるために重大度:error
の警告をレポートするのが正しい方法です。たとえばEmacs
Lispバイトコンパイラーはこの方法によりエラーを報告して、他の関数のコンパイルを継続できます(プログラムがLispエラーをシグナルしてcondition-case
でhandleしたならユーザーがそのエラーを確認することはないだろう;
これは警告としてレポートすることにより、問題を避けるのではなくユーザーに問題を報告するのだ)。
重大度レベルの他にも、クラス分けのために警告にはそれぞれ警告タイプ(warning
type)があります。このタイプはシンボル、またはシンボルのリストです。シンボルならそのプログラムのユーザーオプションとして使用するカスタムグループ、リストならリストの1つ目の要素がそのカスタムグループであることが必要です。たとえばバイトコンパイラーの警告は警告タイプ(bytecomp)
を使用しています。警告タイプがリストの場合には、後続する2つ目以降の要素はそれぞれが警告のサブカテゴリーを表す任意のシンボルであることが必要です。これらの要素は、その警告の特性についてよりよい説明を表示するために使用されることでしょう。
この関数は警告テキストとして文字列message、警告タイプとしてtypeを使用して警告をレポートする。levelは重大度レベルであること。省略またはnil
の場合のデフォルトは:warning
。
buffer-nameが非nil
なら、それは警告メッセージをロギングするためのバッファー名を指定する。デフォルトは*Warnings*。
この関数は*Warnings*バッファー内のメッセージテキストとして(format-message message args…)
がリターンした値を使用して警告をレポートする。他の点ではこれはdisplay-warning
と同じ。
この関数はメッセージテキストとして(format-message message args…)
がリターンした値、タイプとしてemacs
、重大度レベルとして:warning
を使用して警告をレポートする。これは互換性のためだけに存在する。固有な警告タイプを指定するべきであり、この関数の使用は推奨しない。