ruby_tree_sitter 0.20.6.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (40) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +21 -0
  3. data/README.md +152 -0
  4. data/ext/tree_sitter/encoding.c +29 -0
  5. data/ext/tree_sitter/extconf.rb +172 -0
  6. data/ext/tree_sitter/input.c +126 -0
  7. data/ext/tree_sitter/input_edit.c +42 -0
  8. data/ext/tree_sitter/language.c +134 -0
  9. data/ext/tree_sitter/logger.c +212 -0
  10. data/ext/tree_sitter/macros.h +163 -0
  11. data/ext/tree_sitter/node.c +310 -0
  12. data/ext/tree_sitter/parser.c +203 -0
  13. data/ext/tree_sitter/point.c +26 -0
  14. data/ext/tree_sitter/quantifier.c +43 -0
  15. data/ext/tree_sitter/query.c +157 -0
  16. data/ext/tree_sitter/query_capture.c +28 -0
  17. data/ext/tree_sitter/query_cursor.c +103 -0
  18. data/ext/tree_sitter/query_error.c +41 -0
  19. data/ext/tree_sitter/query_match.c +44 -0
  20. data/ext/tree_sitter/query_predicate_step.c +83 -0
  21. data/ext/tree_sitter/range.c +35 -0
  22. data/ext/tree_sitter/symbol_type.c +46 -0
  23. data/ext/tree_sitter/tree.c +145 -0
  24. data/ext/tree_sitter/tree_cursor.c +97 -0
  25. data/ext/tree_sitter/tree_sitter.c +32 -0
  26. data/ext/tree_sitter/tree_sitter.h +107 -0
  27. data/lib/tree_sitter/node.rb +164 -0
  28. data/lib/tree_sitter/version.rb +5 -0
  29. data/lib/tree_sitter.rb +13 -0
  30. data/test/README.md +15 -0
  31. data/test/test_helper.rb +9 -0
  32. data/test/tree_sitter/language_test.rb +68 -0
  33. data/test/tree_sitter/logger_test.rb +69 -0
  34. data/test/tree_sitter/node_test.rb +355 -0
  35. data/test/tree_sitter/parser_test.rb +140 -0
  36. data/test/tree_sitter/query_test.rb +153 -0
  37. data/test/tree_sitter/tree_cursor_test.rb +83 -0
  38. data/test/tree_sitter/tree_test.rb +51 -0
  39. data/tree_sitter.gemspec +32 -0
  40. metadata +189 -0
