robotcode-robot 0.77.1__py3-none-any.whl → 0.78.1__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.
- robotcode/robot/__version__.py +1 -1
- robotcode/robot/config/model.py +65 -14
- robotcode/robot/diagnostics/entities.py +3 -0
- robotcode/robot/diagnostics/namespace.py +129 -21
- {robotcode_robot-0.77.1.dist-info → robotcode_robot-0.78.1.dist-info}/METADATA +2 -2
- {robotcode_robot-0.77.1.dist-info → robotcode_robot-0.78.1.dist-info}/RECORD +8 -8
- {robotcode_robot-0.77.1.dist-info → robotcode_robot-0.78.1.dist-info}/WHEEL +0 -0
- {robotcode_robot-0.77.1.dist-info → robotcode_robot-0.78.1.dist-info}/licenses/LICENSE.txt +0 -0
robotcode/robot/__version__.py
CHANGED
@@ -1 +1 @@
|
|
1
|
-
__version__ = "0.
|
1
|
+
__version__ = "0.78.1"
|
robotcode/robot/config/model.py
CHANGED
@@ -16,6 +16,7 @@ from typing import (
|
|
16
16
|
List,
|
17
17
|
Literal,
|
18
18
|
Optional,
|
19
|
+
Set,
|
19
20
|
Tuple,
|
20
21
|
Union,
|
21
22
|
get_type_hints,
|
@@ -2264,6 +2265,9 @@ class RobotExtendBaseProfile(RobotBaseProfile):
|
|
2264
2265
|
class RobotProfile(RobotExtendBaseProfile):
|
2265
2266
|
"""Robot Framework configuration profile."""
|
2266
2267
|
|
2268
|
+
def __hash__(self) -> int:
|
2269
|
+
return id(self)
|
2270
|
+
|
2267
2271
|
description: Optional[str] = field(description="Description of the profile.")
|
2268
2272
|
|
2269
2273
|
detached: Optional[bool] = field(
|
@@ -2291,6 +2295,9 @@ class RobotProfile(RobotExtendBaseProfile):
|
|
2291
2295
|
"""
|
2292
2296
|
)
|
2293
2297
|
|
2298
|
+
def is_enabled(self) -> bool:
|
2299
|
+
return self.enabled is None or bool(self.enabled)
|
2300
|
+
|
2294
2301
|
hidden: Union[bool, Condition, None] = field(
|
2295
2302
|
description="""\
|
2296
2303
|
The profile should be hidden.
|
@@ -2349,13 +2356,13 @@ class RobotConfig(RobotExtendBaseProfile):
|
|
2349
2356
|
|
2350
2357
|
tool: Any = field(description="Tool configurations.")
|
2351
2358
|
|
2352
|
-
def
|
2359
|
+
def _select_profiles(
|
2353
2360
|
self,
|
2354
2361
|
*names: str,
|
2355
2362
|
verbose_callback: Optional[Callable[[Union[str, Callable[[], Any]]], None]] = None,
|
2356
2363
|
error_callback: Optional[Callable[[Union[str, Callable[[], Any]]], None]] = None,
|
2357
|
-
) -> Dict[str, RobotProfile]:
|
2358
|
-
result: Dict[str, RobotProfile] = {}
|
2364
|
+
) -> Dict[str, Tuple[RobotProfile, Optional[Set[Tuple[str, RobotProfile]]]]]:
|
2365
|
+
result: Dict[str, Tuple[RobotProfile, Optional[Set[Tuple[str, RobotProfile]]]]] = {}
|
2359
2366
|
|
2360
2367
|
profiles = self.profiles or {}
|
2361
2368
|
|
@@ -2372,14 +2379,20 @@ class RobotConfig(RobotExtendBaseProfile):
|
|
2372
2379
|
|
2373
2380
|
names = (*(default_profile or ()),)
|
2374
2381
|
|
2375
|
-
def select(name: str) -> None:
|
2382
|
+
def select(name: str, parent_profiles: Optional[Set[Tuple[str, RobotProfile]]] = None) -> None:
|
2376
2383
|
if not name:
|
2377
2384
|
return
|
2378
2385
|
|
2379
2386
|
nonlocal result
|
2380
2387
|
|
2381
2388
|
if verbose_callback:
|
2382
|
-
|
2389
|
+
if parent_profiles is not None:
|
2390
|
+
verbose_callback(
|
2391
|
+
f"Selecting profiles matching '{name}'"
|
2392
|
+
f" for parent profile '{next(f for f in parent_profiles)[0]}'."
|
2393
|
+
)
|
2394
|
+
else:
|
2395
|
+
verbose_callback(f"Selecting profiles matching '{name}'.")
|
2383
2396
|
|
2384
2397
|
profile_names = [p for p in profiles.keys() if fnmatch.fnmatchcase(p, name)]
|
2385
2398
|
|
@@ -2393,13 +2406,24 @@ class RobotConfig(RobotExtendBaseProfile):
|
|
2393
2406
|
|
2394
2407
|
for v in profile_names:
|
2395
2408
|
p = profiles[v]
|
2396
|
-
|
2409
|
+
|
2397
2410
|
if p.inherits:
|
2398
2411
|
if isinstance(p.inherits, list):
|
2399
2412
|
for i in p.inherits:
|
2400
|
-
select(str(i))
|
2413
|
+
select(str(i), {(v, p)})
|
2414
|
+
else:
|
2415
|
+
select(str(p.inherits), {(v, p)})
|
2416
|
+
|
2417
|
+
if v in result:
|
2418
|
+
if parent_profiles is None:
|
2419
|
+
result[v] = (p, None)
|
2401
2420
|
else:
|
2402
|
-
|
2421
|
+
parents = result[v][1]
|
2422
|
+
if parents is not None:
|
2423
|
+
parents.update(parent_profiles)
|
2424
|
+
|
2425
|
+
else:
|
2426
|
+
result.update({v: (p, parent_profiles)})
|
2403
2427
|
|
2404
2428
|
for name in names:
|
2405
2429
|
select(name)
|
@@ -2438,7 +2462,7 @@ class RobotConfig(RobotExtendBaseProfile):
|
|
2438
2462
|
}
|
2439
2463
|
)
|
2440
2464
|
|
2441
|
-
selected_profiles = self.
|
2465
|
+
selected_profiles = self._select_profiles(
|
2442
2466
|
*names, verbose_callback=verbose_callback, error_callback=error_callback
|
2443
2467
|
)
|
2444
2468
|
if verbose_callback:
|
@@ -2447,14 +2471,16 @@ class RobotConfig(RobotExtendBaseProfile):
|
|
2447
2471
|
else:
|
2448
2472
|
verbose_callback("No profiles selected.")
|
2449
2473
|
|
2450
|
-
for profile_name, profile in sorted(
|
2474
|
+
for profile_name, (profile, parent_profiles) in sorted(
|
2475
|
+
selected_profiles.items(), key=lambda x: x[1][0].precedence or 0
|
2476
|
+
):
|
2451
2477
|
try:
|
2452
|
-
if
|
2478
|
+
if not profile.is_enabled():
|
2453
2479
|
if verbose_callback:
|
2454
2480
|
verbose_callback(f'Skipping profile "{profile_name}" because it\'s disabled.')
|
2455
2481
|
continue
|
2456
2482
|
except EvaluationError as e:
|
2457
|
-
message = f
|
2483
|
+
message = f"Error evaluating 'enabled' condition for profile '{profile_name}': {e}"
|
2458
2484
|
|
2459
2485
|
if error_callback is None:
|
2460
2486
|
raise ValueError(message) from e
|
@@ -2462,6 +2488,31 @@ class RobotConfig(RobotExtendBaseProfile):
|
|
2462
2488
|
error_callback(message)
|
2463
2489
|
continue
|
2464
2490
|
|
2491
|
+
if parent_profiles is not None:
|
2492
|
+
disabled_profiles = []
|
2493
|
+
skip = False
|
2494
|
+
for parent_profile in parent_profiles:
|
2495
|
+
try:
|
2496
|
+
if not parent_profile[1].is_enabled():
|
2497
|
+
disabled_profiles.append(parent_profile[0])
|
2498
|
+
except EvaluationError as e:
|
2499
|
+
message = f"Error evaluating 'enabled' condition for profile '{parent_profile[0]}': {e}"
|
2500
|
+
|
2501
|
+
if error_callback is None:
|
2502
|
+
raise ValueError(message) from e
|
2503
|
+
|
2504
|
+
error_callback(message)
|
2505
|
+
skip = True
|
2506
|
+
break
|
2507
|
+
|
2508
|
+
if skip or len(disabled_profiles) == len(parent_profiles):
|
2509
|
+
if verbose_callback:
|
2510
|
+
verbose_callback(
|
2511
|
+
f"Skipping profile inherited '{profile_name}' because no parent is enabled."
|
2512
|
+
f" Disabled profiles: {', '.join(disabled_profiles)}."
|
2513
|
+
)
|
2514
|
+
continue
|
2515
|
+
|
2465
2516
|
if verbose_callback:
|
2466
2517
|
verbose_callback(f'Using profile "{profile_name}".')
|
2467
2518
|
|
@@ -2471,7 +2522,7 @@ class RobotConfig(RobotExtendBaseProfile):
|
|
2471
2522
|
for k, v in profile.env.items():
|
2472
2523
|
os.environ[k] = str(v)
|
2473
2524
|
if verbose_callback:
|
2474
|
-
verbose_callback(lambda: f"Set environment variable
|
2525
|
+
verbose_callback(lambda: f"Set environment variable '{k}' to '{v}'")
|
2475
2526
|
|
2476
2527
|
if profile.detached:
|
2477
2528
|
result = RobotBaseProfile()
|
@@ -2520,4 +2571,4 @@ class RobotConfig(RobotExtendBaseProfile):
|
|
2520
2571
|
if new is not None:
|
2521
2572
|
setattr(result, f.name, new)
|
2522
2573
|
|
2523
|
-
return result, selected_profiles, enabled_profiles
|
2574
|
+
return result, {k: v[0] for k, v in selected_profiles.items()}, enabled_profiles
|
@@ -155,6 +155,9 @@ class VariableMatcher:
|
|
155
155
|
if isinstance(o, str):
|
156
156
|
match = search_variable(o, "$@&%", ignore_errors=True)
|
157
157
|
base = match.base
|
158
|
+
if base is None:
|
159
|
+
return False
|
160
|
+
|
158
161
|
normalized = str(normalize(base))
|
159
162
|
return self.normalized_name == normalized
|
160
163
|
|
@@ -99,6 +99,7 @@ from .library_doc import (
|
|
99
99
|
KeywordError,
|
100
100
|
KeywordMatcher,
|
101
101
|
LibraryDoc,
|
102
|
+
resolve_robot_variables,
|
102
103
|
)
|
103
104
|
|
104
105
|
EXTRACT_COMMENT_PATTERN = re.compile(r".*(?:^ *|\t+| {2,})#(?P<comment>.*)$")
|
@@ -184,22 +185,19 @@ class VariablesVisitor(Visitor):
|
|
184
185
|
class BlockVariableVisitor(Visitor):
|
185
186
|
def __init__(
|
186
187
|
self,
|
187
|
-
|
188
|
-
|
189
|
-
source: str,
|
188
|
+
namespace: "Namespace",
|
189
|
+
nodes: Optional[List[ast.AST]] = None,
|
190
190
|
position: Optional[Position] = None,
|
191
191
|
in_args: bool = True,
|
192
192
|
) -> None:
|
193
193
|
super().__init__()
|
194
|
-
self.
|
195
|
-
self.
|
196
|
-
self.source = source
|
194
|
+
self.namespace = namespace
|
195
|
+
self.nodes = nodes
|
197
196
|
self.position = position
|
198
197
|
self.in_args = in_args
|
199
198
|
|
200
199
|
self._results: Dict[str, VariableDefinition] = {}
|
201
200
|
self.current_kw_doc: Optional[KeywordDoc] = None
|
202
|
-
self._var_statements_vars: List[VariableDefinition] = []
|
203
201
|
|
204
202
|
def get(self, model: ast.AST) -> List[VariableDefinition]:
|
205
203
|
self._results = {}
|
@@ -224,7 +222,7 @@ class BlockVariableVisitor(Visitor):
|
|
224
222
|
name_token = node.get_token(Token.KEYWORD_NAME)
|
225
223
|
|
226
224
|
if name_token is not None and name_token.value:
|
227
|
-
keyword = ModelHelper.get_keyword_definition_at_token(self.
|
225
|
+
keyword = ModelHelper.get_keyword_definition_at_token(self.namespace.get_library_doc(), name_token)
|
228
226
|
self.current_kw_doc = keyword
|
229
227
|
|
230
228
|
for variable_token in filter(
|
@@ -246,7 +244,7 @@ class BlockVariableVisitor(Visitor):
|
|
246
244
|
col_offset=variable_token.col_offset,
|
247
245
|
end_line_no=variable_token.lineno,
|
248
246
|
end_col_offset=variable_token.end_col_offset,
|
249
|
-
source=self.source,
|
247
|
+
source=self.namespace.source,
|
250
248
|
keyword_doc=self.current_kw_doc,
|
251
249
|
)
|
252
250
|
|
@@ -290,7 +288,7 @@ class BlockVariableVisitor(Visitor):
|
|
290
288
|
col_offset=argument.col_offset,
|
291
289
|
end_line_no=argument.lineno,
|
292
290
|
end_col_offset=argument.end_col_offset,
|
293
|
-
source=self.source,
|
291
|
+
source=self.namespace.source,
|
294
292
|
keyword_doc=self.current_kw_doc,
|
295
293
|
)
|
296
294
|
self._results[argument.value] = arg_def
|
@@ -312,12 +310,48 @@ class BlockVariableVisitor(Visitor):
|
|
312
310
|
col_offset=variable.col_offset,
|
313
311
|
end_line_no=variable.lineno,
|
314
312
|
end_col_offset=variable.end_col_offset,
|
315
|
-
source=self.source,
|
313
|
+
source=self.namespace.source,
|
316
314
|
)
|
317
315
|
|
318
316
|
except VariableError:
|
319
317
|
pass
|
320
318
|
|
319
|
+
def _get_var_name(self, original: str, position: Position, require_assign: bool = True) -> Optional[str]:
|
320
|
+
robot_variables = resolve_robot_variables(
|
321
|
+
str(self.namespace.imports_manager.root_folder),
|
322
|
+
str(Path(self.namespace.source).parent) if self.namespace.source else ".",
|
323
|
+
self.namespace.imports_manager.get_resolvable_command_line_variables(),
|
324
|
+
variables=self.namespace.get_resolvable_variables(),
|
325
|
+
)
|
326
|
+
|
327
|
+
try:
|
328
|
+
replaced = robot_variables.replace_string(original)
|
329
|
+
except VariableError:
|
330
|
+
replaced = original
|
331
|
+
try:
|
332
|
+
name = self._resolve_var_name(replaced, robot_variables)
|
333
|
+
except ValueError:
|
334
|
+
name = original
|
335
|
+
match = search_variable(name, identifiers="$@&")
|
336
|
+
match.resolve_base(robot_variables)
|
337
|
+
valid = match.is_assign() if require_assign else match.is_variable()
|
338
|
+
if not valid:
|
339
|
+
return None
|
340
|
+
return str(match)
|
341
|
+
|
342
|
+
def _resolve_var_name(self, name: str, variables: Any) -> str:
|
343
|
+
if name.startswith("\\"):
|
344
|
+
name = name[1:]
|
345
|
+
if len(name) < 2 or name[0] not in "$@&":
|
346
|
+
raise ValueError
|
347
|
+
if name[1] != "{":
|
348
|
+
name = f"{name[0]}{{{name[1:]}}}"
|
349
|
+
match = search_variable(name, identifiers="$@&", ignore_errors=True)
|
350
|
+
match.resolve_base(variables)
|
351
|
+
if not match.is_assign():
|
352
|
+
raise ValueError
|
353
|
+
return str(match)
|
354
|
+
|
321
355
|
def visit_KeywordCall(self, node: Statement) -> None: # noqa: N802
|
322
356
|
# TODO analyze "Set Local/Global/Suite Variable"
|
323
357
|
|
@@ -341,12 +375,65 @@ class BlockVariableVisitor(Visitor):
|
|
341
375
|
col_offset=variable_token.col_offset,
|
342
376
|
end_line_no=variable_token.lineno,
|
343
377
|
end_col_offset=variable_token.end_col_offset,
|
344
|
-
source=self.source,
|
378
|
+
source=self.namespace.source,
|
345
379
|
)
|
346
380
|
|
347
381
|
except VariableError:
|
348
382
|
pass
|
349
383
|
|
384
|
+
keyword_token = node.get_token(Token.KEYWORD)
|
385
|
+
if keyword_token is None or not keyword_token.value:
|
386
|
+
return
|
387
|
+
|
388
|
+
keyword = self.namespace.find_keyword(keyword_token.value, raise_keyword_error=False)
|
389
|
+
if keyword is None:
|
390
|
+
return
|
391
|
+
|
392
|
+
if keyword.libtype == "LIBRARY" and keyword.libname == "BuiltIn":
|
393
|
+
var_type = None
|
394
|
+
if keyword.name == "Set Suite Variable":
|
395
|
+
var_type = VariableDefinition
|
396
|
+
elif keyword.name == "Set Global Variable":
|
397
|
+
var_type = GlobalVariableDefinition
|
398
|
+
elif keyword.name == "Set Test Variable" or keyword.name == "Set Task Variable":
|
399
|
+
var_type = TestVariableDefinition
|
400
|
+
elif keyword.name == "Set Local Variable":
|
401
|
+
var_type = LocalVariableDefinition
|
402
|
+
else:
|
403
|
+
return
|
404
|
+
try:
|
405
|
+
variable = node.get_token(Token.ARGUMENT)
|
406
|
+
if variable is None:
|
407
|
+
return
|
408
|
+
|
409
|
+
position = range_from_node(node).start
|
410
|
+
position.character = 0
|
411
|
+
var_name = self._get_var_name(variable.value, position)
|
412
|
+
|
413
|
+
if var_name is None or not is_variable(var_name):
|
414
|
+
return
|
415
|
+
|
416
|
+
var = var_type(
|
417
|
+
name=var_name,
|
418
|
+
name_token=strip_variable_token(variable),
|
419
|
+
line_no=variable.lineno,
|
420
|
+
col_offset=variable.col_offset,
|
421
|
+
end_line_no=variable.lineno,
|
422
|
+
end_col_offset=variable.end_col_offset,
|
423
|
+
source=self.namespace.source,
|
424
|
+
)
|
425
|
+
|
426
|
+
if var_name not in self._results or type(self._results[var_name]) != type(var):
|
427
|
+
if isinstance(var, LocalVariableDefinition) or not any(
|
428
|
+
l for l in self.namespace.get_global_variables() if l.matcher == var.matcher
|
429
|
+
):
|
430
|
+
self._results[var_name] = var
|
431
|
+
else:
|
432
|
+
self._results.pop(var_name, None)
|
433
|
+
|
434
|
+
except VariableError:
|
435
|
+
pass
|
436
|
+
|
350
437
|
def visit_InlineIfHeader(self, node: Statement) -> None: # noqa: N802
|
351
438
|
for assign_token in node.get_tokens(Token.ASSIGN):
|
352
439
|
variable_token = self.get_variable_token(assign_token)
|
@@ -368,7 +455,7 @@ class BlockVariableVisitor(Visitor):
|
|
368
455
|
col_offset=variable_token.col_offset,
|
369
456
|
end_line_no=variable_token.lineno,
|
370
457
|
end_col_offset=variable_token.end_col_offset,
|
371
|
-
source=self.source,
|
458
|
+
source=self.namespace.source,
|
372
459
|
)
|
373
460
|
|
374
461
|
except VariableError:
|
@@ -386,7 +473,7 @@ class BlockVariableVisitor(Visitor):
|
|
386
473
|
col_offset=variable_token.col_offset,
|
387
474
|
end_line_no=variable_token.lineno,
|
388
475
|
end_col_offset=variable_token.end_col_offset,
|
389
|
-
source=self.source,
|
476
|
+
source=self.namespace.source,
|
390
477
|
)
|
391
478
|
|
392
479
|
def visit_Var(self, node: Statement) -> None: # noqa: N802
|
@@ -421,14 +508,12 @@ class BlockVariableVisitor(Visitor):
|
|
421
508
|
col_offset=variable.col_offset,
|
422
509
|
end_line_no=variable.lineno,
|
423
510
|
end_col_offset=variable.end_col_offset,
|
424
|
-
source=self.source,
|
511
|
+
source=self.namespace.source,
|
425
512
|
)
|
426
513
|
|
427
|
-
self._var_statements_vars.append(var)
|
428
|
-
|
429
514
|
if var_name not in self._results or type(self._results[var_name]) != type(var):
|
430
515
|
if isinstance(var, LocalVariableDefinition) or not any(
|
431
|
-
l for l in self.
|
516
|
+
l for l in self.namespace.get_global_variables() if l.matcher == var.matcher
|
432
517
|
):
|
433
518
|
self._results[var_name] = var
|
434
519
|
else:
|
@@ -924,9 +1009,8 @@ class Namespace:
|
|
924
1009
|
(
|
925
1010
|
(
|
926
1011
|
BlockVariableVisitor(
|
927
|
-
self
|
928
|
-
|
929
|
-
self.source,
|
1012
|
+
self,
|
1013
|
+
nodes,
|
930
1014
|
position,
|
931
1015
|
isinstance(test_or_keyword_nodes[-1], Arguments) if nodes else False,
|
932
1016
|
).get(test_or_keyword)
|
@@ -1039,6 +1123,7 @@ class Namespace:
|
|
1039
1123
|
top_level: bool = False,
|
1040
1124
|
source: Optional[str] = None,
|
1041
1125
|
parent_import: Optional[Import] = None,
|
1126
|
+
parent_source: Optional[str] = None,
|
1042
1127
|
) -> Optional[LibraryEntry]:
|
1043
1128
|
result: Optional[LibraryEntry] = None
|
1044
1129
|
try:
|
@@ -1220,6 +1305,26 @@ class Namespace:
|
|
1220
1305
|
source=DIAGNOSTICS_SOURCE_NAME,
|
1221
1306
|
code=type(e).__qualname__,
|
1222
1307
|
)
|
1308
|
+
elif parent_import is not None:
|
1309
|
+
self.append_diagnostics(
|
1310
|
+
range=parent_import.range,
|
1311
|
+
message="Import definition contains errors.",
|
1312
|
+
severity=DiagnosticSeverity.ERROR,
|
1313
|
+
source=DIAGNOSTICS_SOURCE_NAME,
|
1314
|
+
code=Error.IMPORT_CONTAINS_ERRORS,
|
1315
|
+
related_information=(
|
1316
|
+
(
|
1317
|
+
[
|
1318
|
+
DiagnosticRelatedInformation(
|
1319
|
+
location=Location(str(Uri.from_path(parent_source)), value.range),
|
1320
|
+
message=str(e),
|
1321
|
+
),
|
1322
|
+
]
|
1323
|
+
)
|
1324
|
+
if parent_source
|
1325
|
+
else None
|
1326
|
+
),
|
1327
|
+
)
|
1223
1328
|
finally:
|
1224
1329
|
self._reset_global_variables()
|
1225
1330
|
|
@@ -1234,6 +1339,7 @@ class Namespace:
|
|
1234
1339
|
variables: Optional[Dict[str, Any]] = None,
|
1235
1340
|
source: Optional[str] = None,
|
1236
1341
|
parent_import: Optional[Import] = None,
|
1342
|
+
parent_source: Optional[str] = None,
|
1237
1343
|
depth: int = 0,
|
1238
1344
|
) -> Optional[Dict[str, Any]]:
|
1239
1345
|
|
@@ -1251,6 +1357,7 @@ class Namespace:
|
|
1251
1357
|
top_level=top_level,
|
1252
1358
|
source=source,
|
1253
1359
|
parent_import=parent_import,
|
1360
|
+
parent_source=parent_source if parent_source else source,
|
1254
1361
|
)
|
1255
1362
|
|
1256
1363
|
if entry is not None:
|
@@ -1274,6 +1381,7 @@ class Namespace:
|
|
1274
1381
|
variables=variables,
|
1275
1382
|
source=entry.library_doc.source,
|
1276
1383
|
parent_import=imp if top_level else parent_import,
|
1384
|
+
parent_source=parent_source if top_level else source,
|
1277
1385
|
depth=depth + 1,
|
1278
1386
|
)
|
1279
1387
|
except (SystemExit, KeyboardInterrupt):
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: robotcode-robot
|
3
|
-
Version: 0.
|
3
|
+
Version: 0.78.1
|
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://github.com/sponsors/d-biehl
|
@@ -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.
|
29
|
+
Requires-Dist: robotcode-core==0.78.1
|
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
|
@@ -1,18 +1,18 @@
|
|
1
1
|
robotcode/robot/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
2
|
-
robotcode/robot/__version__.py,sha256=
|
2
|
+
robotcode/robot/__version__.py,sha256=HinYe1V3FgUaLri1gy6R6_VuKh3sB-UYTNM51cV6k4I,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=LpGqJAdysvVSZpccW-Il52xn9RMBBb9X94emlBY7zCc,6077
|
6
|
-
robotcode/robot/config/model.py,sha256=
|
6
|
+
robotcode/robot/config/model.py,sha256=LReuQ0Z8zYEYW9XLjnyR2hSUn8upbWzbh8VTTBIRQig,88642
|
7
7
|
robotcode/robot/config/utils.py,sha256=c_WZg39DJgM6kXcAH_h-v68qhf1eStJ0TslTawaJoZw,2827
|
8
8
|
robotcode/robot/diagnostics/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
9
9
|
robotcode/robot/diagnostics/document_cache_helper.py,sha256=XLOqPl88Rbo_01pt8Zx2jMH38m5kvoOnASNDoe8BK_0,22292
|
10
|
-
robotcode/robot/diagnostics/entities.py,sha256=
|
10
|
+
robotcode/robot/diagnostics/entities.py,sha256=CrjhLHHwKCCE3YI_dcjoZADJz1urm0VGbGFdHXOuaoc,11110
|
11
11
|
robotcode/robot/diagnostics/errors.py,sha256=VavgWYuHoW5sTT16j2rl9hxMhWxBKNSFsNmHWPzARQQ,1413
|
12
12
|
robotcode/robot/diagnostics/imports_manager.py,sha256=eMt3Quac1hV5zq6CO45afhUOiL4usww3YTNSyt1bZrE,56185
|
13
13
|
robotcode/robot/diagnostics/library_doc.py,sha256=ZhoJIscHIx0UaLWm56LEoa3oxR0uNZourZsnpvOg-Hs,97035
|
14
14
|
robotcode/robot/diagnostics/model_helper.py,sha256=3-6lZluPQaT9KstHLfV0jsRUAjTfrkUOomSXiMPKoQg,29868
|
15
|
-
robotcode/robot/diagnostics/namespace.py,sha256=
|
15
|
+
robotcode/robot/diagnostics/namespace.py,sha256=yerha8VmX_01h8Ga7MaH4wRVk1waVQ4pJfPu55ohcYU,89792
|
16
16
|
robotcode/robot/diagnostics/namespace_analyzer.py,sha256=tElI2NzcCRnsvPqv7wYaV2p5E22VyqEwQQ90FOOjadI,50086
|
17
17
|
robotcode/robot/diagnostics/workspace_config.py,sha256=lWNq1KmGGJ9cHFNHn0QTCBHHzgz4AewTw0l-W4TKrj0,1803
|
18
18
|
robotcode/robot/utils/__init__.py,sha256=OjNPMn_XSnfaMCyKd8Kmq6vlRt6mIGlzW4qiiD3ykUg,447
|
@@ -23,7 +23,7 @@ robotcode/robot/utils/robot_path.py,sha256=qKBh1cEnReBBLKkWu4gB9EzM-scAwE4xJc1m6
|
|
23
23
|
robotcode/robot/utils/stubs.py,sha256=6-DMI_CQVJHDgG13t-zINKGCRb_Q7MQPm0_AkfhAEvE,748
|
24
24
|
robotcode/robot/utils/variables.py,sha256=fEl8S37lb_mD4hn2MZRAlkiuLGBjAOeZVK0r2o2CfPw,742
|
25
25
|
robotcode/robot/utils/visitor.py,sha256=uYLqEhGPmzWKWI3SSrmCaYMwtKvNShvbiPZ4b3FavX8,3241
|
26
|
-
robotcode_robot-0.
|
27
|
-
robotcode_robot-0.
|
28
|
-
robotcode_robot-0.
|
29
|
-
robotcode_robot-0.
|
26
|
+
robotcode_robot-0.78.1.dist-info/METADATA,sha256=v5pSI5CijBpAZYaOJTl0jdCgjhavFlZDydZi_LkF3JU,2209
|
27
|
+
robotcode_robot-0.78.1.dist-info/WHEEL,sha256=TJPnKdtrSue7xZ_AVGkp9YXcvDrobsjBds1du3Nx6dc,87
|
28
|
+
robotcode_robot-0.78.1.dist-info/licenses/LICENSE.txt,sha256=B05uMshqTA74s-0ltyHKI6yoPfJ3zYgQbvcXfDVGFf8,10280
|
29
|
+
robotcode_robot-0.78.1.dist-info/RECORD,,
|
File without changes
|
File without changes
|