robotcode-robot 0.97.0__py3-none-any.whl → 0.99.0__py3-none-any.whl

Sign up to get free protection for your applications and to get access to all the features.
@@ -1 +1 @@
1
- __version__ = "0.97.0"
1
+ __version__ = "0.99.0"
@@ -10,6 +10,7 @@ class Error:
10
10
  KEYWORD_NOT_FOUND = "KeywordNotFound"
11
11
  LIBRARY_CONTAINS_NO_KEYWORDS = "LibraryContainsNoKeywords"
12
12
  POSSIBLE_CIRCULAR_IMPORT = "PossibleCircularImport"
13
+ CIRCULAR_IMPORT = "CircularImport"
13
14
  RESOURCE_EMPTY = "ResourceEmpty"
14
15
  IMPORT_CONTAINS_ERRORS = "ImportContainsErrors"
15
16
  RECURSIVE_IMPORT = "RecursiveImport"
@@ -44,6 +44,7 @@ from robotcode.core.lsp.types import (
44
44
  from robotcode.core.text_document import TextDocument
45
45
  from robotcode.core.uri import Uri
46
46
  from robotcode.core.utils.logging import LoggingDescriptor
47
+ from robotcode.core.utils.path import same_file
47
48
 
48
49
  from ..utils.ast import (
49
50
  range_from_node,
@@ -1242,15 +1243,45 @@ class Namespace:
1242
1243
 
1243
1244
  source = self.imports_manager.find_resource(value.name, base_dir, variables=variables)
1244
1245
 
1245
- if source in self._resources_files:
1246
+ allread_imported_resource = next(
1247
+ (
1248
+ v
1249
+ for k, v in self._resources.items()
1250
+ if v.library_doc.source is not None and same_file(v.library_doc.source, source)
1251
+ ),
1252
+ None,
1253
+ )
1254
+ if allread_imported_resource is not None:
1246
1255
  self._logger.debug(lambda: f"Resource '{value.name}' already imported.", context_name="import")
1256
+ if top_level:
1257
+ self.append_diagnostics(
1258
+ range=value.range,
1259
+ message=f"Resource '{value.name}' already imported.",
1260
+ severity=DiagnosticSeverity.INFORMATION,
1261
+ source=DIAGNOSTICS_SOURCE_NAME,
1262
+ related_information=(
1263
+ [
1264
+ DiagnosticRelatedInformation(
1265
+ location=Location(
1266
+ uri=str(Uri.from_path(allread_imported_resource.import_source)),
1267
+ range=allread_imported_resource.import_range,
1268
+ ),
1269
+ message="",
1270
+ )
1271
+ ]
1272
+ if allread_imported_resource.import_source
1273
+ else None
1274
+ ),
1275
+ code=Error.RESOURCE_ALREADY_IMPORTED,
1276
+ )
1247
1277
  return None
1248
1278
 
1249
- if self.source == source:
1279
+ if same_file(self.source, source):
1250
1280
  if parent_import:
1251
1281
  self.append_diagnostics(
1252
1282
  range=parent_import.range,
1253
- message="Possible circular import.",
1283
+ message=f"Possible circular import detected, Resource file'{Path(self.source).name}' "
1284
+ "might reference itself directly or through other resource files",
1254
1285
  severity=DiagnosticSeverity.INFORMATION,
1255
1286
  source=DIAGNOSTICS_SOURCE_NAME,
1256
1287
  related_information=(
@@ -1268,6 +1299,15 @@ class Namespace:
1268
1299
  ),
1269
1300
  code=Error.POSSIBLE_CIRCULAR_IMPORT,
1270
1301
  )
1302
+ else:
1303
+ self.append_diagnostics(
1304
+ range=value.range,
1305
+ message=f"Circular import detected, Resource file '{Path(source).name}' "
1306
+ "is importing itself",
1307
+ severity=DiagnosticSeverity.INFORMATION,
1308
+ source=DIAGNOSTICS_SOURCE_NAME,
1309
+ code=Error.CIRCULAR_IMPORT,
1310
+ )
1271
1311
  else:
1272
1312
  result = self._get_resource_entry(
1273
1313
  value.name,
@@ -1453,7 +1493,7 @@ class Namespace:
1453
1493
  allread_imported_resource = self._resources_files.get(entry.library_doc.source, None)
1454
1494
 
1455
1495
  if allread_imported_resource is None and entry.library_doc.source != self.source:
1456
- self._resources[entry.import_name] = entry
1496
+ self._resources[entry.library_doc.source] = entry
1457
1497
  self._resources_files[entry.library_doc.source] = entry
1458
1498
  if entry.variables:
1459
1499
  variables = self.get_suite_variables()
@@ -1515,7 +1555,14 @@ class Namespace:
1515
1555
  (
1516
1556
  e
1517
1557
  for e in self._variables_imports.values()
1518
- if e.library_doc.source == entry.library_doc.source
1558
+ if (
1559
+ (
1560
+ e.library_doc.source is not None
1561
+ and entry.library_doc.source is not None
1562
+ and same_file(e.library_doc.source, entry.library_doc.source)
1563
+ )
1564
+ or (e.library_doc.source is None and entry.library_doc.source is None)
1565
+ )
1519
1566
  and e.alias == entry.alias
1520
1567
  and e.args == entry.args
1521
1568
  ),
@@ -1580,7 +1627,14 @@ class Namespace:
1580
1627
  (
1581
1628
  e
1582
1629
  for e in self._libraries.values()
1583
- if e.library_doc.source == entry.library_doc.source
1630
+ if (
1631
+ (
1632
+ e.library_doc.source is not None
1633
+ and entry.library_doc.source is not None
1634
+ and same_file(e.library_doc.source, entry.library_doc.source)
1635
+ )
1636
+ or (e.library_doc.source is None and entry.library_doc.source is None)
1637
+ )
1584
1638
  and e.library_doc.member_name == entry.library_doc.member_name
1585
1639
  and e.alias == entry.alias
1586
1640
  and e.args == entry.args
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: robotcode-robot
3
- Version: 0.97.0
3
+ Version: 0.99.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
@@ -25,7 +25,7 @@ Classifier: Topic :: Utilities
25
25
  Classifier: Typing :: Typed
26
26
  Requires-Python: >=3.8
27
27
  Requires-Dist: platformdirs<4.4.0,>=3.2.0
28
- Requires-Dist: robotcode-core==0.97.0
28
+ Requires-Dist: robotcode-core==0.99.0
29
29
  Requires-Dist: robotframework>=4.1.0
30
30
  Requires-Dist: tomli>=1.1.0; python_version < '3.11'
31
31
  Description-Content-Type: text/markdown
@@ -1,5 +1,5 @@
1
1
  robotcode/robot/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
- robotcode/robot/__version__.py,sha256=4n3tdadixJ_eZgVwheQyewJFQEfb651DXkoZqfN9A3o,23
2
+ robotcode/robot/__version__.py,sha256=edGCadaA59-v6zz7c0FTQVXhF-FODX9Og9G1bbQCm40,23
3
3
  robotcode/robot/py.typed,sha256=bWew9mHgMy8LqMu7RuqQXFXLBxh2CRx0dUbSx-3wE48,27
4
4
  robotcode/robot/config/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
5
5
  robotcode/robot/config/loader.py,sha256=tLPzeyHl4ELBIVSj2JtU2wVqlurouKTdfxHy0T5HxRE,8584
@@ -10,12 +10,12 @@ robotcode/robot/diagnostics/data_cache.py,sha256=Wge9HuxSUiBVMmrmlsYSMmG2ad7f3Te
10
10
  robotcode/robot/diagnostics/diagnostics_modifier.py,sha256=3dDsu8-ET6weIvv7Sk3IQaPYFNxnXUs8Y7gpGTjfOBs,9796
11
11
  robotcode/robot/diagnostics/document_cache_helper.py,sha256=n903UxVXM4Uq4fPxN5s-dugQAKcWUwf4Nw4q0CJV7aw,23902
12
12
  robotcode/robot/diagnostics/entities.py,sha256=b4u2yQN8MDg90RoTMaW7iLogiDNwOAtK180KCB94RfE,10970
13
- robotcode/robot/diagnostics/errors.py,sha256=vRH7HiZOfQIC-L7ys2Bj9ULYxLpUH7I03qJRSkEx08k,1813
13
+ robotcode/robot/diagnostics/errors.py,sha256=vp7MAB0_t9tAnnPfXcXMpUqjV6ifzPPEsfMUEseEzr8,1852
14
14
  robotcode/robot/diagnostics/imports_manager.py,sha256=jaEE7iUzEA4Rp-KXP3nfn0JyUGyp-0BMfNi8_DsQ6KE,61169
15
15
  robotcode/robot/diagnostics/keyword_finder.py,sha256=dm4BA0ccp5V4C65CkSYUJUNXegSmvG24uu09T3eL6a4,17319
16
16
  robotcode/robot/diagnostics/library_doc.py,sha256=VPCX7xp-0LJiYSFLO68y8MuNAMIYcnhJTIHRmWPpl30,100507
17
17
  robotcode/robot/diagnostics/model_helper.py,sha256=ltuUNWwZJFBmMFXIomMmW1IP5v7tMpQSoC1YbncgoNI,30985
18
- robotcode/robot/diagnostics/namespace.py,sha256=lJOkaS_yCp8SVhURqh5NqAsm394s0cHZUMQwVeh9nno,75159
18
+ robotcode/robot/diagnostics/namespace.py,sha256=uRr2TINn7xNyF9tbw_0ojnTnZj_Kr6Rid_hEz68hFP8,78197
19
19
  robotcode/robot/diagnostics/namespace_analyzer.py,sha256=MgEoEGH7FvwVYoR3wA0JEGQxMWJTUUHq10NrorJV5LY,74183
20
20
  robotcode/robot/diagnostics/workspace_config.py,sha256=gyKR5z-HpnjxPAui3YujgeZqXX7RYBO_ErGVlk7vnGc,2689
21
21
  robotcode/robot/utils/__init__.py,sha256=OjNPMn_XSnfaMCyKd8Kmq6vlRt6mIGlzW4qiiD3ykUg,447
@@ -26,7 +26,7 @@ robotcode/robot/utils/robot_path.py,sha256=Z-GVBOPA_xeD20bCJi4_AWaU0eQWvCym-YFty
26
26
  robotcode/robot/utils/stubs.py,sha256=umugZYAyneFNgqRJBRMJPzm0u0B_TH8Sx_y-ykXnxpw,351
27
27
  robotcode/robot/utils/variables.py,sha256=-ldL8mRRSYYW2pwlm8IpoDeQcG6LYBqaYyV_7U3xsIc,2174
28
28
  robotcode/robot/utils/visitor.py,sha256=nP3O0qh3YYuxR6S8wYJRBFfNwIVgsgohURBlrnFkRYQ,2299
29
- robotcode_robot-0.97.0.dist-info/METADATA,sha256=ZH34rvGP5O_-ihAJedp0f682Q7DOkNVFoT8s9n9wUeo,2214
30
- robotcode_robot-0.97.0.dist-info/WHEEL,sha256=C2FUgwZgiLbznR-k0b_5k3Ai_1aASOXDss3lzCUsUug,87
31
- robotcode_robot-0.97.0.dist-info/licenses/LICENSE.txt,sha256=B05uMshqTA74s-0ltyHKI6yoPfJ3zYgQbvcXfDVGFf8,10280
32
- robotcode_robot-0.97.0.dist-info/RECORD,,
29
+ robotcode_robot-0.99.0.dist-info/METADATA,sha256=EoIldqp50xLr4Xk7anxZqU9o7R0OiMy4yaIMJ79I0UI,2214
30
+ robotcode_robot-0.99.0.dist-info/WHEEL,sha256=C2FUgwZgiLbznR-k0b_5k3Ai_1aASOXDss3lzCUsUug,87
31
+ robotcode_robot-0.99.0.dist-info/licenses/LICENSE.txt,sha256=B05uMshqTA74s-0ltyHKI6yoPfJ3zYgQbvcXfDVGFf8,10280
32
+ robotcode_robot-0.99.0.dist-info/RECORD,,