From d3a63a1f71eceac68cb25ff8eb4e45037fbc0ee2 Mon Sep 17 00:00:00 2001 From: Thomas Vigouroux Date: Mon, 12 Oct 2020 20:28:04 +0200 Subject: tree-sitter: error out when parsing fails This can happen when there is ABI mismatches, and removes the assumption parsing alwasy succeeds (which is wrong). --- src/nvim/lua/treesitter.c | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/nvim/lua/treesitter.c b/src/nvim/lua/treesitter.c index 5258352e72..55ffe7a898 100644 --- a/src/nvim/lua/treesitter.c +++ b/src/nvim/lua/treesitter.c @@ -176,7 +176,8 @@ int tslua_add_language(lua_State *L) } uint32_t lang_version = ts_language_version(lang); - if (lang_version < TREE_SITTER_MIN_COMPATIBLE_LANGUAGE_VERSION) { + if (lang_version < TREE_SITTER_MIN_COMPATIBLE_LANGUAGE_VERSION + || lang_version > TREE_SITTER_LANGUAGE_VERSION) { return luaL_error( L, "ABI version mismatch : expected %" PRIu32 ", found %" PRIu32, @@ -246,7 +247,12 @@ int tslua_push_parser(lua_State *L) } TSParser *parser = ts_parser_new(); - ts_parser_set_language(parser, lang); + + if (!ts_parser_set_language(parser, lang)) { + ts_parser_delete(parser); + return luaL_error(L, "Failed to load language : %s", lang_name); + } + TSLua_parser *p = lua_newuserdata(L, sizeof(TSLua_parser)); // [udata] p->parser = parser; p->tree = NULL; @@ -342,7 +348,7 @@ static int parser_parse(lua_State *L) return 0; } - TSTree *new_tree; + TSTree *new_tree = NULL; size_t len; const char *str; long bufnr; @@ -374,6 +380,12 @@ static int parser_parse(lua_State *L) return luaL_error(L, "invalid argument to parser:parse()"); } + // Sometimes parsing fails (timeout, or wrong parser ABI) + // In those case, just return an error. + if (!new_tree) { + return luaL_error(L, "An error occured when parsing."); + } + uint32_t n_ranges = 0; TSRange *changed = p->tree ? ts_tree_get_changed_ranges(p->tree, new_tree, &n_ranges) : NULL; -- cgit From 31738fe8f149d27db3c5837a929085424c37e16c Mon Sep 17 00:00:00 2001 From: Thomas Vigouroux Date: Sun, 1 Nov 2020 15:07:11 +0100 Subject: treesitter: fix wrong string formatting --- src/nvim/lua/treesitter.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src') diff --git a/src/nvim/lua/treesitter.c b/src/nvim/lua/treesitter.c index 55ffe7a898..7df8afad62 100644 --- a/src/nvim/lua/treesitter.c +++ b/src/nvim/lua/treesitter.c @@ -180,7 +180,7 @@ int tslua_add_language(lua_State *L) || lang_version > TREE_SITTER_LANGUAGE_VERSION) { return luaL_error( L, - "ABI version mismatch : expected %" PRIu32 ", found %" PRIu32, + "ABI version mismatch : expected %d, found %d", TREE_SITTER_MIN_COMPATIBLE_LANGUAGE_VERSION, lang_version); } -- cgit