robotcode-robot 0.93.1__tar.gz → 0.95.0__tar.gz

Sign up to get free protection for your applications and to get access to all the features.
Files changed (36) hide show
  1. {robotcode_robot-0.93.1 → robotcode_robot-0.95.0}/PKG-INFO +2 -2
  2. {robotcode_robot-0.93.1 → robotcode_robot-0.95.0}/pyproject.toml +1 -1
  3. robotcode_robot-0.95.0/src/robotcode/robot/__version__.py +1 -0
  4. robotcode_robot-0.95.0/src/robotcode/robot/diagnostics/data_cache.py +83 -0
  5. {robotcode_robot-0.93.1 → robotcode_robot-0.95.0}/src/robotcode/robot/diagnostics/document_cache_helper.py +11 -6
  6. {robotcode_robot-0.93.1 → robotcode_robot-0.95.0}/src/robotcode/robot/diagnostics/entities.py +3 -3
  7. {robotcode_robot-0.93.1 → robotcode_robot-0.95.0}/src/robotcode/robot/diagnostics/errors.py +7 -2
  8. {robotcode_robot-0.93.1 → robotcode_robot-0.95.0}/src/robotcode/robot/diagnostics/imports_manager.py +176 -135
  9. robotcode_robot-0.95.0/src/robotcode/robot/diagnostics/keyword_finder.py +485 -0
  10. {robotcode_robot-0.93.1 → robotcode_robot-0.95.0}/src/robotcode/robot/diagnostics/library_doc.py +178 -112
  11. {robotcode_robot-0.93.1 → robotcode_robot-0.95.0}/src/robotcode/robot/diagnostics/model_helper.py +49 -30
  12. {robotcode_robot-0.93.1 → robotcode_robot-0.95.0}/src/robotcode/robot/diagnostics/namespace.py +159 -580
  13. robotcode_robot-0.95.0/src/robotcode/robot/diagnostics/namespace_analyzer.py +1802 -0
  14. {robotcode_robot-0.93.1 → robotcode_robot-0.95.0}/src/robotcode/robot/utils/markdownformatter.py +8 -11
  15. {robotcode_robot-0.93.1 → robotcode_robot-0.95.0}/src/robotcode/robot/utils/match.py +2 -2
  16. {robotcode_robot-0.93.1 → robotcode_robot-0.95.0}/src/robotcode/robot/utils/robot_path.py +14 -15
  17. robotcode_robot-0.95.0/src/robotcode/robot/utils/variables.py +72 -0
  18. {robotcode_robot-0.93.1 → robotcode_robot-0.95.0}/src/robotcode/robot/utils/visitor.py +7 -13
  19. robotcode_robot-0.93.1/src/robotcode/robot/__version__.py +0 -1
  20. robotcode_robot-0.93.1/src/robotcode/robot/diagnostics/namespace_analyzer.py +0 -1235
  21. robotcode_robot-0.93.1/src/robotcode/robot/utils/variables.py +0 -37
  22. {robotcode_robot-0.93.1 → robotcode_robot-0.95.0}/.gitignore +0 -0
  23. {robotcode_robot-0.93.1 → robotcode_robot-0.95.0}/LICENSE.txt +0 -0
  24. {robotcode_robot-0.93.1 → robotcode_robot-0.95.0}/README.md +0 -0
  25. {robotcode_robot-0.93.1 → robotcode_robot-0.95.0}/src/robotcode/robot/__init__.py +0 -0
  26. {robotcode_robot-0.93.1 → robotcode_robot-0.95.0}/src/robotcode/robot/config/__init__.py +0 -0
  27. {robotcode_robot-0.93.1 → robotcode_robot-0.95.0}/src/robotcode/robot/config/loader.py +0 -0
  28. {robotcode_robot-0.93.1 → robotcode_robot-0.95.0}/src/robotcode/robot/config/model.py +0 -0
  29. {robotcode_robot-0.93.1 → robotcode_robot-0.95.0}/src/robotcode/robot/config/utils.py +0 -0
  30. {robotcode_robot-0.93.1 → robotcode_robot-0.95.0}/src/robotcode/robot/diagnostics/__init__.py +0 -0
  31. {robotcode_robot-0.93.1 → robotcode_robot-0.95.0}/src/robotcode/robot/diagnostics/diagnostics_modifier.py +0 -0
  32. {robotcode_robot-0.93.1 → robotcode_robot-0.95.0}/src/robotcode/robot/diagnostics/workspace_config.py +0 -0
  33. {robotcode_robot-0.93.1 → robotcode_robot-0.95.0}/src/robotcode/robot/py.typed +0 -0
  34. {robotcode_robot-0.93.1 → robotcode_robot-0.95.0}/src/robotcode/robot/utils/__init__.py +0 -0
  35. {robotcode_robot-0.93.1 → robotcode_robot-0.95.0}/src/robotcode/robot/utils/ast.py +0 -0
  36. {robotcode_robot-0.93.1 → robotcode_robot-0.95.0}/src/robotcode/robot/utils/stubs.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: robotcode-robot
