aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRiley Bruins <ribru17@hotmail.com>2024-10-11 15:07:36 -0700
committerChristian Clason <c.clason@uni-graz.at>2024-10-12 09:59:44 +0200
commit4b909528516032b002a4a32f3e06f0eb6185ea6b (patch)
tree103703d0316d478b7ea69f1491079f22706bbfc7
parent45f8f957c05ca18ea86b8b6bb6c0a903c9140b7b (diff)
downloadrneovim-4b909528516032b002a4a32f3e06f0eb6185ea6b.tar.gz
rneovim-4b909528516032b002a4a32f3e06f0eb6185ea6b.tar.bz2
rneovim-4b909528516032b002a4a32f3e06f0eb6185ea6b.zip
fix(treesitter): mark supertype nodes as named
**Problem:** Tree-sitter 0.24.0 introduced a new symbol type to denote supertype nodes (`TSSymbolTypeSupertype`). Now, `language.inspect()` (and the query `omnifunc`) return supertype symbols, but with double quotes around them. **Solution:** Mark a symbol as "named" based on it *not* being an anonymous node, rather than checking that it is a regular node (which a supertype also is not).
-rw-r--r--src/nvim/lua/treesitter.c2
-rw-r--r--test/functional/treesitter/language_spec.lua8
2 files changed, 6 insertions, 4 deletions
diff --git a/src/nvim/lua/treesitter.c b/src/nvim/lua/treesitter.c
index 3ceb21b61a..1ebf835eb5 100644
--- a/src/nvim/lua/treesitter.c
+++ b/src/nvim/lua/treesitter.c
@@ -272,7 +272,7 @@ int tslua_inspect_lang(lua_State *L)
continue;
}
const char *name = ts_language_symbol_name(lang, (TSSymbol)i);
- bool named = t == TSSymbolTypeRegular;
+ bool named = t != TSSymbolTypeAnonymous;
lua_pushboolean(L, named); // [retval, symbols, is_named]
if (!named) {
char buf[256];
diff --git a/test/functional/treesitter/language_spec.lua b/test/functional/treesitter/language_spec.lua
index 633a2dc725..120a15d7f9 100644
--- a/test/functional/treesitter/language_spec.lua
+++ b/test/functional/treesitter/language_spec.lua
@@ -73,7 +73,7 @@ describe('treesitter language API', function()
eq(true, fset['directive'])
eq(true, fset['initializer'])
- local has_named, has_anonymous
+ local has_named, has_anonymous, has_supertype
for symbol, named in pairs(symbols) do
eq('string', type(symbol))
eq('boolean', type(named))
@@ -81,11 +81,13 @@ describe('treesitter language API', function()
has_named = true
elseif symbol == '"|="' and named == false then
has_anonymous = true
+ elseif symbol == 'statement' and named == true then
+ has_supertype = true
end
end
eq(
- { has_named = true, has_anonymous = true },
- { has_named = has_named, has_anonymous = has_anonymous }
+ { has_named = true, has_anonymous = true, has_supertype = true },
+ { has_named = has_named, has_anonymous = has_anonymous, has_supertype = has_supertype }
)
end)