mirror of
https://codeberg.org/ProgramSnail/lang.git
synced 2025-12-07 07:28:45 +00:00
bug fixes, tests passed, result modifier (!) added to function arguments and to types
This commit is contained in:
parent
4470454838
commit
3914ff7d8b
16 changed files with 418 additions and 62 deletions
|
|
@ -2,7 +2,8 @@
|
|||
|
||||
#include <string>
|
||||
|
||||
// for clangd
|
||||
#include "utils.hpp"
|
||||
|
||||
#include "tree_sitter/api.h"
|
||||
|
||||
extern "C" const TSLanguage *tree_sitter_lang();
|
||||
|
|
@ -16,21 +17,47 @@ public:
|
|||
Node(const TSNode &node, const std::string *source)
|
||||
: node_(node), source_(source) {}
|
||||
|
||||
std::string get_type() const { return ts_node_type(node_); }
|
||||
std::string get_type() const {
|
||||
if (is_null()) {
|
||||
error_handling::handle_general_error(
|
||||
"Null parsing node method called (get_type)");
|
||||
}
|
||||
return ts_node_type(node_);
|
||||
}
|
||||
|
||||
std::pair<size_t, size_t> get_start_point() const {
|
||||
if (is_null()) {
|
||||
error_handling::handle_general_error(
|
||||
"Null parsing node method called (get_start_point)");
|
||||
}
|
||||
|
||||
TSPoint point = ts_node_start_point(node_);
|
||||
return {point.row, point.column};
|
||||
}
|
||||
|
||||
std::pair<size_t, size_t> get_end_point() const {
|
||||
if (is_null()) {
|
||||
error_handling::handle_general_error(
|
||||
"Null parsing node method called (get_end_point)");
|
||||
}
|
||||
|
||||
TSPoint point = ts_node_end_point(node_);
|
||||
return {point.row, point.column};
|
||||
}
|
||||
|
||||
std::string get_as_sexpression() const { return ts_node_string(node_); }
|
||||
std::string get_as_sexpression() const {
|
||||
if (is_null()) {
|
||||
error_handling::handle_general_error(
|
||||
"Null parsing node method called (get_as_sexpression)");
|
||||
}
|
||||
return ts_node_string(node_);
|
||||
}
|
||||
|
||||
std::string get_value() const { // from source
|
||||
if (is_null()) {
|
||||
error_handling::handle_general_error(
|
||||
"Null parsing node method called (get_value)");
|
||||
}
|
||||
size_t start = ts_node_start_byte(node_);
|
||||
size_t end = ts_node_end_byte(node_);
|
||||
return source_->substr(start, end - start);
|
||||
|
|
@ -38,47 +65,107 @@ public:
|
|||
|
||||
bool is_null() const { return ts_node_is_null(node_); }
|
||||
|
||||
bool is_named() const { return ts_node_is_named(node_); }
|
||||
bool is_named() const {
|
||||
if (is_null()) {
|
||||
error_handling::handle_general_error(
|
||||
"Null parsing node method called (is_named)");
|
||||
}
|
||||
return ts_node_is_named(node_);
|
||||
}
|
||||
|
||||
bool is_missing() const { return ts_node_is_missing(node_); }
|
||||
bool is_missing() const {
|
||||
if (is_null()) {
|
||||
error_handling::handle_general_error(
|
||||
"Null parsing node method called (is_missing)");
|
||||
}
|
||||
return ts_node_is_missing(node_);
|
||||
}
|
||||
|
||||
bool is_extra() const { // comments, etc.
|
||||
if (is_null()) {
|
||||
error_handling::handle_general_error(
|
||||
"Null parsing node method called (is_extra)");
|
||||
}
|
||||
return ts_node_is_extra(node_);
|
||||
}
|
||||
|
||||
bool has_error() const { return ts_node_has_error(node_); }
|
||||
bool has_error() const {
|
||||
if (is_null()) {
|
||||
error_handling::handle_general_error(
|
||||
"Null parsing node method called (has_error)");
|
||||
}
|
||||
return ts_node_has_error(node_);
|
||||
}
|
||||
|
||||
Node nth_child(size_t n) const {
|
||||
if (is_null()) {
|
||||
error_handling::handle_general_error(
|
||||
"Null parsing node method called (nth_child)");
|
||||
}
|
||||
return Node(ts_node_child(node_, n), source_);
|
||||
}
|
||||
|
||||
size_t child_count() const { return ts_node_child_count(node_); }
|
||||
size_t child_count() const {
|
||||
if (is_null()) {
|
||||
error_handling::handle_general_error(
|
||||
"Null parsing node method called (child_count)");
|
||||
}
|
||||
return ts_node_child_count(node_);
|
||||
}
|
||||
|
||||
Node nth_named_child(size_t n) const {
|
||||
if (is_null()) {
|
||||
error_handling::handle_general_error(
|
||||
"Null parsing node method called (nth_named_child)");
|
||||
}
|
||||
return Node(ts_node_named_child(node_, n), source_);
|
||||
}
|
||||
size_t named_child_count() const {
|
||||
if (is_null()) {
|
||||
error_handling::handle_general_error(
|
||||
"Null parsing node method called (named_child_count)");
|
||||
}
|
||||
return ts_node_named_child_count(node_);
|
||||
}
|
||||
|
||||
Node child_by_field_name(const std::string &name) const {
|
||||
if (is_null()) {
|
||||
error_handling::handle_general_error(
|
||||
"Null parsing node method called (child_by_field_name)");
|
||||
}
|
||||
return Node(ts_node_child_by_field_name(node_, name.c_str(), name.size()),
|
||||
source_);
|
||||
}
|
||||
|
||||
Node previous_sibling() const {
|
||||
if (is_null()) {
|
||||
error_handling::handle_general_error(
|
||||
"Null parsing node method called (previous_sibling)");
|
||||
}
|
||||
return Node(ts_node_prev_sibling(node_), source_);
|
||||
}
|
||||
|
||||
Node previous_named_sibling() const {
|
||||
if (is_null()) {
|
||||
error_handling::handle_general_error(
|
||||
"Null parsing node method called (previous_named_sibling)");
|
||||
}
|
||||
return Node(ts_node_prev_named_sibling(node_), source_);
|
||||
}
|
||||
|
||||
Node next_sibling() const {
|
||||
if (is_null()) {
|
||||
error_handling::handle_general_error(
|
||||
"Null parsing node method called (next_sibling)");
|
||||
}
|
||||
return Node(ts_node_next_sibling(node_), source_);
|
||||
}
|
||||
|
||||
Node next_named_sibling() const {
|
||||
if (is_null()) {
|
||||
error_handling::handle_general_error(
|
||||
"Null parsing node method called (next_named_sibling)");
|
||||
}
|
||||
return Node(ts_node_next_named_sibling(node_), source_);
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue