robotcode-robot 0.94.0__py3-none-any.whl → 0.95.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -8,7 +8,7 @@ from dataclasses import dataclass
8
8
  from io import StringIO
9
9
  from pathlib import Path
10
10
  from tokenize import TokenError, generate_tokens
11
- from typing import TYPE_CHECKING, Any, Dict, Iterator, List, Optional, Set, Tuple, Union, cast
11
+ from typing import TYPE_CHECKING, Any, Callable, Dict, Iterator, List, Optional, Set, Tuple, Union, cast
12
12
 
13
13
  from robot.errors import VariableError
14
14
  from robot.parsing.lexer.tokens import Token
@@ -28,9 +28,8 @@ from robot.parsing.model.statements import (
28
28
  Variable,
29
29
  VariablesImport,
30
30
  )
31
- from robot.utils.escaping import split_from_equals, unescape
31
+ from robot.utils.escaping import unescape
32
32
  from robot.variables.finders import NOT_FOUND, NumberFinder
33
- from robot.variables.search import contains_variable, is_scalar_assign, is_variable, search_variable
34
33
  from robotcode.core.concurrent import check_current_task_canceled
35
34
  from robotcode.core.lsp.types import (
36
35
  CodeDescription,
@@ -43,6 +42,7 @@ from robotcode.core.lsp.types import (
43
42
  Range,
44
43
  )
45
44
  from robotcode.core.uri import Uri
45
+ from robotcode.core.utils.logging import LoggingDescriptor
46
46
 
47
47
  from ..utils import get_robot_version
48
48
  from ..utils.ast import (
@@ -53,11 +53,13 @@ from ..utils.ast import (
53
53
  strip_variable_token,
54
54
  tokenize_variables,
55
55
  )
56
+ from ..utils.variables import contains_variable, is_scalar_assign, is_variable, search_variable, split_from_equals
56
57
  from ..utils.visitor import Visitor
57
58
  from .entities import (
58
59
  ArgumentDefinition,
59
60
  EnvironmentVariableDefinition,
60
61
  GlobalVariableDefinition,
62
+ InvalidVariableError,
61
63
  LibraryEntry,
62
64
  LocalVariableDefinition,
63
65
  TestVariableDefinition,
@@ -94,6 +96,9 @@ class AnalyzerResult:
94
96
 
95
97
 
96
98
  class NamespaceAnalyzer(Visitor):
99
+
100
+ _logger = LoggingDescriptor()
101
+
97
102
  def __init__(
98
103
  self,
99
104
  model: ast.AST,
@@ -126,8 +131,11 @@ class NamespaceAnalyzer(Visitor):
126
131
  self._overridden_variables: Dict[VariableDefinition, VariableDefinition] = {}
127
132
 
128
133
  self._in_setting = False
134
+ self._in_block_setting = False
129
135
 
130
136
  self._suite_variables = self._variables.copy()
137
+ self._block_variables: Optional[Dict[VariableMatcher, VariableDefinition]] = None
138
+ self._end_block_handlers: Optional[List[Callable[[], None]]] = None
131
139
 
132
140
  def run(self) -> AnalyzerResult:
133
141
  self._diagnostics = []
@@ -146,10 +154,11 @@ class NamespaceAnalyzer(Visitor):
146
154
  except BaseException as e:
147
155
  self._append_diagnostics(
148
156
  range_from_node(self._model),
149
- message=f"Fatal: can't analyze namespace '{e}')",
157
+ message=f"Fatal: can't analyze namespace '{e}'.",
150
158
  severity=DiagnosticSeverity.ERROR,
151
159
  code=type(e).__qualname__,
152
160
  )
161
+ self._logger.exception(e)
153
162
 
154
163
  return AnalyzerResult(
155
164
  self._diagnostics,
@@ -379,6 +388,15 @@ class NamespaceAnalyzer(Visitor):
379
388
  finally:
380
389
  self._in_setting = False
381
390
 
391
+ def _visit_block_settings_statement(
392
+ self, node: Statement, severity: DiagnosticSeverity = DiagnosticSeverity.ERROR
393
+ ) -> None:
394
+ self._in_block_setting = True
395
+ try:
396
+ self._visit_settings_statement(node, severity)
397
+ finally:
398
+ self._in_block_setting = False
399
+
382
400
  def _analyze_token_expression_variables(
383
401
  self, token: Token, severity: DiagnosticSeverity = DiagnosticSeverity.ERROR
384
402
  ) -> None:
@@ -476,7 +494,7 @@ class NamespaceAnalyzer(Visitor):
476
494
  range=range_from_token(var_token),
477
495
  message=f"Environment variable '{var.name}' not found.",
478
496
  severity=severity,
479
- code=Error.ENVIROMMENT_VARIABLE_NOT_FOUND,
497
+ code=Error.ENVIRONMENT_VARIABLE_NOT_FOUND,
480
498
  )
481
499
 
482
500
  if var.type == VariableDefinitionType.ENVIRONMENT_VARIABLE:
@@ -531,6 +549,20 @@ class NamespaceAnalyzer(Visitor):
531
549
  )
532
550
  )
533
551
 
552
+ KEYWORDS_WITH_EXPRESSIONS = [
553
+ "BuiltIn.Evaluate",
554
+ "BuiltIn.Should Be True",
555
+ "BuiltIn.Should Not Be True",
556
+ "BuiltIn.Skip If",
557
+ "BuiltIn.Continue For Loop If",
558
+ "BuiltIn.Exit For Loop If",
559
+ "BuiltIn.Return From Keyword If",
560
+ "BuiltIn.Run Keyword And Return If",
561
+ "BuiltIn.Pass Execution If",
562
+ "BuiltIn.Run Keyword If",
563
+ "BuiltIn.Run Keyword Unless",
564
+ ]
565
+
534
566
  def _analyze_keyword_call(
535
567
  self,
536
568
  node: ast.AST,
@@ -552,13 +584,11 @@ class NamespaceAnalyzer(Visitor):
552
584
  if not allow_variables and not is_not_variable_token(keyword_token):
553
585
  return None
554
586
 
555
- result = self._finder.find_keyword(keyword, raise_keyword_error=False, handle_bdd_style=False)
587
+ result = self._finder.find_keyword(keyword, raise_keyword_error=False)
556
588
 
557
- if result is None:
589
+ if result is not None and self._finder.result_bdd_prefix:
558
590
  keyword_token = ModelHelper.strip_bdd_prefix(self._namespace, keyword_token)
559
591
 
560
- result = self._finder.find_keyword(keyword, raise_keyword_error=False)
561
-
562
592
  kw_range = range_from_token(keyword_token)
563
593
 
564
594
  if keyword:
@@ -710,19 +740,7 @@ class NamespaceAnalyzer(Visitor):
710
740
  )
711
741
 
712
742
  if result is not None:
713
- if result.longname in [
714
- "BuiltIn.Evaluate",
715
- "BuiltIn.Should Be True",
716
- "BuiltIn.Should Not Be True",
717
- "BuiltIn.Skip If",
718
- "BuiltIn.Continue For Loop If",
719
- "BuiltIn.Exit For Loop If",
720
- "BuiltIn.Return From Keyword If",
721
- "BuiltIn.Run Keyword And Return If",
722
- "BuiltIn.Pass Execution If",
723
- "BuiltIn.Run Keyword If",
724
- "BuiltIn.Run Keyword Unless",
725
- ]:
743
+ if result.longname in self.KEYWORDS_WITH_EXPRESSIONS:
726
744
  tokens = argument_tokens
727
745
  if tokens and (token := tokens[0]):
728
746
  self._analyze_token_expression_variables(token)
@@ -896,7 +914,29 @@ class NamespaceAnalyzer(Visitor):
896
914
 
897
915
  if keyword_token is not None and keyword_token.value and keyword_token.value.upper() not in ("", "NONE"):
898
916
  self._analyze_token_variables(keyword_token)
899
- self._analyze_statement_variables(node)
917
+ self._visit_block_settings_statement(node)
918
+
919
+ self._analyze_keyword_call(
920
+ node,
921
+ keyword_token,
922
+ [e for e in node.get_tokens(Token.ARGUMENT)],
923
+ allow_variables=True,
924
+ ignore_errors_if_contains_variables=True,
925
+ )
926
+
927
+ def visit_Teardown(self, node: Fixture) -> None: # noqa: N802
928
+ keyword_token = node.get_token(Token.NAME)
929
+
930
+ # TODO: calculate possible variables in NAME
931
+
932
+ if keyword_token is not None and keyword_token.value and keyword_token.value.upper() not in ("", "NONE"):
933
+
934
+ def _handler() -> None:
935
+ self._analyze_token_variables(keyword_token)
936
+ self._analyze_statement_variables(node)
937
+
938
+ if self._end_block_handlers is not None:
939
+ self._end_block_handlers.append(_handler)
900
940
 
901
941
  self._analyze_keyword_call(
902
942
  node,
@@ -984,9 +1024,15 @@ class NamespaceAnalyzer(Visitor):
984
1024
  self._current_testcase_or_keyword_name = node.name
985
1025
  old_variables = self._variables
986
1026
  self._variables = self._variables.copy()
1027
+ self._end_block_handlers = []
987
1028
  try:
988
1029
  self.generic_visit(node)
1030
+
1031
+ for handler in self._end_block_handlers:
1032
+ handler()
1033
+
989
1034
  finally:
1035
+ self._end_block_handlers = None
990
1036
  self._variables = old_variables
991
1037
  self._current_testcase_or_keyword_name = None
992
1038
  self._template = None
@@ -1029,13 +1075,21 @@ class NamespaceAnalyzer(Visitor):
1029
1075
  self._current_testcase_or_keyword_name = node.name
1030
1076
  old_variables = self._variables
1031
1077
  self._variables = self._variables.copy()
1078
+ self._end_block_handlers = []
1032
1079
  try:
1033
1080
  arguments = next((v for v in node.body if isinstance(v, Arguments)), None)
1034
1081
  if arguments is not None:
1035
1082
  self._visit_Arguments(arguments)
1083
+ self._block_variables = self._variables.copy()
1036
1084
 
1037
1085
  self.generic_visit(node)
1086
+
1087
+ for handler in self._end_block_handlers:
1088
+ handler()
1089
+
1038
1090
  finally:
1091
+ self._end_block_handlers = None
1092
+ self._block_variables = None
1039
1093
  self._variables = old_variables
1040
1094
  self._current_testcase_or_keyword_name = None
1041
1095
  self._current_keyword_doc = None
@@ -1132,7 +1186,7 @@ class NamespaceAnalyzer(Visitor):
1132
1186
  )
1133
1187
  )
1134
1188
 
1135
- except VariableError:
1189
+ except (VariableError, InvalidVariableError):
1136
1190
  pass
1137
1191
 
1138
1192
  def _analyze_assign_statement(self, node: Statement) -> None:
@@ -1172,7 +1226,7 @@ class NamespaceAnalyzer(Visitor):
1172
1226
  )
1173
1227
  )
1174
1228
 
1175
- except VariableError:
1229
+ except (VariableError, InvalidVariableError):
1176
1230
  pass
1177
1231
 
1178
1232
  def visit_InlineIfHeader(self, node: Statement) -> None: # noqa: N802
@@ -1186,7 +1240,7 @@ class NamespaceAnalyzer(Visitor):
1186
1240
  variables = node.get_tokens(Token.VARIABLE)
1187
1241
  for variable in variables:
1188
1242
  variable_token = self._get_variable_token(variable)
1189
- if variable_token is not None:
1243
+ if variable_token is not None and is_variable(variable_token.value):
1190
1244
  existing_var = self._find_variable(variable_token.value)
1191
1245
 
1192
1246
  if existing_var is None or existing_var.type not in [
@@ -1248,7 +1302,7 @@ class NamespaceAnalyzer(Visitor):
1248
1302
  source=self._namespace.source,
1249
1303
  )
1250
1304
 
1251
- except VariableError:
1305
+ except (VariableError, InvalidVariableError):
1252
1306
  pass
1253
1307
 
1254
1308
  def _format_template(self, template: str, arguments: Tuple[str, ...]) -> Tuple[str, Tuple[str, ...]]:
@@ -1351,7 +1405,7 @@ class NamespaceAnalyzer(Visitor):
1351
1405
  self._visit_settings_statement(node, DiagnosticSeverity.HINT)
