From a7aac1044856abc4d1f133c6563fc604d7fe6295 Mon Sep 17 00:00:00 2001 From: Michiel van den Heuvel Date: Tue, 28 May 2024 12:49:55 +0200 Subject: Fail silently when syntax has no lexer This'll patch vis.lexers.load to return nil when the lexer could not be found. Previously it would've errored out, which the load in lexer.lua still will as this is used in lexers themselves. Another possibility is to only patch set_syntax in vis.lua and the WIN_HIGHLIGHT handler in vis-std.lua, but as most references to vis.lexers.load already handle a nil return, this seems better. --- lua/plugins/filetype.lua | 10 +--------- lua/plugins/textobject-lexer.lua | 6 +++++- lua/vis.lua | 5 +++-- 3 files changed, 9 insertions(+), 12 deletions(-) (limited to 'lua') diff --git a/lua/plugins/filetype.lua b/lua/plugins/filetype.lua index 553e79d..d643f82 100644 --- a/lua/plugins/filetype.lua +++ b/lua/plugins/filetype.lua @@ -506,15 +506,7 @@ vis.events.subscribe(vis.events.WIN_OPEN, function(win) for _, cmd in pairs(filetype.cmd or {}) do vis:command(cmd) end - if not vis.lexers.property then return end - local path = vis.lexers.property['scintillua.lexers']:gsub(';', '/?.lua;') - local lexname = filetype.alt_name or syntax - local lexpath = package.searchpath(lexname, path) - if lexpath ~= nil then - win:set_syntax(lexname) - else - win:set_syntax(nil) - end + win:set_syntax(filetype.alt_name or syntax) end local path = win.file.name -- filepath diff --git a/lua/plugins/textobject-lexer.lua b/lua/plugins/textobject-lexer.lua index 2f9d757..eba65e2 100644 --- a/lua/plugins/textobject-lexer.lua +++ b/lua/plugins/textobject-lexer.lua @@ -8,13 +8,17 @@ vis:textobject_new("ii", function(win, pos) return nil end + local lexer = vis.lexers.load(win.syntax, nil, true) + if not lexer then + return nil + end + local before, after = pos - MAX_CONTEXT, pos + MAX_CONTEXT if before < 0 then before = 0 end -- TODO make sure we start at a line boundary? - local lexer = vis.lexers.load(win.syntax, nil, true) local data = win.file:content(before, after - before) local tokens = lexer:lex(data) local cur = before diff --git a/lua/vis.lua b/lua/vis.lua index 5473f17..d06bbaf 100644 --- a/lua/vis.lua +++ b/lua/vis.lua @@ -131,7 +131,8 @@ else local load_lexer = vis.lexers.load vis.lexers.load = function (name, alt_name, cache) if cache and lexers[alt_name or name] then return lexers[alt_name or name] end - local lexer = load_lexer(name, alt_name) + local status, lexer = pcall(load_lexer, name, alt_name) + if not status then return nil end if cache then lexers[alt_name or name] = lexer end return lexer end @@ -276,6 +277,7 @@ vis.types.window.set_syntax = function(win, syntax) win.syntax = nil return true end + win.syntax = syntax if not lexers.load then return false end local lexer = lexers.load(syntax) @@ -297,7 +299,6 @@ vis.types.window.set_syntax = function(win, syntax) if style ~= nil then win:style_define(id, style) end end - win.syntax = syntax return true end -- cgit v1.2.3