Skip to content
This repository was archived by the owner on Oct 18, 2024. It is now read-only.

Commit 2a1931b

Browse files
committed
feat(node): add support for TSNode.getGrammarSymbol()
1 parent 965c86d commit 2a1931b

File tree

3 files changed

+24
-4
lines changed

3 files changed

+24
-4
lines changed

android-tree-sitter/src/main/cpp/ts_node.cc

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -227,8 +227,12 @@ static jstring TSNode_getType(JNIEnv *env, jclass clazz, jobject self) {
227227
return result;
228228
}
229229

230-
static jint TSNode_getSymbol(JNIEnv *env, jclass clazz, jobject self) {
231-
return (jint) ts_node_symbol(_unmarshalNode(env, self));
230+
static jshort TSNode_getSymbol(JNIEnv *env, jclass clazz, jobject self) {
231+
return (jshort) ts_node_symbol(_unmarshalNode(env, self));
232+
}
233+
234+
static jshort TSNode_getGrammarSymbol(JNIEnv *env, jclass clazz, jobject self) {
235+
return (jshort) ts_node_grammar_symbol(_unmarshalNode(env, self));
232236
}
233237

234238
static jboolean TSNode_isNull(JNIEnv *env, jclass clazz, jobject self) {
@@ -331,6 +335,7 @@ void TSNode_Native__SetJniMethods(JNINativeMethod *methods, int count) {
331335
SET_JNI_METHOD(methods, TSNode_Native_getEndPoint, TSNode_getEndPoint);
332336
SET_JNI_METHOD(methods, TSNode_Native_getType, TSNode_getType);
333337
SET_JNI_METHOD(methods, TSNode_Native_getSymbol, TSNode_getSymbol);
338+
SET_JNI_METHOD(methods, TSNode_Native_getGrammarSymbol, TSNode_getGrammarSymbol);
334339
SET_JNI_METHOD(methods, TSNode_Native_isNull, TSNode_isNull);
335340
SET_JNI_METHOD(methods, TSNode_Native_isNamed, TSNode_isNamed);
336341
SET_JNI_METHOD(methods, TSNode_Native_isExtra, TSNode_isExtra);

android-tree-sitter/src/main/java/com/itsaky/androidide/treesitter/TSNode.java

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -535,11 +535,21 @@ public String getType() {
535535
*
536536
* @return The node's type as a numerical id.
537537
*/
538-
public int getSymbol() {
538+
public short getSymbol() {
539539
checkAccess();
540540
return Native.getSymbol(this);
541541
}
542542

543+
/**
544+
* Get the node's type as a numerical id as it appears in the grammar ignoring aliases. This
545+
* should be used in {@link TSLanguage#getNextState(short, short)} instead of
546+
* {@link #getSymbol()}.
547+
*/
548+
public short getGrammarSymbol() {
549+
checkAccess();
550+
return Native.getGrammarSymbol(this);
551+
}
552+
543553
/**
544554
* Check if the node is null.
545555
*/
@@ -708,7 +718,10 @@ private static final class Native {
708718
static native String getType(TSNode self);
709719

710720
@FastNative
711-
static native int getSymbol(TSNode self);
721+
static native short getSymbol(TSNode self);
722+
723+
@FastNative
724+
static native short getGrammarSymbol(TSNode self);
712725

713726
@FastNative
714727
static native boolean isNull(TSNode self);

android-tree-sitter/src/test/java/com/itsaky/androidide/treesitter/NodeTest.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,8 @@ public void multiTest() {
9090
assertThat(start.column).isEqualTo(0);
9191
assertThat(function.isEqualTo(function)).isTrue();
9292
assertThat(function.getFieldNameForChild(1)).isEqualTo("name");
93+
assertThat(tree.getLanguage().getSymbolName(function.getGrammarSymbol())).isEqualTo(
94+
"function_definition");
9395

9496
end = function.getEndPoint();
9597
assertThat(end.row).isEqualTo(2);

0 commit comments

Comments
 (0)