1352
1406
 
1353
1407
  def visit_Timeout(self, node: Statement) -> None: # noqa: N802
1354
- self._analyze_statement_variables(node, DiagnosticSeverity.HINT)
1408
+ self._visit_block_settings_statement(node)
1355
1409
 
1356
1410
  def visit_SingleValue(self, node: Statement) -> None: # noqa: N802
1357
1411
  self._visit_settings_statement(node, DiagnosticSeverity.HINT)
@@ -1399,19 +1453,35 @@ class NamespaceAnalyzer(Visitor):
1399
1453
  code=Error.DEPRECATED_HEADER,
1400
1454
  )
1401
1455
 
1402
- def visit_ReturnSetting(self, node: Statement) -> None: # noqa: N802
1403
- self._analyze_statement_variables(node)
1456
+ if get_robot_version() >= (7, 0):
1404
1457
 
1405
- if get_robot_version() >= (7, 0):
1406
- token = node.get_token(Token.RETURN_SETTING)
1407
- if token is not None and token.error:
1408
- self._append_diagnostics(
1409
- range=range_from_node_or_token(node, token),
1410
- message=token.error,
1411
- severity=DiagnosticSeverity.WARNING,
1412
- tags=[DiagnosticTag.DEPRECATED],
1413
- code=Error.DEPRECATED_RETURN_SETTING,
1414
- )
1458
+ def visit_ReturnSetting(self, node: Statement) -> None: # noqa: N802
1459
+
1460
+ def _handler() -> None:
1461
+ self._analyze_statement_variables(node)
1462
+
1463
+ if self._end_block_handlers is not None:
1464
+ self._end_block_handlers.append(_handler)
1465
+
1466
+ if get_robot_version() >= (7, 0):
1467
+ token = node.get_token(Token.RETURN_SETTING)
1468
+ if token is not None and token.error:
1469
+ self._append_diagnostics(
1470
+ range=range_from_node_or_token(node, token),
1471
+ message=token.error,
1472
+ severity=DiagnosticSeverity.WARNING,
1473
+ tags=[DiagnosticTag.DEPRECATED],
1474
+ code=Error.DEPRECATED_RETURN_SETTING,
1475
+ )
1476
+
1477
+ else:
1478
+
1479
+ def visit_Return(self, node: Statement) -> None: # noqa: N802
1480
+ def _handler() -> None:
1481
+ self._analyze_statement_variables(node)
1482
+
1483
+ if self._end_block_handlers is not None:
1484
+ self._end_block_handlers.append(_handler)
1415
1485
 
