~martanne/devel

Fail silently when syntax has no lexer v1 SUPERSEDED

Michiel van den Heuvel: 1
 Fail silently when syntax has no lexer

 3 files changed, 9 insertions(+), 12 deletions(-)
Export patchset (mbox)
How do I use this?

Copy & paste the following snippet into your terminal to import this patchset into git:

curl -s https://lists.sr.ht/~martanne/devel/patches/52948/mbox | git am -3
Learn more about email & git

[PATCH] Fail silently when syntax has no lexer Export this patch

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(-)
diff --git a/lua/plugins/filetype.lua b/lua/plugins/filetype.lua
index 553e79d..80fe37e 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(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

-- 
2.39.3 (Apple Git-146)
Michiel van den Heuvel <michielvdnheuvel@gmail.com> wrote: