Why does this keep second cache of tokens? It would be better to move this into into new module that will replace background tokenizer in case of semantic highlighting.