@@ -0,0 +1,83 @@
1
+ #include "tree_sitter.h"
2
+
3
+ extern VALUE mTreeSitter;
4
+
5
+ VALUE cQueryPredicateStep;
6
+
7
+ const char *done = "Done";
8
+ const char *capture = "capture";
9
+ const char *string = "String";
10
+
11
+ DATA_WRAP(QueryPredicateStep, query_predicate_step)
12
+
13
+ VALUE new_query_predicate_step_type(TSQueryPredicateStepType type) {
14
+ switch (type) {
15
+ case TSQueryPredicateStepTypeDone:
16
+ return ID2SYM(rb_intern(done));
17
+ case TSQueryPredicateStepTypeCapture:
18
+ return ID2SYM(rb_intern(capture));
19
+ case TSQueryPredicateStepTypeString:
20
+ return ID2SYM(rb_intern(string));
21
+ default:
22
+ return Qnil;
23
+ }
24
+ }
25
+
26
+ static const char *query_predicate_type_string(TSQueryPredicateStepType type) {
27
+ switch (type) {
28
+ case TSQueryPredicateStepTypeDone:
29
+ return done;
30
+ case TSQueryPredicateStepTypeCapture:
31
+ return capture;
32
+ case TSQueryPredicateStepTypeString:
33
+ return string;
34
+ default:
35
+ return "???";
36
+ }
37
+ }
38
+
39
+ TSQueryPredicateStepType value_to_query_predicate_step_type(VALUE step_type) {
40
+ VALUE type = SYM2ID(step_type);
41
+ VALUE c = rb_const_get_at(cQueryPredicateStep, rb_intern(capture));
42
+ VALUE s = rb_const_get_at(cQueryPredicateStep, rb_intern(string));
43
+
44
+ // NOTE: should we emit a warning instead of defaulting to done?
45
+ if (type == c) {
46
+ return TSQueryPredicateStepTypeCapture;
47
+ } else if (type == s) {
48
+ return TSQueryPredicateStepTypeString;
49
+ } else {
50
+ return TSQueryPredicateStepTypeDone;
51
+ }
52
+ }
53
+
54
+ static VALUE query_predicate_step_inspect(VALUE self) {
55
+ query_predicate_step_t *step = unwrap(self);
56
+ return rb_sprintf("{value_id=%i, type=%s}", step->data.value_id,
57
+ query_predicate_type_string(step->data.type));
58
+ }
59
+
60
+ DATA_DEFINE_ACCESSOR(query_predicate_step, type, new_query_predicate_step_type,
61
+ value_to_query_predicate_step_type)
62
+ DATA_DEFINE_ACCESSOR(query_predicate_step, value_id, UINT2NUM, NUM2UINT)
63
+
64
+ void init_query_predicate_step(void) {
65
+ cQueryPredicateStep =
66
+ rb_define_class_under(mTreeSitter, "QueryPredicateStep", rb_cObject);
67
+
68
+ rb_define_alloc_func(cQueryPredicateStep, query_predicate_step_allocate);
69
+
70
+ /* Constants */
71
+ rb_define_const(cQueryPredicateStep, "DONE", ID2SYM(rb_intern(done)));
72
+ rb_define_const(cQueryPredicateStep, "CAPTURE", ID2SYM(rb_intern(capture)));
73
+ rb_define_const(cQueryPredicateStep, "STRING", ID2SYM(rb_intern(string)));
74
+
75
+ /* Class methods */
76
+ DECLARE_ACCESSOR(cQueryPredicateStep, query_predicate_step, type)
77
+ DECLARE_ACCESSOR(cQueryPredicateStep, query_predicate_step, value_id)
78
+
79
+ rb_define_method(cQueryPredicateStep, "inspect", query_predicate_step_inspect,
80
+ 0);
81
+ rb_define_method(cQueryPredicateStep, "to_s", query_predicate_step_inspect,
82
+ 0);
83
+ }
@@ -0,0 +1,35 @@
1
+ #include "tree_sitter.h"
2
+
3
+ extern VALUE mTreeSitter;
4
+
5
+ VALUE cRange;
6
+
7
+ DATA_WRAP(Range, range)
8
+ DATA_DEFINE_ACCESSOR(range, start_point, new_point_by_val, value_to_point)
9
+ DATA_DEFINE_ACCESSOR(range, end_point, new_point_by_val, value_to_point)
10
+ DATA_DEFINE_ACCESSOR(range, start_byte, UINT2NUM, NUM2UINT)
11
+ DATA_DEFINE_ACCESSOR(range, end_byte, UINT2NUM, NUM2UINT)
12
+
13
+ static VALUE range_inspect(VALUE self) {
14
+ range_t *range = unwrap(self);
15
+ return rb_sprintf("{start_point= %+" PRIsVALUE ", end_point=%+" PRIsVALUE
16
+ ", start_byte=%i, end_byte=%i}",
17
+ new_point_by_val(range->data.start_point),
18
+ new_point_by_val(range->data.end_point),
19
+ range->data.start_byte, range->data.end_byte);
20
+ }
21
+
22
+ void init_range(void) {
23
+ cRange = rb_define_class_under(mTreeSitter, "Range", rb_cObject);
24
+
25
+ rb_define_alloc_func(cRange, range_allocate);
26
+
27
+ /* Class methods */
28
+ DECLARE_ACCESSOR(cRange, range, start_point)
29
+ DECLARE_ACCESSOR(cRange, range, end_point)
30
+ DECLARE_ACCESSOR(cRange, range, start_byte)
31
+ DECLARE_ACCESSOR(cRange, range, end_byte)
32
+
33
+ rb_define_method(cRange, "inspect", range_inspect, 0);
34
+ rb_define_method(cRange, "to_s", range_inspect, 0);
35
+ }
@@ -0,0 +1,46 @@
1
+ #include "tree_sitter.h"
2
+
3
+ extern VALUE mTreeSitter;
4
+
5
+ VALUE mSymbolType;
6
+
7
+ const char *regular = "regular";
8
+ const char *anonymous = "anonymous";
9
+ const char *auxiliary = "auxiliary";
10
+
11
+ TSSymbolType value_to_symbol_type(VALUE symbol_type) {
12
+ VALUE sym = SYM2ID(symbol_type);
13
+ VALUE anon = rb_const_get_at(mSymbolType, rb_intern(anonymous));
14
+ VALUE aux = rb_const_get_at(mSymbolType, rb_intern(auxiliary));
15
+
16
+ // NOTE: should we emit a warning instead of defaulting to regular?
17
+ if (sym == anon) {
18
+ return TSSymbolTypeAnonymous;
19
+ } else if (sym == aux) {
20
+ return TSSymbolTypeAuxiliary;
21
+ } else {
22
+ return TSSymbolTypeRegular;
23
+ }
24
+ }
25
+
26
+ VALUE new_symbol_type(TSSymbolType symbol_type) {
27
+ switch (symbol_type) {
28
+ case TSSymbolTypeRegular:
29
+ return ID2SYM(rb_intern(regular));
30
+ case TSSymbolTypeAnonymous:
31
+ return ID2SYM(rb_intern(anonymous));
32
+ case TSSymbolTypeAuxiliary:
33
+ return ID2SYM(rb_intern(auxiliary));
34
+ default:
35
+ return ID2SYM(rb_intern("this_should_never_get_reached"));
36
+ }
37
+ }
38
+
39
+ void init_symbol_type(void) {
40
+ mSymbolType = rb_define_module_under(mTreeSitter, "SymbolType");
41
+
42
+ /* Constants */
43
+ rb_define_const(mSymbolType, "REGULAR", ID2SYM(rb_intern(regular)));
44
+ rb_define_const(mSymbolType, "ANONYMOUS", ID2SYM(rb_intern(anonymous)));
45
+ rb_define_const(mSymbolType, "AUXILIARY", ID2SYM(rb_intern(auxiliary)));
46
+ }
@@ -0,0 +1,145 @@
1
+ #include "tree_sitter.h"
2
+
3
+ extern VALUE mTreeSitter;
4
+
5
+ VALUE cTree;
6
+
7
+ int tree_rc_free(const TSTree *tree) {
8
+ VALUE ptr = ULONG2NUM((uintptr_t)tree);
9
+ VALUE rc = rb_cv_get(cTree, "@@rc");
10
+ VALUE val = rb_hash_lookup(rc, ptr);
11
+
12
+ if (!NIL_P(val)) {
13
+ unsigned int count = NUM2UINT(val);
14
+ --count;
15
+ if (count < 1) {
16
+ rb_hash_delete(rc, ptr);
17
+ ts_tree_delete((TSTree *)tree);
18
+ return 1;
19
+ } else {
20
+ rb_hash_aset(rc, ptr, ULONG2NUM(count));
21
+ return 0;
22
+ }
23
+ } else {
24
+ return 1;
25
+ }
26
+ }
27
+
28
+ void tree_rc_new(const TSTree *tree) {
29
+ VALUE ptr = ULONG2NUM((uintptr_t)tree);
30
+ VALUE rc = rb_cv_get(cTree, "@@rc");
31
+ VALUE val = rb_hash_lookup(rc, ptr);
32
+
33
+ if (NIL_P(val)) {
34
+ rb_hash_aset(rc, ptr, UINT2NUM(1));
35
+ } else {
36
+ rb_hash_aset(rc, ptr, UINT2NUM(NUM2UINT(val) + 1));
37
+ }
38
+ }
39
+
40
+ DATA_TYPE(TSTree *, tree)
41
+ static void tree_free(void *ptr) {
42
+ tree_t *type = (tree_t *)ptr;
43
+ if (tree_rc_free(type->data)) {
44
+ xfree(ptr);
45
+ }
46
+ }
47
+
48
+ DATA_MEMSIZE(tree)
49
+ DATA_DECLARE_DATA_TYPE(tree)
50
+ DATA_ALLOCATE(tree)
51
+ DATA_UNWRAP(tree)
52
+
53
+ VALUE new_tree(TSTree *ptr) {
54
+ if (ptr == NULL) {
55
+ return Qnil;
56
+ }
57
+ VALUE res = tree_allocate(cTree);
58
+ tree_t *type = unwrap(res);
59
+ type->data = ptr;
60
+ tree_rc_new(ptr);
61
+ return res;
62
+ }
63
+
64
+ DATA_FROM_VALUE(TSTree *, tree)
65
+
66
+ static VALUE tree_copy(VALUE self) { return new_tree(ts_tree_copy(SELF)); }
67
+
68
+ static VALUE tree_root_node(VALUE self) {
69
+ return new_node_by_val(ts_tree_root_node(SELF));
70
+ }
71
+
72
+ static VALUE tree_language(VALUE self) {
73
+ return new_language(ts_tree_language(SELF));
74
+ }
75
+
76
+ static VALUE tree_edit(VALUE self, VALUE edit) {
77
+ TSInputEdit in = value_to_input_edit(edit);
78
+ ts_tree_edit(SELF, &in);
79
+ return Qnil;
80
+ }
81
+
82
+ static VALUE tree_changed_ranges(VALUE _self, VALUE old_tree, VALUE new_tree) {
83
+ TSTree *old = unwrap(old_tree)->data;
84
+ TSTree *new = unwrap(new_tree)->data;
85
+ uint32_t length;
86
+ TSRange *ranges = ts_tree_get_changed_ranges(old, new, &length);
87
+ VALUE res = rb_ary_new_capa(length);
88
+
89
+ for (uint32_t i = 0; i < length; i++) {
90
+ rb_ary_push(res, new_range(&ranges[i]));
91
+ }
92
+
93
+ if (ranges) {
94
+ free(ranges);
95
+ }
96
+
97
+ return res;
98
+ }
99
+
100
+ static VALUE tree_print_dot_graph(VALUE self, VALUE file) {
101
+ Check_Type(file, T_STRING);
102
+ char *path = StringValueCStr(file);
103
+ FILE *fd = fopen(path, "w+");
104
+ ts_tree_print_dot_graph(SELF, fd);
105
+ fclose(fd);
106
+ return Qnil;
107
+ }
108
+
109
+ static VALUE tree_finalizer(VALUE _self) {
110
+ VALUE rc = rb_cv_get(cTree, "@@rc");
111
+ VALUE keys = rb_funcall(rc, rb_intern("keys"), 0);
112
+ VALUE *elements = RARRAY_PTR(keys);
113
+ long len = RARRAY_LEN(keys);
114
+
115
+ for (long i = 0; i < len; ++i) {
116
+ VALUE curr = elements[i];
117
+ unsigned int val = NUM2UINT(rb_hash_lookup(rc, curr));
118
+ if (val > 0) {
119
+ ts_tree_delete((TSTree *)NUM2ULONG(curr));
120
+ }
121
+
122
+ rb_hash_delete(rc, curr);
123
+ }
124
+
125
+ return Qnil;
126
+ }
127
+
128
+ void init_tree(void) {
129
+ cTree = rb_define_class_under(mTreeSitter, "Tree", rb_cObject);
130
+
131
+ rb_undef_alloc_func(cTree);
132
+
133
+ /* Class methods */
134
+ rb_define_method(cTree, "copy", tree_copy, 0);
135
+ rb_define_method(cTree, "root_node", tree_root_node, 0);
136
+ rb_define_method(cTree, "language", tree_language, 0);
137
+ rb_define_method(cTree, "edit", tree_edit, 1);
138
+ rb_define_module_function(cTree, "changed_ranges", tree_changed_ranges, 2);
139
+ rb_define_method(cTree, "print_dot_graph", tree_print_dot_graph, 1);
140
+ rb_define_module_function(cTree, "finalizer", tree_finalizer, 0);
141
+
142
+ // Reference-count created trees
143
+ VALUE rc = rb_hash_new();
144
+ rb_cv_set(cTree, "@@rc", rc);
145
+ }
@@ -0,0 +1,97 @@
1
+ #include "tree_sitter.h"
2
+
3
+ extern VALUE mTreeSitter;
4
+
5
+ VALUE cTreeCursor;
6
+
7
+ DATA_TYPE(TSTreeCursor, tree_cursor)
8
+ static void tree_cursor_free(void *ptr) {
9
+ tree_cursor_t *type = (tree_cursor_t *)ptr;
10
+ ts_tree_cursor_delete(&type->data);
11
+ xfree(ptr);
12
+ }
13
+ DATA_MEMSIZE(tree_cursor)
14
+ DATA_DECLARE_DATA_TYPE(tree_cursor)
15
+ DATA_ALLOCATE(tree_cursor)
16
+ DATA_UNWRAP(tree_cursor)
17
+ DATA_NEW(cTreeCursor, TSTreeCursor, tree_cursor)
18
+ DATA_FROM_VALUE(TSTreeCursor, tree_cursor)
19
+
20
+ static VALUE tree_cursor_initialize(VALUE self, VALUE node) {
21
+ TSNode n = value_to_node(node);
22
+ tree_cursor_t *ptr = unwrap(self);
23
+ ptr->data = ts_tree_cursor_new(n);
24
+ return self;
25
+ }
26
+
27
+ static VALUE tree_cursor_reset(VALUE self, VALUE node) {
28
+ ts_tree_cursor_reset(&SELF, value_to_node(node));
29
+ return Qnil;
30
+ }
31
+
32
+ static VALUE tree_cursor_current_node(VALUE self) {
33
+ TSNode node = ts_tree_cursor_current_node(&SELF);
34
+ return new_node(&node);
35
+ }
36
+
37
+ static VALUE tree_cursor_current_field_name(VALUE self) {
38
+ return safe_str(ts_tree_cursor_current_field_name(&SELF));
39
+ }
40
+
41
+ static VALUE tree_cursor_current_field_id(VALUE self) {
42
+ return UINT2NUM(ts_tree_cursor_current_field_id(&SELF));
43
+ }
44
+
45
+ static VALUE tree_cursor_goto_parent(VALUE self) {
46
+ return ts_tree_cursor_goto_parent(&SELF) ? Qtrue : Qfalse;
47
+ }
48
+
49
+ static VALUE tree_cursor_goto_next_sibling(VALUE self) {
50
+ return ts_tree_cursor_goto_next_sibling(&SELF) ? Qtrue : Qfalse;
51
+ }
52
+
53
+ static VALUE tree_cursor_goto_first_child(VALUE self) {
54
+ return ts_tree_cursor_goto_first_child(&SELF) ? Qtrue : Qfalse;
55
+ }
56
+
57
+ static VALUE tree_cursor_goto_first_child_for_byte(VALUE self, VALUE byte) {
58
+ return LL2NUM(
59
+ ts_tree_cursor_goto_first_child_for_byte(&SELF, NUM2UINT(byte)));
60
+ }
61
+
62
+ static VALUE tree_cursor_goto_first_child_for_point(VALUE self, VALUE point) {
63
+ return LL2NUM(
64
+ ts_tree_cursor_goto_first_child_for_point(&SELF, value_to_point(point)));
65
+ }
66
+
67
+ static VALUE tree_cursor_copy(VALUE self) {
68
+ VALUE res = tree_cursor_allocate(cTreeCursor);
69
+ tree_cursor_t *ptr = unwrap(res);
70
+ ptr->data = ts_tree_cursor_copy(&SELF);
71
+ return res;
72
+ }
73
+
74
+ void init_tree_cursor(void) {
75
+ cTreeCursor = rb_define_class_under(mTreeSitter, "TreeCursor", rb_cObject);
76
+
77
+ rb_define_alloc_func(cTreeCursor, tree_cursor_allocate);
78
+
79
+ /* Class methods */
80
+ rb_define_method(cTreeCursor, "initialize", tree_cursor_initialize, 1);
81
+ rb_define_method(cTreeCursor, "reset", tree_cursor_reset, 1);
82
+ rb_define_method(cTreeCursor, "current_node", tree_cursor_current_node, 0);
83
+ rb_define_method(cTreeCursor, "current_field_name",
84
+ tree_cursor_current_field_name, 0);
85
+ rb_define_method(cTreeCursor, "current_field_id",
86
+ tree_cursor_current_field_id, 0);
87
+ rb_define_method(cTreeCursor, "goto_parent", tree_cursor_goto_parent, 0);
88
+ rb_define_method(cTreeCursor, "goto_next_sibling",
89
+ tree_cursor_goto_next_sibling, 0);
90
+ rb_define_method(cTreeCursor, "goto_first_child",
91
+ tree_cursor_goto_first_child, 0);
92
+ rb_define_method(cTreeCursor, "goto_first_child_for_byte",
93
+ tree_cursor_goto_first_child_for_byte, 1);
94
+ rb_define_method(cTreeCursor, "goto_first_child_for_point",
95
+ tree_cursor_goto_first_child_for_point, 1);
96
+ rb_define_method(cTreeCursor, "copy", tree_cursor_copy, 0);
97
+ }
@@ -0,0 +1,32 @@
1
+ #include "tree_sitter.h"
2
+
3
+ VALUE mTreeSitter;
4
+
5
+ void Init_tree_sitter() {
6
+ mTreeSitter = rb_define_module("TreeSitter");
7
+
8
+ rb_define_const(mTreeSitter, "LANGUAGE_VERSION",
9
+ INT2NUM(TREE_SITTER_LANGUAGE_VERSION));
10
+ rb_define_const(mTreeSitter, "MIN_COMPATIBLE_LANGUAGE_VERSION",
11
+ TREE_SITTER_MIN_COMPATIBLE_LANGUAGE_VERSION);
12
+
13
+ init_encoding();
14
+ init_input();
15
+ init_input_edit();
16
+ init_language();
17
+ init_logger();
18
+ init_node();
19
+ init_parser();
20
+ init_point();
21
+ init_quantifier();
22
+ init_query();
23
+ init_query_capture();
24
+ init_query_cursor();
25
+ init_query_error();
26
+ init_query_match();
27
+ init_query_predicate_step();
28
+ init_range();
29
+ init_symbol_type();
30
+ init_tree();
31
+ init_tree_cursor();
32
+ }
@@ -0,0 +1,107 @@
1
+ #ifndef _RB_TREE_SITTER_H
2
+ #define _RB_TREE_SITTER_H
3
+
4
+ #include "macros.h"
5
+ #include <dlfcn.h>
6
+ #include <fcntl.h>
7
+ #include <ruby.h>
8
+ #include <stdio.h>
9
+ #include <string.h>
10
+ #include <tree_sitter/api.h>
11
+
12
+ static inline VALUE safe_str(const char *str) {
13
+ if (str == NULL) {
14
+ return Qnil;
15
+ } else {
16
+ return rb_utf8_str_new_cstr(str);
17
+ }
18
+ }
19
+
20
+ static inline VALUE safe_str2(const char *str, uint32_t len) {
21
+ if (str == NULL) {
22
+ return Qnil;
23
+ } else if (len == 0) {
24
+ return rb_utf8_str_new_cstr("");
25
+ } else {
26
+ return rb_utf8_str_new(str, len);
27
+ }
28
+ }
29
+
30
+ static inline VALUE safe_symbol(const char *str) {
31
+ if (str == NULL) {
32
+ return Qnil;
33
+ } else {
34
+ return ID2SYM(rb_intern(str));
35
+ }
36
+ }
37
+
38
+ // VALUE to TS* converters
39
+
40
+ TSInput value_to_input(VALUE);
41
+ TSInputEdit value_to_input_edit(VALUE);
42
+ TSInputEncoding value_to_encoding(VALUE);
43
+ TSLanguage *value_to_language(VALUE);
44
+ TSLogger value_to_logger(VALUE);
45
+ TSNode value_to_node(VALUE);
46
+ TSPoint value_to_point(VALUE);
47
+ TSQuantifier value_to_quantifier(VALUE);
48
+ TSQuery *value_to_query(VALUE);
49
+ TSQueryCursor *value_to_query_cursor(VALUE);
50
+ TSQueryError value_to_query_error(VALUE);
51
+ TSQueryMatch value_to_query_match(VALUE);
52
+ TSQueryPredicateStep value_to_query_predicate_step(VALUE);
53
+ TSQueryPredicateStepType value_to_query_predicate_step_type(VALUE);
54
+ TSRange value_to_range(VALUE);
55
+ TSSymbolType value_to_symbol_type(VALUE);
56
+ TSTree *value_to_tree(VALUE);
57
+ TSTreeCursor value_to_tree_cursor(VALUE);
58
+
59
+ // TS* to VALUE converters
60
+ VALUE new_input(const TSInput *);
61
+ VALUE new_language(const TSLanguage *);
62
+ VALUE new_logger(const TSLogger *);
63
+ VALUE new_logger_by_val(TSLogger);
64
+ VALUE new_node(const TSNode *);
65
+ VALUE new_node_by_val(TSNode);
66
+ VALUE new_point(const TSPoint *);
67
+ VALUE new_point_by_val(TSPoint);
68
+ VALUE new_query_capture(const TSQueryCapture *);
69
+ VALUE new_query_match(const TSQueryMatch *);
70
+ VALUE new_query_predicate_step(const TSQueryPredicateStep *);
71
+ VALUE new_range(const TSRange *);
72
+ VALUE new_symbol_type(TSSymbolType);
73
+ VALUE new_tree(TSTree *);
74
+
75
+ // All init_* functions are called from Init_tree_sitter
76
+ void init_encoding(void);
77
+ void init_input(void);
78
+ void init_input_edit(void);
79
+ void init_language(void);
80
+ void init_logger(void);
81
+ void init_node(void);
82
+ void init_parser(void);
83
+ void init_point(void);
84
+ void init_quantifier(void);
85
+ void init_query(void);
86
+ void init_query_capture(void);
87
+ void init_query_cursor(void);
88
+ void init_query_error(void);
89
+ void init_query_match(void);
90
+ void init_query_predicate_step(void);
91
+ void init_range(void);
92
+ void init_symbol_type(void);
93
+ void init_tree(void);
94
+ void init_tree_cursor(void);
95
+
96
+ // Other helpers
97
+ const char *quantifier_str(TSQuantifier);
98
+ const char *query_error_str(TSQueryError);
99
+
100
+ // TSTree reference counting
101
+ int tree_rc_free(const TSTree *);
102
+ void tree_rc_new(const TSTree *);
103
+
104
+ // This is a special entry-point for the extension
105
+ void Init_tree_sitter(void);
106
+
107
+ #endif