From b56bab57adc63bf06a00515d84071208643b61d7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kristoffer=20Br=C3=A5nemyr?= Date: Sat, 4 May 2024 20:46:51 +0200 Subject: [PATCH] Avoid running get_words twice when opening new file --- apps/els_lsp/src/els_dt_document.erl | 4 ++-- apps/els_lsp/src/els_indexing.erl | 18 ++++++++++++------ apps/els_lsp/src/els_text_synchronization.erl | 4 ++-- 3 files changed, 16 insertions(+), 10 deletions(-) diff --git a/apps/els_lsp/src/els_dt_document.erl b/apps/els_lsp/src/els_dt_document.erl index b287c341f..14c8fb9d6 100644 --- a/apps/els_lsp/src/els_dt_document.erl +++ b/apps/els_lsp/src/els_dt_document.erl @@ -304,12 +304,12 @@ find_candidates(Pattern, Kind) -> get_words(Text) -> case erl_scan:string(els_utils:to_list(Text)) of {ok, Tokens, _EndLocation} -> - tokens_to_words(Tokens, sets:new()); + tokens_to_words(Tokens, sets:new([{version, 2}])); {error, ErrorInfo, ErrorLocation} -> ?LOG_WARNING("Errors while get_words [info=~p] [location=~p]", [ ErrorInfo, ErrorLocation ]), - sets:new() + sets:new([{version, 2}]) end. -spec tokens_to_words([erl_scan:token()], sets:set()) -> sets:set(). diff --git a/apps/els_lsp/src/els_indexing.erl b/apps/els_lsp/src/els_indexing.erl index bc5226480..da3f8b8f1 100644 --- a/apps/els_lsp/src/els_indexing.erl +++ b/apps/els_lsp/src/els_indexing.erl @@ -11,7 +11,7 @@ ensure_deeply_indexed/1, shallow_index/2, shallow_index/3, - deep_index/1, + deep_index/2, remove/1 ]). @@ -76,13 +76,13 @@ ensure_deeply_indexed(Uri) -> {ok, #{pois := POIs} = Document} = els_utils:lookup_document(Uri), case POIs of ondemand -> - deep_index(Document); + deep_index(Document, _UpdateWords = true); _ -> Document end. --spec deep_index(els_dt_document:item()) -> els_dt_document:item(). -deep_index(Document0) -> +-spec deep_index(els_dt_document:item(), boolean()) -> els_dt_document:item(). +deep_index(Document0, UpdateWords) -> #{ id := Id, uri := Uri, @@ -91,8 +91,14 @@ deep_index(Document0) -> version := Version } = Document0, {ok, POIs} = els_parser:parse(Text), - Words = els_dt_document:get_words(Text), - Document = Document0#{pois => POIs, words => Words}, + Document = + case UpdateWords of + true -> + Words = els_dt_document:get_words(Text), + Document0#{pois => POIs, words => Words}; + false -> + Document0#{pois => POIs} + end, case els_dt_document:versioned_insert(Document) of ok -> index_signatures(Id, Uri, Text, POIs, Version), diff --git a/apps/els_lsp/src/els_text_synchronization.erl b/apps/els_lsp/src/els_text_synchronization.erl index 978c73835..e09c6bf3b 100644 --- a/apps/els_lsp/src/els_text_synchronization.erl +++ b/apps/els_lsp/src/els_text_synchronization.erl @@ -55,7 +55,7 @@ did_open(Params) -> } = Params, Document = els_dt_document:new(Uri, Text, _Source = app, Version), els_dt_document:insert(Document), - els_indexing:deep_index(Document), + els_indexing:deep_index(Document, _UpdateWords = false), ok. -spec did_save(map()) -> ok. @@ -129,7 +129,7 @@ reload_from_disk(Uri) -> background_index(#{uri := Uri} = Document) -> Config = #{ task => fun(Doc, _State) -> - els_indexing:deep_index(Doc), + els_indexing:deep_index(Doc, _UpdateWords = true), ok end, entries => [Document],