aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFlorian Fischer <florian.fischer@muhq.space>2023-09-07 00:06:51 +0200
committerRandy Palamar <randy@rnpnr.xyz>2024-03-27 06:04:21 -0600
commit1bb3a5b8a25eeb2f2f9e0d0de97e503d001ddcab (patch)
treebde494acbba274cb0fbb0ef6c4880f967f49ded4
parent78fd2201b9d9027a2e0961a9a74e3b6ff604de6d (diff)
downloadvis-1bb3a5b8a25eeb2f2f9e0d0de97e503d001ddcab.tar.gz
vis-1bb3a5b8a25eeb2f2f9e0d0de97e503d001ddcab.tar.xz
lua: cache loaded lexers
Caching lexers causes lexer tables to be constructed once and reused during each HIGHLIGHT event. Additionally it allows to modify the lexer used for syntax highlighting from Lua code. This is used for example for the syntax aware spellchecking performed by the vis-spellcheck plugin.
-rw-r--r--lua/vis.lua14
1 files changed, 14 insertions, 0 deletions
diff --git a/lua/vis.lua b/lua/vis.lua
index f48451d..139f6dc 100644
--- a/lua/vis.lua
+++ b/lua/vis.lua
@@ -121,6 +121,20 @@ elseif not vis:module_exist('lexer') then
vis:info('WARNING: could not find lexer module')
else
vis.lexers = require('lexer')
+
+ --- Cache of loaded lexers
+ --
+ -- Caching lexers causes lexer tables to be constructed once and reused
+ -- during each HIGHLIGHT event. Additionally it allows to modify the lexer
+ -- used for syntax highlighting from Lua code.
+ local lexers = {}
+ 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)
+ if cache then lexers[alt_name or name] = lexer end
+ return lexer
+ end
vis.lpeg = require('lpeg')
end