I am writing a font-lock rule that calls a function to decide what face to apply to a symbol. Here's a simplified version:
("\\(?1:\\s_+\\)"
(1 (the-function 1)))
The problem is that this function needs to generate some data that is just a little bit slow to compute. So, when jit-font-lock starts calling this function for every symbol in the visible buffer, the lag is noticeable.
I could setq this “slightly-expensive” data to a variable,
(setq data-cache (generate-data))
and then the-function could just use data-cache instead of calling
generate-data every time. But then I would have to jump through some
non-trivial hoops to make sure that this cache is always properly
invalidated.
Q: Does the font-lock engine offer help in this regard? How can I make
sure it only runs (generate-data) once per redisplay?
Ideally, I would like to specify something like “let-bind data-cache to
the return value of (generate-data)”. This way I would know that
this cache was never outdated.