aboutsummaryrefslogtreecommitdiff
path: root/lua
diff options
context:
space:
mode:
authorMichiel van den Heuvel <michielvdnheuvel@gmail.com>2024-05-28 12:49:55 +0200
committerRandy Palamar <randy@rnpnr.xyz>2024-05-30 05:52:27 -0600
commita7aac1044856abc4d1f133c6563fc604d7fe6295 (patch)
tree8b77c14267785920d49f9ec3e44b9e699c420fda /lua
parent9bfb31fcbee028eaecce75a743f2a0bd50b5807c (diff)
downloadvis-a7aac1044856abc4d1f133c6563fc604d7fe6295.tar.gz
vis-a7aac1044856abc4d1f133c6563fc604d7fe6295.tar.xz
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.
Diffstat (limited to 'lua')
-rw-r--r--lua/plugins/filetype.lua10
-rw-r--r--lua/plugins/textobject-lexer.lua6
-rw-r--r--lua/vis.lua5
3 files changed, 9 insertions, 12 deletions
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