32 using Value = std::variant<double, std::string, Keyword, std::vector<Node>,
Namespace>;
39 explicit Node(
double value);
40 explicit Node(
long value);
49 [[nodiscard]]
const std::string& string() const noexcept;
56 [[nodiscard]]
double number() const noexcept;
63 [[nodiscard]]
Keyword keyword() const noexcept;
70 [[nodiscard]]
Namespace& arkNamespace() noexcept;
77 [[nodiscard]] const
Namespace& constArkNamespace() const noexcept;
84 void push_back(const
Node& node) noexcept;
91 std::vector<
Node>& list() noexcept;
98 [[nodiscard]] const std::vector<
Node>& constList() const noexcept;
105 [[nodiscard]]
NodeType nodeType() const noexcept;
112 [[nodiscard]]
bool isListLike() const noexcept;
119 [[nodiscard]]
bool isStringLike() const noexcept;
126 void updateValueAndType(const
Node& source) noexcept;
133 void setNodeType(
NodeType type) noexcept;
140 void setString(const std::
string& value) noexcept;
148 void setPos(std::
size_t line, std::
size_t col) noexcept;
155 void setFilename(const std::
string& filename) noexcept;
162 Node& attachNearestCommentBefore(const std::
string& comment);
169 Node& attachCommentAfter(const std::
string& comment);
176 [[nodiscard]] std::
size_t line() const noexcept;
183 [[nodiscard]] std::
size_t col() const noexcept;
190 [[nodiscard]] const std::
string& filename() const noexcept;
196 [[nodiscard]] const std::
string& comment() const noexcept;
202 [[nodiscard]] const std::
string& commentAfter() const noexcept;
208 [[nodiscard]] std::
string repr() const noexcept;
215 [[nodiscard]] std::ostream& debugPrint(std::ostream& os) const noexcept;
217 friend
bool operator==(const
Node& A, const
Node& B);
218 friend
bool operator<(const
Node& A, const
Node& B);
224 std::size_t m_line = 0, m_col = 0;