3
- Version: 0.93.1
3
+ Version: 0.95.0
4
4
  Summary: Support classes for RobotCode for handling Robot Framework projects.
5
5
  Project-URL: Homepage, https://robotcode.io
6
6
  Project-URL: Donate, https://opencollective.com/robotcode
@@ -26,7 +26,7 @@ Classifier: Topic :: Utilities
26
26
  Classifier: Typing :: Typed
27
27
  Requires-Python: >=3.8
28
28
  Requires-Dist: platformdirs<4.2.0,>=3.2.0
29
- Requires-Dist: robotcode-core==0.93.1
29
+ Requires-Dist: robotcode-core==0.95.0
30
30
  Requires-Dist: robotframework>=4.1.0
31
31
  Requires-Dist: tomli>=1.1.0; python_version < '3.11'
32
32
  Description-Content-Type: text/markdown
@@ -29,7 +29,7 @@ dependencies = [
29
29
  "robotframework>=4.1.0",
30
30
  "tomli>=1.1.0; python_version < '3.11'",
31
31
  "platformdirs>=3.2.0,<4.2.0",
32
- "robotcode-core==0.93.1",
32
+ "robotcode-core==0.95.0",
33
33
  ]
34
34
  dynamic = ["version"]
35
35
 
@@ -0,0 +1 @@
1
+ __version__ = "0.95.0"
@@ -0,0 +1,83 @@
1
+ import pickle
2
+ from abc import ABC, abstractmethod
3
+ from enum import Enum
4
+ from pathlib import Path
5
+ from typing import Any, Tuple, Type, TypeVar, Union, cast
6
+
7
+ from robotcode.core.utils.dataclasses import as_json, from_json
8
+
9
+ _T = TypeVar("_T")
10
+
11
+
12
+ class CacheSection(Enum):
13
+ LIBRARY = "libdoc"
14
+ VARIABLES = "variables"
15
+
16
+
17
+ class DataCache(ABC):
18
+ @abstractmethod
19
+ def cache_data_exists(self, section: CacheSection, entry_name: str) -> bool: ...
20
+
21
+ @abstractmethod
22
+ def read_cache_data(
23
+ self, section: CacheSection, entry_name: str, types: Union[Type[_T], Tuple[Type[_T], ...]]
24
+ ) -> _T: ...
25
+
26
+ @abstractmethod
27
+ def save_cache_data(self, section: CacheSection, entry_name: str, data: Any) -> None: ...
28
+
29
+
30
+ class JsonDataCache(DataCache):
31
+ def __init__(self, cache_dir: Path) -> None:
32
+ self.cache_dir = cache_dir
33
+
34
+ def build_cache_data_filename(self, section: CacheSection, entry_name: str) -> Path:
35
+ return self.cache_dir / section.value / (entry_name + ".json")
36
+
37
+ def cache_data_exists(self, section: CacheSection, entry_name: str) -> bool:
38
+ cache_file = self.build_cache_data_filename(section, entry_name)
39
+ return cache_file.exists()
40
+
41
+ def read_cache_data(
42
+ self, section: CacheSection, entry_name: str, types: Union[Type[_T], Tuple[Type[_T], ...]]
43
+ ) -> _T:
44
+ cache_file = self.build_cache_data_filename(section, entry_name)
45
+ return from_json(cache_file.read_text("utf-8"), types)
46
+
47
+ def save_cache_data(self, section: CacheSection, entry_name: str, data: Any) -> None:
48
+ cached_file = self.build_cache_data_filename(section, entry_name)
49
+
50
+ cached_file.parent.mkdir(parents=True, exist_ok=True)
51
+ cached_file.write_text(as_json(data), "utf-8")
52
+
53
+
54
+ class PickleDataCache(DataCache):
55
+ def __init__(self, cache_dir: Path) -> None:
56
+ self.cache_dir = cache_dir
57
+
58
+ def build_cache_data_filename(self, section: CacheSection, entry_name: str) -> Path:
59
+ return self.cache_dir / section.value / (entry_name + ".pkl")
60
+
61
+ def cache_data_exists(self, section: CacheSection, entry_name: str) -> bool:
62
+ cache_file = self.build_cache_data_filename(section, entry_name)
63
+ return cache_file.exists()
64
+
65
+ def read_cache_data(
66
+ self, section: CacheSection, entry_name: str, types: Union[Type[_T], Tuple[Type[_T], ...]]
67
+ ) -> _T:
68
+ cache_file = self.build_cache_data_filename(section, entry_name)
69
+
70
+ with cache_file.open("rb") as f:
71
+ result = pickle.load(f)
72
+
73
+ if isinstance(result, types):
74
+ return cast(_T, result)
75
+
76
+ raise TypeError(f"Expected {types} but got {type(result)}")
77
+
78
+ def save_cache_data(self, section: CacheSection, entry_name: str, data: Any) -> None:
79
+ cached_file = self.build_cache_data_filename(section, entry_name)
80
+
81
+ cached_file.parent.mkdir(parents=True, exist_ok=True)
82
+ with cached_file.open("wb") as f:
83
+ pickle.dump(data, f)
@@ -118,8 +118,7 @@ class DocumentsCacheHelper:
118
118
  except ValueError as e:
119
119
  ex = e
120
120
  self._logger.exception(
121
- lambda: f"Language configuration is not valid: {ex}"
122
- "\nPlease check your 'robotcode.robot.language' configuration.",
121
+ lambda: f"Language configuration is not valid: {ex}",
123
122
  exc_info=ex,
124
123
  level=CRITICAL,
125
124
  )
@@ -410,7 +409,16 @@ class DocumentsCacheHelper:
410
409
  return document.get_cache(self.__get_namespace)
411
410
 
412
411
  def __get_namespace(self, document: TextDocument) -> Namespace:
413
- return self.__get_namespace_for_document_type(document, None)
412
+ document_type = self.get_document_type(document)
413
+
414
+ if document_type == DocumentType.INIT:
415
+ return self.get_init_namespace(document)
416
+ if document_type == DocumentType.RESOURCE:
417
+ return self.get_resource_namespace(document)
418
+ if document_type == DocumentType.GENERAL:
419
+ return self.get_general_namespace(document)
420
+
421
+ return self.__get_namespace_for_document_type(document, document_type)
414
422
 
415
423
  def get_resource_namespace(self, document: TextDocument) -> Namespace:
416
424
  return document.get_cache(self.__get_resource_namespace)
@@ -448,9 +456,6 @@ class DocumentsCacheHelper:
448
456
 
449
457
  def __namespace_initialized(self, sender: Namespace) -> None:
450
458
  if sender.document is not None:
451
- self._logger.debug(
452
- lambda: f"Save initialized Namespace: {sender.document.uri if sender.document else None}"
453
- )
454
459
  sender.document.set_data(self.INITIALIZED_NAMESPACE, sender)
455
460
  self.namespace_initialized(self, sender)
456
461
 
@@ -12,11 +12,11 @@ from typing import (
12
12
  )
13
13
 
14
14
  from robot.parsing.lexer.tokens import Token
15
- from robot.variables.search import search_variable
16
15
  from robotcode.core.lsp.types import Position, Range
17
16
  from robotcode.robot.utils.match import normalize
18
17
 
19
18
  from ..utils.ast import range_from_token
19
+ from ..utils.variables import search_variable
20
20
 
21
21
  if TYPE_CHECKING:
22
22
  from robotcode.robot.diagnostics.library_doc import KeywordDoc, LibraryDoc
@@ -246,7 +246,7 @@ class GlobalVariableDefinition(VariableDefinition):
246
246
 
247
247
 
248
248
  @dataclass
249
- class BuiltInVariableDefinition(VariableDefinition):
249
+ class BuiltInVariableDefinition(GlobalVariableDefinition):
250
250
  type: VariableDefinitionType = VariableDefinitionType.BUILTIN_VARIABLE
251
251
  resolvable: bool = True
252
252
 
@@ -266,7 +266,7 @@ class CommandLineVariableDefinition(GlobalVariableDefinition):
266
266
 
267
267
 
268
268
  @dataclass
269
- class ArgumentDefinition(VariableDefinition):
269
+ class ArgumentDefinition(LocalVariableDefinition):
270
270
  type: VariableDefinitionType = VariableDefinitionType.ARGUMENT
271
271
  keyword_doc: Optional["KeywordDoc"] = field(default=None, compare=False, metadata={"nosave": True})
272
272
 
@@ -1,12 +1,12 @@
1
1
  from typing import final
2
2
 
3
- DIAGNOSTICS_SOURCE_NAME = "robotcode.namespace"
3
+ DIAGNOSTICS_SOURCE_NAME = "robotcode"
4
4
 
5
5
 
6
6
  @final
7
7
  class Error:
8
8
  VARIABLE_NOT_FOUND = "VariableNotFound"
9
- ENVIROMMENT_VARIABLE_NOT_FOUND = "EnvirommentVariableNotFound"
9
+ ENVIRONMENT_VARIABLE_NOT_FOUND = "EnvironmentVariableNotFound"
10
10
  KEYWORD_NOT_FOUND = "KeywordNotFound"
11
11
  LIBRARY_CONTAINS_NO_KEYWORDS = "LibraryContainsNoKeywords"
12
12
  POSSIBLE_CIRCULAR_IMPORT = "PossibleCircularImport"
@@ -35,3 +35,8 @@ class Error:
35
35
  CONFLICTING_LIBRARY_KEYWORDS = "ConflictingLibraryKeywords"
36
36
  INVALID_HEADER = "InvalidHeader"
37
37
  DEPRECATED_HEADER = "DeprecatedHeader"
38
+ OVERRIDDEN_BY_COMMANDLINE = "OverriddenByCommandLine"
39
+ VARIABLE_ALREADY_DEFINED = "VariableAlreadyDefined"
40
+ VARIABLE_OVERRIDDEN = "VariableOverridden"
41
+ MODEL_ERROR = "ModelError"
42
+ TOKEN_ERROR = "TokenError"