Skip to content

Commit 3de0882

Browse files
committed
performance(langserver): remove unneeded double caching of library imports
1 parent 4f012b4 commit 3de0882

File tree

2 files changed

+14
-79
lines changed

2 files changed

+14
-79
lines changed

packages/robot/src/robotcode/robot/diagnostics/document_cache_helper.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -451,7 +451,6 @@ def __get_namespace_for_document_type(
451451
workspace_languages,
452452
)
453453
result.has_invalidated.add(self.__invalidate_namespace)
454-
result.has_imports_changed.add(self.__invalidate_namespace)
455454

456455
return result
457456

packages/robot/src/robotcode/robot/diagnostics/namespace.py

Lines changed: 14 additions & 78 deletions
Original file line numberDiff line numberDiff line change
@@ -615,9 +615,6 @@ def has_invalidated(sender) -> None: ...
615615
@event
616616
def has_initialized(sender) -> None: ...
617617

618-
@event
619-
def has_imports_changed(sender) -> None: ...
620-
621618
@event
622619
def has_analysed(sender) -> None: ...
623620

@@ -634,9 +631,6 @@ def search_order(self) -> Tuple[str, ...]:
634631

635632
def imports_changed(self, sender: Any, uri: DocumentUri) -> None:
636633
# TODO: optimise this by checking our imports
637-
if self.document is not None:
638-
self.document.set_data(Namespace.DataEntry, None)
639-
640634
self.invalidate()
641635

642636
@_logger.call
@@ -652,9 +646,6 @@ def libraries_changed(self, sender: Any, libraries: List[LibraryDoc]) -> None:
652646
break
653647

654648
if invalidate:
655-
if self.document is not None:
656-
self.document.set_data(Namespace.DataEntry, None)
657-
658649
self.invalidate()
659650

660651
@_logger.call
@@ -670,9 +661,6 @@ def resources_changed(self, sender: Any, resources: List[LibraryDoc]) -> None:
670661
break
671662

672663
if invalidate:
673-
if self.document is not None:
674-
self.document.set_data(Namespace.DataEntry, None)
675-
676664
self.invalidate()
677665

678666
@_logger.call
@@ -688,9 +676,6 @@ def variables_changed(self, sender: Any, variables: List[LibraryDoc]) -> None:
688676
break
689677

690678
if invalidate:
691-
if self.document is not None:
692-
self.document.set_data(Namespace.DataEntry, None)
693-
694679
self.invalidate()
695680

696681
def is_initialized(self) -> bool:
@@ -802,73 +787,29 @@ class DataEntry(NamedTuple):
802787

803788
@_logger.call(condition=lambda self: not self._initialized)
804789
def ensure_initialized(self) -> bool:
805-
run_initialize = False
806-
imports_changed = False
807-
808790
with self._initialize_lock:
809791
if not self._initialized:
810-
if self._in_initialize:
811-
self._logger.critical(lambda: f"already initialized {self.document}")
812-
813-
self._in_initialize = True
814792

793+
succeed = False
815794
try:
816-
self._logger.debug(lambda: f"ensure_initialized -> initialize {self.document}")
795+
self._logger.debug(lambda: f"initialize {self.document}")
817796

818797
imports = self.get_imports()
819798

820-
data_entry: Optional[Namespace.DataEntry] = None
821-
if self.document is not None:
822-
# check or save several data in documents data cache,
823-
# if imports are different, then the data is invalid
824-
old_imports: Optional[List[Import]] = self.document.get_data(Namespace)
825-
if old_imports is None:
826-
self.document.set_data(Namespace, imports)
827-
elif old_imports != imports:
828-
imports_changed = True
829-
830-
self.document.set_data(Namespace, imports)
831-
self.document.set_data(Namespace.DataEntry, None)
832-
else:
833-
data_entry = self.document.get_data(Namespace.DataEntry)
834-
835-
if data_entry is not None:
836-
self._libraries = data_entry.libraries.copy()
837-
self._resources = data_entry.resources.copy()
838-
self._variables = data_entry.variables.copy()
839-
self._diagnostics = data_entry.diagnostics.copy()
840-
self._import_entries = data_entry.import_entries.copy()
841-
self._imported_keywords = (
842-
data_entry.imported_keywords.copy() if data_entry.imported_keywords else None
843-
)
844-
else:
845-
variables = self.get_resolvable_variables()
846-
847-
self._import_default_libraries(variables)
848-
self._import_imports(
849-
imports,
850-
str(Path(self.source).parent),
851-
top_level=True,
852-
variables=variables,
853-
)
799+
variables = self.get_resolvable_variables()
854800

855-
if self.document is not None:
856-
self.document.set_data(
857-
Namespace.DataEntry,
858-
Namespace.DataEntry(
859-
self._libraries.copy(),
860-
self._resources.copy(),
861-
self._variables.copy(),
862-
self._diagnostics.copy(),
863-
self._import_entries.copy(),
864-
self._imported_keywords.copy() if self._imported_keywords else None,
865-
),
866-
)
801+
self._import_default_libraries(variables)
802+
self._import_imports(
803+
imports,
804+
str(Path(self.source).parent),
805+
top_level=True,
806+
variables=variables,
807+
)
867808

868809
self._reset_global_variables()
869810

870811
self._initialized = True
871-
run_initialize = True
812+
succeed = True
872813

873814
except BaseException:
874815
if self.document is not None:
@@ -877,14 +818,9 @@ def ensure_initialized(self) -> bool:
877818

878819
self._invalidate()
879820
raise
880-
finally:
881-
self._in_initialize = False
882821

883-
if run_initialize:
884-
self.has_initialized(self)
885-
886-
if imports_changed:
887-
self.has_imports_changed(self)
822+
if succeed:
823+
self.has_initialized(self)
888824

889825
return self._initialized
890826

@@ -1069,7 +1005,7 @@ def _import(
10691005
value.args,
10701006
value.alias,
10711007
base_dir,
1072-
sentinel=value,
1008+
sentinel=self,
10731009
variables=variables,
10741010
)
10751011
result.import_range = value.range

0 commit comments

Comments
 (0)