123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 |
- /*
- * Copyright (c) 2023, Dan Klishch <danilklishch@gmail.com>
- *
- * SPDX-License-Identifier: BSD-2-Clause
- */
- #include "Parser/ParseError.h"
- #include "DiagnosticEngine.h"
- namespace JSSpecCompiler {
- NonnullRefPtr<ParseError> ParseError::create(String message, XML::Node const* node)
- {
- return make_ref_counted<ParseError>(move(message), node);
- }
- NonnullRefPtr<ParseError> ParseError::create(StringView message, XML::Node const* node)
- {
- return create(MUST(String::from_utf8(message)), node);
- }
- // FIXME: Remove once String::formatted becomes infallible.
- NonnullRefPtr<ParseError> ParseError::create(ErrorOr<String> message, XML::Node const* node)
- {
- return create(MUST(message), node);
- }
- String ParseError::to_string() const
- {
- StringBuilder builder;
- builder.appendff("{}\n", m_message);
- XML::Node const* current = m_node;
- while (current != nullptr) {
- builder.appendff(" at {}:{} ", current->offset.line + 1, current->offset.column + 1);
- if (current->is_element()) {
- builder.append("<"sv);
- builder.append(current->as_element().name);
- for (auto [key, value] : current->as_element().attributes)
- builder.appendff(" {}=\"{}\"", key, value);
- builder.append(">\n"sv);
- } else if (current->is_text()) {
- builder.appendff("text \"{}\"\n", current->as_text().builder.string_view().trim_whitespace());
- } else {
- builder.appendff("comment");
- }
- current = current->parent;
- }
- return MUST(builder.to_string());
- }
- XML::Offset ParseError::offset() const
- {
- return m_node->offset;
- }
- }
|