From 1bb3a5b8a25eeb2f2f9e0d0de97e503d001ddcab Mon Sep 17 00:00:00 2001 From: Florian Fischer Date: Thu, 7 Sep 2023 00:06:51 +0200 Subject: 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. --- lua/vis.lua | 14 ++++++++++++++ 1 file changed, 14 insertions(+) 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 -- cgit v1.2.3