1416
1486
  def _check_import_name(self, value: Optional[str], node: ast.AST, type: str) -> None:
1417
1487
  if not value:
@@ -1540,11 +1610,18 @@ class NamespaceAnalyzer(Visitor):
1540
1610
  default_value=default_value or None,
1541
1611
  )
1542
1612
 
1543
- vars = self._suite_variables if self._in_setting else self._variables
1613
+ vars = (
1614
+ self._block_variables
1615
+ if self._block_variables and self._in_block_setting
1616
+ else self._suite_variables if self._in_setting else self._variables
1617
+ )
1544
1618
 
1545
- matcher = VariableMatcher(name)
1619
+ try:
1620
+ matcher = VariableMatcher(name)
1546
1621
 
1547
- return vars.get(matcher, None)
1622
+ return vars.get(matcher, None)
1623
+ except (VariableError, InvalidVariableError):
1624
+ return None
1548
1625
 
1549
1626
  def _is_number(self, name: str) -> bool:
1550
1627
  if name.startswith("$"):
@@ -3,13 +3,13 @@ from functools import lru_cache
3
3
  _transform_table = str.maketrans("", "", "_ ")
4
4
 
5
5
 
6
- @lru_cache(maxsize=5000)
6
+ @lru_cache(maxsize=None)
7
7
  def normalize(text: str) -> str:
