33 using Value = std::variant<double, std::string, Keyword, std::vector<Node>,
Namespace>;
40 explicit Node(
double value);
41 explicit Node(
long value);
50 [[nodiscard]]
const std::string& string() const noexcept;
57 [[nodiscard]]
double number() const noexcept;
64 [[nodiscard]]
Keyword keyword() const noexcept;
71 [[nodiscard]]
Namespace& arkNamespace() noexcept;
78 [[nodiscard]] const
Namespace& constArkNamespace() const noexcept;
85 void push_back(const
Node& node) noexcept;
92 std::vector<
Node>& list() noexcept;
99 [[nodiscard]] const std::vector<
Node>& constList() const noexcept;
106 [[nodiscard]]
NodeType nodeType() const noexcept;
113 [[nodiscard]]
bool isListLike() const noexcept;
120 [[nodiscard]]
bool isStringLike() const noexcept;
127 void updateValueAndType(const
Node& source) noexcept;
134 void setNodeType(
NodeType type) noexcept;
141 void setString(const std::
string& value) noexcept;
149 void setPos(std::
size_t line, std::
size_t col) noexcept;
156 void setFilename(const std::
string& filename) noexcept;
163 Node& attachNearestCommentBefore(const std::
string& comment);
170 Node& attachCommentAfter(const std::
string& comment);
177 [[nodiscard]] std::
size_t line() const noexcept;
184 [[nodiscard]] std::
size_t col() const noexcept;
191 [[nodiscard]] const std::
string& filename() const noexcept;
197 [[nodiscard]] const std::
string& comment() const noexcept;
203 [[nodiscard]] const std::
string& commentAfter() const noexcept;
209 [[nodiscard]] std::
string repr() const noexcept;
216 [[nodiscard]] std::ostream& debugPrint(std::ostream& os) const noexcept;
218 friend
bool operator==(const
Node& A, const
Node& B);
219 friend
bool operator<(const
Node& A, const
Node& B);
225 std::
size_t m_line = 0, m_col = 0;
226 std::
string m_filename;
227 std::
string m_comment;
228 std::
string m_after_comment;