diff options
| author | Florian Fischer <florian.fischer@muhq.space> | 2023-09-07 00:06:51 +0200 |
|---|---|---|
| committer | Randy Palamar <randy@rnpnr.xyz> | 2024-03-27 06:04:21 -0600 |
| commit | 1bb3a5b8a25eeb2f2f9e0d0de97e503d001ddcab (patch) | |
| tree | bde494acbba274cb0fbb0ef6c4880f967f49ded4 | |
| parent | 78fd2201b9d9027a2e0961a9a74e3b6ff604de6d (diff) | |
| download | vis-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.lua | 14 |
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 |
