Skip to content

Commit

Permalink
Fail silently when syntax has no lexer
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
milhnl authored and rnpnr committed May 30, 2024
1 parent 9bfb31f commit a7aac10
Show file tree
Hide file tree
Showing 3 changed files with 9 additions and 12 deletions.
10 changes: 1 addition & 9 deletions lua/plugins/filetype.lua
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
6 changes: 5 additions & 1 deletion lua/plugins/textobject-lexer.lua
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
5 changes: 3 additions & 2 deletions lua/vis.lua
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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)
Expand All @@ -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

Expand Down

0 comments on commit a7aac10

Please sign in to comment.