Class: TreeSitter::Query
- Inherits:
-
Object
- Object
- TreeSitter::Query
- Defined in:
- ext/tree_sitter/query.c
Instance Method Summary collapse
- #capture_count ⇒ Object
- #capture_name_for_id(id) ⇒ Object
- #capture_quantifier_for_id(id, capture_id) ⇒ Object
- #disable_capture(capture) ⇒ Object
- #disable_pattern(pattern) ⇒ Object
-
#initialize(language, source) ⇒ Object
constructor
Class methods.
- #pattern_count ⇒ Object
- #pattern_guaranteed_at_step?(byte_offset) ⇒ Boolean
- #predicates_for_pattern(pattern_index) ⇒ Object
- #start_byte_for_pattern(pattern_index) ⇒ Object
- #string_count ⇒ Object
- #string_value_for_id(id) ⇒ Object
Constructor Details
#initialize(language, source) ⇒ Object
Class methods
9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
# File 'ext/tree_sitter/query.c', line 9 static VALUE query_initialize(VALUE self, VALUE language, VALUE source) { TSLanguage *lang = value_to_language(language); const char *src = StringValuePtr(source); uint32_t len = (uint32_t)RSTRING_LEN(source); uint32_t error_offset = 0; TSQueryError error_type; TSQuery *res = ts_query_new(lang, src, len, &error_offset, &error_type); if (res == NULL || error_offset > 0) { rb_raise(rb_eRuntimeError, "Could not create query: TSQueryError%s", query_error_str(error_type)); } else { SELF = res; } return self; } |
Instance Method Details
#capture_count ⇒ Object
32 33 34 |
# File 'ext/tree_sitter/query.c', line 32 static VALUE query_capture_count(VALUE self) { return UINT2NUM(ts_query_capture_count(SELF)); } |
#capture_name_for_id(id) ⇒ Object
72 73 74 75 76 77 78 79 80 81 82 83 84 |
# File 'ext/tree_sitter/query.c', line 72 static VALUE query_capture_name_for_id(VALUE self, VALUE id) { const TSQuery *query = SELF; uint32_t index = NUM2UINT(id); uint32_t range = ts_query_capture_count(query); if (index >= range) { rb_raise(rb_eIndexError, "Index %d out of range (len = %d)", index, range); } else { uint32_t length; const char *name = ts_query_capture_name_for_id(query, index, &length); return safe_str2(name, length); } } |
#capture_quantifier_for_id(id, capture_id) ⇒ Object
86 87 88 89 90 91 92 93 94 95 96 97 98 99 |
# File 'ext/tree_sitter/query.c', line 86 static VALUE query_capture_quantifier_for_id(VALUE self, VALUE id, VALUE capture_id) { const TSQuery *query = SELF; uint32_t pattern = NUM2UINT(id); uint32_t index = NUM2UINT(capture_id); uint32_t range = ts_query_capture_count(query); if (index >= range) { rb_raise(rb_eIndexError, "Capture ID %d out of range (len = %d)", index, range); } else { return UINT2NUM(ts_query_capture_quantifier_for_id(query, pattern, index)); } } |
#disable_capture(capture) ⇒ Object
115 116 117 118 119 120 |
# File 'ext/tree_sitter/query.c', line 115 static VALUE query_disable_capture(VALUE self, VALUE capture) { const char *cap = StringValuePtr(capture); uint32_t length = (uint32_t)RSTRING_LEN(capture); ts_query_disable_capture(SELF, cap, length); return Qnil; } |
#disable_pattern(pattern) ⇒ Object
122 123 124 125 126 127 128 129 130 131 132 133 |
# File 'ext/tree_sitter/query.c', line 122 static VALUE query_disable_pattern(VALUE self, VALUE pattern) { TSQuery *query = SELF; uint32_t index = NUM2UINT(pattern); uint32_t range = ts_query_pattern_count(query); if (index >= range) { rb_raise(rb_eIndexError, "Index %d out of range (len = %d)", index, range); } else { ts_query_disable_pattern(query, index); return Qnil; } } |
#pattern_count ⇒ Object
28 29 30 |
# File 'ext/tree_sitter/query.c', line 28 static VALUE query_pattern_count(VALUE self) { return UINT2NUM(ts_query_pattern_count(SELF)); } |
#pattern_guaranteed_at_step?(byte_offset) ⇒ Boolean
67 68 69 70 |
# File 'ext/tree_sitter/query.c', line 67 static VALUE query_pattern_guaranteed_at_step(VALUE self, VALUE byte_offset) { return UINT2NUM( ts_query_is_pattern_guaranteed_at_step(SELF, NUM2UINT(byte_offset))); } |
#predicates_for_pattern(pattern_index) ⇒ Object
52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
# File 'ext/tree_sitter/query.c', line 52 static VALUE query_predicates_for_pattern(VALUE self, VALUE pattern_index) { const TSQuery *query = SELF; uint32_t index = NUM2UINT(pattern_index); uint32_t length; const TSQueryPredicateStep *steps = ts_query_predicates_for_pattern(query, index, &length); VALUE res = rb_ary_new_capa(length); for (uint32_t i = 0; i < length; i++) { rb_ary_push(res, new_query_predicate_step(&steps[i])); } return res; } |
#start_byte_for_pattern(pattern_index) ⇒ Object
40 41 42 43 44 45 46 47 48 49 50 |
# File 'ext/tree_sitter/query.c', line 40 static VALUE query_start_byte_for_pattern(VALUE self, VALUE pattern_index) { const TSQuery *query = SELF; uint32_t index = NUM2UINT(pattern_index); uint32_t range = ts_query_pattern_count(query); if (index >= range) { rb_raise(rb_eIndexError, "Index %d out of range (len = %d)", index, range); } else { return UINT2NUM(ts_query_start_byte_for_pattern(SELF, index)); } } |
#string_count ⇒ Object
36 37 38 |
# File 'ext/tree_sitter/query.c', line 36 static VALUE query_string_count(VALUE self) { return UINT2NUM(ts_query_string_count(SELF)); } |
#string_value_for_id(id) ⇒ Object
101 102 103 104 105 106 107 108 109 110 111 112 113 |
# File 'ext/tree_sitter/query.c', line 101 static VALUE query_string_value_for_id(VALUE self, VALUE id) { const TSQuery *query = SELF; uint32_t index = NUM2UINT(id); uint32_t range = ts_query_string_count(query); if (index >= range) { rb_raise(rb_eIndexError, "Index %d out of range (len = %d)", index, range); } else { uint32_t length; const char *string = ts_query_string_value_for_id(query, index, &length); return safe_str2(string, length); } } |