34 using Value = std::variant<double, std::string, Keyword, std::vector<Node>,
Namespace>;
41 explicit Node(
double value);
42 explicit Node(
long value);
51 [[nodiscard]]
const std::string& string() const noexcept;
58 [[nodiscard]]
double number() const noexcept;
65 [[nodiscard]]
Keyword keyword() const noexcept;
72 [[nodiscard]]
Namespace& arkNamespace() noexcept;
79 [[nodiscard]] const
Namespace& constArkNamespace() const noexcept;
86 void push_back(const
Node& node) noexcept;
93 std::vector<
Node>& list() noexcept;
100 [[nodiscard]] const
std::vector<
Node>& constList() const noexcept;
107 [[nodiscard]]
NodeType nodeType() const noexcept;
114 [[nodiscard]]
bool isListLike() const noexcept;
121 [[nodiscard]]
bool isFunction() const noexcept;
128 [[nodiscard]] const
std::optional<
std::
string>& getUnqualifiedName() const noexcept;
135 void updateValueAndType(const
Node& source) noexcept;
142 void setNodeType(
NodeType type) noexcept;
149 void setUnqualifiedName(const
std::
string& name) noexcept;
156 void setString(const
std::
string& value) noexcept;
163 void setPositionFrom(const
Node& source) noexcept;
170 Node& attachNearestCommentBefore(const
std::
string& comment);
177 Node& attachCommentAfter(const
std::
string& comment);
183 void setAltSyntax(
bool toggle);
189 void setFunctionKind(
bool anonymous);
196 [[nodiscard]]
bool isAnonymousFunction() const noexcept;
203 [[nodiscard]]
FileSpan position() const noexcept;
210 [[nodiscard]] const
std::
string& filename() const noexcept;
216 [[nodiscard]] const
std::
string& comment() const noexcept;
222 [[nodiscard]] const
std::
string& commentAfter() const noexcept;
228 [[nodiscard]]
std::
string repr() const noexcept;
235 [[nodiscard]]
std::ostream& debugPrint(
std::ostream& os) const noexcept;
237 friend
bool operator==(const
Node& A, const
Node& B);
238 friend
bool operator<(const
Node& A, const
Node& B);
244 std::optional<std::string> m_unqualified_name { std::nullopt };
250 bool m_alt_syntax =
false;
251 bool m_is_anonymous_function =
true;