source_location.hpp #
source_location.hpp
defines a class representing a specific area within a TOML file.
This class is used to represent problematic areas in error messages.
toml::source_location
#
source_location
is a class representing a specific area within a TOML file.
namespace toml
{
struct source_location
{
public:
explicit source_location(/* implementation-defined */);
~source_location() = default;
source_location(source_location const&) = default;
source_location(source_location &&) = default;
source_location& operator=(source_location const&) = default;
source_location& operator=(source_location &&) = default;
bool is_ok() const noexcept;
std::size_t length() const noexcept;
std::size_t first_line_number() const noexcept;
std::size_t first_column_number() const noexcept;
std::size_t last_line_number() const noexcept;
std::size_t last_column_number() const noexcept;
std::string const& file_name() const noexcept;
std::size_t num_lines() const noexcept;
std::string const& first_line() const;
std::string const& last_line() const;
std::vector<std::string> const& lines() const noexcept;
};
template<typename ... Ts>
std::string format_location(const source_location& loc, const std::string& msg, const Ts& ... locs_and_msgs);
} //toml
Member Functions #
Constructor #
explicit source_location(/* implementation-defined */);
toml::source_location
can only be constructed via toml::parse
or the _toml
literal.
is_ok()
#
bool is_ok() const noexcept;
Returns true
if the source_location
holds a valid value, false
otherwise.
The result of location()
from toml::value
constructed outside of toml::parse
or _toml
literals returns false
for is_ok
as it points to nothing.
length()
#
std::size_t length() const noexcept;
Returns the length of the area pointed to by the source_location
.
Returns 0
if it does not hold a valid value.
first_line_number()
#
std::size_t first_line_number() const noexcept;
Returns the line number of the first line of the area pointed to by the source_location
.
Returns 1
if it does not hold a valid value.
first_column_number()
#
std::size_t first_column_number() const noexcept;
Returns the column number of the first column of the area pointed to by the source_location
.
Returns 1
if it does not hold a valid value.
last_line_number()
#
std::size_t last_line_number() const noexcept;
Returns the line number of the last line of the area pointed to by the source_location
.
Returns 1
if it does not hold a valid value.
last_column_number()
#
std::size_t last_column_number() const noexcept;
Returns the column number of the last column of the area pointed to by the source_location
.
Returns 1
if it does not hold a valid value.
file_name()
#
std::string const& file_name() const noexcept;
Returns the file name containing the area pointed to by the source_location
.
Returns "unknown file"
if it does not hold a valid value.
num_lines()
#
std::size_t num_lines() const noexcept;
Returns the number of lines in the area pointed to by the source_location
.
Returns 0
if it does not hold a valid value.
first_line()
#
std::string const& first_line() const;
Returns the first line of the area pointed to by the source_location
.
Throws std::out_of_range
if it does not hold a valid value.
last_line()
#
std::string const& last_line() const;
Returns the last line of the area pointed to by the source_location
.
Throws std::out_of_range
if it does not hold a valid value.
lines()
#
std::vector<std::string> const& lines() const noexcept;
Returns all lines in the area pointed to by the source_location
.
Returns a reference to an empty std::vector
if it does not hold a valid value.
Non-Member Functions #
format_location
#
template<typename ... Ts>
std::string format_location(const source_location& loc, const std::string& msg,
const Ts& ... locs_and_msgs);
Formats the specified source_location
and its associated message as follows:
-> {filename.toml}
|
1 | a = 42
| ^-- {message}
If colorization is enabled, ANSI escape sequences will be added for coloring.
When multiple locs_and_msgs
are provided, they must be in the order of const source_location&
followed by const std::string&
, and the next pair in the same order, and so on.
Example: Multiple source_location
and std::string
#
When multiple source_location
and std::string
pairs are provided, they are formatted as follows:
source_location& loc0;
source_location& loc1;
source_location& loc2;
std::string msg0;
std::string msg1;
std::string msg2;
format_location(loc0, msg0,
loc1, msg1,
loc2, msg2);
-> {filename0.toml}
|
1 | a = 42
| ^-- {message0}
|
-> {filename1.toml}
|
2 | b = 3.14
| ^-- {message1}
|
-> {filename2.toml}
|
3 | c = "foo"
| ^-- {message2}