8
8
  # return text.lower().replace("_", "").replace(" ", "")
9
9
  return text.casefold().translate(_transform_table)
10
10
 
11
11
 
12
- @lru_cache(maxsize=5000)
12
+ @lru_cache(maxsize=None)
13
13
  def normalize_namespace(text: str) -> str:
14
14
  return text.lower().replace(" ", "")
15
15
 
@@ -1,21 +1,11 @@
1
- from __future__ import annotations
2
-
3
1
  import sys
4
2
  from os import PathLike
5
3
  from pathlib import Path
6
4
  from typing import Optional, Union
7
5
 
8
6
 
9
- def find_file(
10
- path: Union[Path, PathLike[str], str],
11
- basedir: Union[Path, PathLike[str], str] = ".",
12
- file_type: Optional[str] = None,
13
- ) -> str:
14
- return find_file_ex(path, basedir, file_type)
15
-
16
-
17
7
  def find_file_ex(
18
- path: Union[Path, PathLike[str], str],
8
+ path: Union[Path, "PathLike[str]", str],
19
9
  basedir: Union[Path, PathLike[str], str] = ".",
20
10
  file_type: Optional[str] = None,
21
11
  ) -> str:
@@ -25,6 +15,7 @@ def find_file_ex(
25
15
  ret = _find_absolute_path(path) if path.is_absolute() else _find_relative_path(path, basedir)
26
16
  if ret:
27
17
  return str(ret)
18
+
28
19
  default = file_type or "File"
29
20
 
30
21
  file_type = (
@@ -40,15 +31,23 @@ def find_file_ex(
40
31
  raise DataError("%s '%s' does not exist." % (file_type, path))
41
32
 
42
33
 
43
- def _find_absolute_path(path: Union[Path, PathLike[str], str]) -> Optional[str]:
34
+ def find_file(
35
+ path: Union[Path, "PathLike[str]", str],
36
+ basedir: Union[Path, PathLike[str], str] = ".",
37
+ file_type: Optional[str] = None,
38
+ ) -> str:
39
+ return find_file_ex(path, basedir, file_type)
40
+
41
+
42
+ def _find_absolute_path(path: Union[Path, "PathLike[str]", str]) -> Optional[str]:
44
43
  if _is_valid_file(path):
45
44
  return str(path)
46
45
  return None
47
46
 
48
47
 
49
48
  def _find_relative_path(
50
- path: Union[Path, PathLike[str], str],
51
- basedir: Union[Path, PathLike[str], str],
49
+ path: Union[Path, "PathLike[str]", str],
50
+ basedir: Union[Path, "PathLike[str]", str],
52
51
  ) -> Optional[str]:
53
52
  for base in [basedir, *sys.path]:
54
53
  if not base:
@@ -65,6 +64,6 @@ def _find_relative_path(
65
64
  return None
66
65
 
67
66
 
68
- def _is_valid_file(path: Union[Path, PathLike[str], str]) -> bool:
67
+ def _is_valid_file(path: Union[Path, "PathLike[str]", str]) -> bool:
69
68
  path = Path(path)
70
69
  return path.is_file() or (path.is_dir() and Path(path, "__init__.py").is_fifo())
@@ -1,3 +1,13 @@
1
+ import functools
2
+ from typing import Optional, Tuple, cast
3
+
4
+ from robot.utils.escaping import split_from_equals as robot_split_from_equals
5
+ from robot.variables.search import VariableMatch as RobotVariableMatch
6
+ from robot.variables.search import contains_variable as robot_contains_variable
7
+ from robot.variables.search import is_scalar_assign as robot_is_scalar_assign
8
+ from robot.variables.search import is_variable as robot_is_variable
9
+ from robot.variables.search import search_variable as robot_search_variable
10
+
1
11
  BUILTIN_VARIABLES = [
2
12
  "${CURDIR}",
3
13
  "${EMPTY}",
@@ -35,3 +45,28 @@ BUILTIN_VARIABLES = [
35
45
  "${DEBUG_FILE}",
36
46
  "${OUTPUT_DIR}",
37
47
  ]
48
+
49
+
50
+ @functools.lru_cache(maxsize=512)
51
+ def contains_variable(string: str, identifiers: str = "$@&") -> bool:
52
+ return cast(bool, robot_contains_variable(string, identifiers))
53
+
54
+
55
+ @functools.lru_cache(maxsize=512)
56
+ def is_scalar_assign(string: str, allow_assign_mark: bool = False) -> bool:
57
+ return cast(bool, robot_is_scalar_assign(string, allow_assign_mark))
58
+
59
+
60
+ @functools.lru_cache(maxsize=512)
61
+ def is_variable(string: str, identifiers: str = "$@&") -> bool:
62
+ return cast(bool, robot_is_variable(string, identifiers))
63
+
64
+
65
+ @functools.lru_cache(maxsize=512)
66
+ def search_variable(string: str, identifiers: str = "$@&%*", ignore_errors: bool = False) -> RobotVariableMatch:
67
+ return robot_search_variable(string, identifiers, ignore_errors)
68
+
69
+
70
+ @functools.lru_cache(maxsize=512)
71
+ def split_from_equals(string: str) -> Tuple[str, Optional[str]]:
72
+ return cast(Tuple[str, Optional[str]], robot_split_from_equals(string))
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: robotcode-robot
3
- Version: 0.94.0
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.94.0
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
@@ -0,0 +1,32 @@
1
+ robotcode/robot/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
+ robotcode/robot/__version__.py,sha256=1KBvo1_4ig2ZeMfCvFApYtfDll8Ysfu6h45ByRERz1E,23
3
+ robotcode/robot/py.typed,sha256=bWew9mHgMy8LqMu7RuqQXFXLBxh2CRx0dUbSx-3wE48,27
4
+ robotcode/robot/config/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
5
+ robotcode/robot/config/loader.py,sha256=bNJwr_XdCoUzpG2ag0BH33PIfiCwn0GMxn7q_Sw3zOk,8103
6
+ robotcode/robot/config/model.py,sha256=sgr6-4_E06g-yIXW41Z-NtIXZ_7JMmR5WvUD7kTUqu4,89106
7
+ robotcode/robot/config/utils.py,sha256=xY-LH31BidWzonpvSrle-4HvKrp02I7IRqU2JwlL4Ls,2931
8
+ robotcode/robot/diagnostics/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
9
+ robotcode/robot/diagnostics/data_cache.py,sha256=Wge9HuxSUiBVMmrmlsYSMmG2ad7f3Texwox0Dm8lN7U,2969
10
+ robotcode/robot/diagnostics/diagnostics_modifier.py,sha256=3dDsu8-ET6weIvv7Sk3IQaPYFNxnXUs8Y7gpGTjfOBs,9796
11
+ robotcode/robot/diagnostics/document_cache_helper.py,sha256=n903UxVXM4Uq4fPxN5s-dugQAKcWUwf4Nw4q0CJV7aw,23902
12
+ robotcode/robot/diagnostics/entities.py,sha256=dA5jTt1pSCLvWWC_DkHPjfBZmnS80dVt3gZptASR3Uo,11008
13
+ robotcode/robot/diagnostics/errors.py,sha256=vRH7HiZOfQIC-L7ys2Bj9ULYxLpUH7I03qJRSkEx08k,1813
14
+ robotcode/robot/diagnostics/imports_manager.py,sha256=lmwg_wYFZLNx_o0u856_5JihXHPLBei2vfr6Puhlm-c,59127
15
+ robotcode/robot/diagnostics/keyword_finder.py,sha256=O3EHA93ZGqNI-TocvSYAmWz7INWakhhfBeiXq57wepM,17421
16
+ robotcode/robot/diagnostics/library_doc.py,sha256=6j_7qy5O-dFAbVmwjn_sDkBHrFvghJwu0fvPcLhJnMw,100901
17
+ robotcode/robot/diagnostics/model_helper.py,sha256=-dRXt__coz-m2HaMLTqgQEUF6ylH0QZxj5hUv2DBJyQ,31017
18
+ robotcode/robot/diagnostics/namespace.py,sha256=Y6HDBKIYyCc3qCg2TT-orB9mASd-Ii4fkZuIpcFQMbk,75417
19
+ robotcode/robot/diagnostics/namespace_analyzer.py,sha256=NlvfAEYH_GyE1ZQ1JH9vR9yPfki3Xmw9TyNEc-B0mtM,74067
20
+ robotcode/robot/diagnostics/workspace_config.py,sha256=3SoewUj_LZB1Ki5hXM8oxQpJr6vyiog66SUw-ibODSA,2478
21
+ robotcode/robot/utils/__init__.py,sha256=OjNPMn_XSnfaMCyKd8Kmq6vlRt6mIGlzW4qiiD3ykUg,447
22
+ robotcode/robot/utils/ast.py,sha256=_ob36KHFY776n9dhljn0xAWVoUDb7pV86fPW40vIirY,11266
23
+ robotcode/robot/utils/markdownformatter.py,sha256=Cj4NjComTcNZf8uuezvtBbZqPMLjS237RknMopZYETk,11418
24
+ robotcode/robot/utils/match.py,sha256=Vtz1ueT6DIZZ4hKyXgvTg1A3x2puBwHgvjw1oAYBn5w,632
25
+ robotcode/robot/utils/robot_path.py,sha256=6XfNjnIVQREwgUR7r0eUMHgLnduXKTpHWy2Dvs_MbPo,1763
26
+ robotcode/robot/utils/stubs.py,sha256=6-DMI_CQVJHDgG13t-zINKGCRb_Q7MQPm0_AkfhAEvE,748
27
+ robotcode/robot/utils/variables.py,sha256=XNPUDpghGy_f_Fne9lJ4OST-kFi-72Nrr0yJUu6f_Oc,2169
28
+ robotcode/robot/utils/visitor.py,sha256=V3ZtpzrCilKpLQfDXUcjapd2uGq12XxbHppNPOl_Jns,3080
29
+ robotcode_robot-0.95.0.dist-info/METADATA,sha256=ucoFRI1dSKtBhbXI3KtxfGXyEbIXRUHxBoe7LURhGVY,2240
30
+ robotcode_robot-0.95.0.dist-info/WHEEL,sha256=1yFddiXMmvYK7QYTqtRNtX66WJ0Mz8PYEiEUoOUUxRY,87
31
+ robotcode_robot-0.95.0.dist-info/licenses/LICENSE.txt,sha256=B05uMshqTA74s-0ltyHKI6yoPfJ3zYgQbvcXfDVGFf8,10280
32
+ robotcode_robot-0.95.0.dist-info/RECORD,,
@@ -1,31 +0,0 @@
1
- robotcode/robot/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
- robotcode/robot/__version__.py,sha256=BbCpQB0IaKmq_fOtysTb_iVtvqbH-vHS1DoS1eLd4w8,23
3
- robotcode/robot/py.typed,sha256=bWew9mHgMy8LqMu7RuqQXFXLBxh2CRx0dUbSx-3wE48,27
4
- robotcode/robot/config/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
5
- robotcode/robot/config/loader.py,sha256=bNJwr_XdCoUzpG2ag0BH33PIfiCwn0GMxn7q_Sw3zOk,8103
6
- robotcode/robot/config/model.py,sha256=sgr6-4_E06g-yIXW41Z-NtIXZ_7JMmR5WvUD7kTUqu4,89106
7
- robotcode/robot/config/utils.py,sha256=xY-LH31BidWzonpvSrle-4HvKrp02I7IRqU2JwlL4Ls,2931
8
- robotcode/robot/diagnostics/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
9
- robotcode/robot/diagnostics/diagnostics_modifier.py,sha256=3dDsu8-ET6weIvv7Sk3IQaPYFNxnXUs8Y7gpGTjfOBs,9796
10
- robotcode/robot/diagnostics/document_cache_helper.py,sha256=n903UxVXM4Uq4fPxN5s-dugQAKcWUwf4Nw4q0CJV7aw,23902
11
- robotcode/robot/diagnostics/entities.py,sha256=sNXKBdJEy7elkzc0P2qszHQQosbmcyWrCw3Za4-LSCE,11013
12
- robotcode/robot/diagnostics/errors.py,sha256=QpvimvU_-c13i6mNrOiIavr2BeClHThRk8Rh7zIbA1s,1813
13
- robotcode/robot/diagnostics/imports_manager.py,sha256=somlZbrkXasgU6KZmnf9Zfm4_3nqXEbi8Er5kSO-48Y,58999
14
- robotcode/robot/diagnostics/keyword_finder.py,sha256=KQKZN0lf4D8qRERRx1JUeEdSHFgRfs0wEcu0XH2xJ-A,16809
15
- robotcode/robot/diagnostics/library_doc.py,sha256=2qPU1MeD4uiUAipV0U3JUxQAKhr9TH_WwDM_rDdMZuw,98862
16
- robotcode/robot/diagnostics/model_helper.py,sha256=9JGZN_dBXMPP06WsAIDz5Q_Fg3F3Rq1n-7Rc72etivo,30864
17
- robotcode/robot/diagnostics/namespace.py,sha256=_KNsoQS5UJB6Laa8Ic0FrQZjxngxmaKO36KJ260qyug,76054
18
- robotcode/robot/diagnostics/namespace_analyzer.py,sha256=z1AyGQXMoq1up3LrPSLWJHHNUI_j_iwIj9ucLJcg7gU,71399
19
- robotcode/robot/diagnostics/workspace_config.py,sha256=3SoewUj_LZB1Ki5hXM8oxQpJr6vyiog66SUw-ibODSA,2478
20
- robotcode/robot/utils/__init__.py,sha256=OjNPMn_XSnfaMCyKd8Kmq6vlRt6mIGlzW4qiiD3ykUg,447
21
- robotcode/robot/utils/ast.py,sha256=_ob36KHFY776n9dhljn0xAWVoUDb7pV86fPW40vIirY,11266
22
- robotcode/robot/utils/markdownformatter.py,sha256=Cj4NjComTcNZf8uuezvtBbZqPMLjS237RknMopZYETk,11418
23
- robotcode/robot/utils/match.py,sha256=ofyfXgrvVddl7a064Dk5Kiqp3a-n_6gTIgqDbL3E80Q,632
24
- robotcode/robot/utils/robot_path.py,sha256=qKBh1cEnReBBLKkWu4gB9EzM-scAwE4xJc1m6v2LRN0,1786
25
- robotcode/robot/utils/stubs.py,sha256=6-DMI_CQVJHDgG13t-zINKGCRb_Q7MQPm0_AkfhAEvE,748
26
- robotcode/robot/utils/variables.py,sha256=fEl8S37lb_mD4hn2MZRAlkiuLGBjAOeZVK0r2o2CfPw,742
27
- robotcode/robot/utils/visitor.py,sha256=V3ZtpzrCilKpLQfDXUcjapd2uGq12XxbHppNPOl_Jns,3080
28
- robotcode_robot-0.94.0.dist-info/METADATA,sha256=ZC2K7aAay0qTvzWb38ymbXwS1Ufd8OvfKZdICK2A1uw,2240
29
- robotcode_robot-0.94.0.dist-info/WHEEL,sha256=1yFddiXMmvYK7QYTqtRNtX66WJ0Mz8PYEiEUoOUUxRY,87
30
- robotcode_robot-0.94.0.dist-info/licenses/LICENSE.txt,sha256=B05uMshqTA74s-0ltyHKI6yoPfJ3zYgQbvcXfDVGFf8,10280
31
- robotcode_robot-0.94.0.dist-info/RECORD,,