Completer State / Optimitzation
Find a way to keep state between the completion calls to reduce the parsing we have to do each time. This may be difficult when things get deleted or the cursor moves, but could be used initially and then revert to slower alternative on one of those actions.