error_info.hpp #
error_info.hpp
では、error_info
と、それをフォーマットする関数が定義されます。
toml::error_info
#
namespace toml
{
struct error_info
{
error_info(std::string t, source_location l, std::string m, std::string s = "");
error_info(std::string t, std::vector<std::pair<source_location, std::string>> l, std::string s = "");
std::string const& title() const noexcept;
std::string & title() noexcept;
std::vector<std::pair<source_location, std::string>> const& locations() const noexcept;
void add_locations(source_location loc, std::string msg) noexcept;
std::string const& suffix() const noexcept;
std::string & suffix() noexcept;
};
template<typename ... Ts>
error_info make_error_info(
std::string title, source_location loc, std::string msg, Ts&& ... tail);
std::string format_error(const std::string& errkind, const error_info& err);
std::string format_error(const error_info& err);
template<typename ... Ts>
std::string format_error(std::string title,
source_location loc, std::string msg, Ts&& ... tail);
std::ostream& operator<<(std::ostream& os, const error_info& e);
}
メンバ関数 #
コンストラクタ(title, loc, msg, suffix
)
#
指定されたタイトル、位置情報、メッセージ、suffixからerror_info
を構築します。
suffix
はデフォルトで空です。
コンストラクタ(title, [{loc, msg}, ...], suffix
)
#
指定されたタイトル、位置情報とメッセージの配列、そしてsuffix
からerror_info
を構築します。
suffix
はデフォルトで空です。
メンバ関数 #
std::string title()
#
エラーメッセージのタイトルです。
std::vector<std::pair<source_location, std::string>> locations()
#
エラーの発生した位置とそれに関するメッセージです。
複数指定可能です。
std::string suffix()
#
最後に表示するメッセージです。ヒントや補足を表示します。
非メンバ関数 #
make_error_info
#
template<typename ... Ts>
error_info make_error_info(
std::string title, source_location loc, std::string msg, Ts&& ... tail);
新しくerror_info
を構築します。
source_location
またはbasic_value
の後には、それに関するmsg
が続かなければなりません。
value.hpp
では、 source_location
の代わりに toml::basic_value
を渡した際のオーバーロードが追加されます。
末尾にはsuffix
を渡すことが可能です。
format_error
#
error_info
を以下のようにフォーマットします。
{title}
--> {locations().at(0).first.file_name()}
|
1 | {locations().at(0).first.line()}
| ^-- {locations().at(0).second}
|
2 | {locations().at(1).first.line()}
| ^-- {locations().at(1).second}
{suffix}
二つの source_location
のファイル名が異なる場合は、ファイル名が再度表示されます。
std::string format_error(const std::string& errkind, const error_info& err);
std::string format_error(const error_info& err);
error_info
をフォーマットします。
errkind
が与えられなかった場合、赤色太字の[error]
がtitle
の前につけ足されます。
errkind
が与えられた場合(空文字列の場合も含みます)、それが[error]
の代わりに表示されます。
namespace toml
{
template<typename ... Ts>
std::string format_error(std::string title,
source_location loc, std::string msg, Ts&& ... tail);
} // toml
make_error_info
を使って作成した error_info
を format_error
でフォーマットした文字列を返します。
value.hpp
では、 source_location
の代わりに toml::basic_value
を渡した際のオーバーロードが追加されます。
ストリーム演算子 #
std::ostream& operator<<(std::ostream& os, const error_info& e);
format_error(e)
を呼び出し、それを出力します。