Skip to content

Commit b19eea1

Browse files
committed
fix: Intellisense doesn't work when importing yml file with variables #143
1 parent d60353b commit b19eea1

File tree

3 files changed

+60
-9
lines changed

3 files changed

+60
-9
lines changed

packages/language_server/src/robotcode/language_server/robotframework/diagnostics/imports_manager.py

Lines changed: 55 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -585,11 +585,22 @@ async def get_command_line_variables(self) -> List[VariableDefinition]:
585585
name, args = split_args_from_name_or_path(str(variable_file))
586586
try:
587587
lib_doc = await self.get_libdoc_for_variables_import(
588-
name, tuple(args), str(self.folder.to_path()), self, resolve_command_line_vars=False
588+
name,
589+
tuple(args),
590+
str(self.folder.to_path()),
591+
self,
592+
resolve_variables=False,
593+
resolve_command_line_vars=False,
589594
)
590595
if lib_doc is not None:
591596
command_line_vars += lib_doc.variables
592597

598+
if lib_doc.errors:
599+
# TODO add diagnostics
600+
for error in lib_doc.errors:
601+
self._logger.error(
602+
lambda: f"{error.type_name}: {error.message} in {error.source}:{error.line_no}"
603+
)
593604
except (SystemExit, KeyboardInterrupt, asyncio.CancelledError):
594605
raise
595606
except BaseException as e:
@@ -604,11 +615,23 @@ async def get_command_line_variables(self) -> List[VariableDefinition]:
604615
name, args = split_args_from_name_or_path(variable_file)
605616
try:
606617
lib_doc = await self.get_libdoc_for_variables_import(
607-
name, tuple(args), str(self.folder.to_path()), self, resolve_command_line_vars=False
618+
name,
619+
tuple(args),
620+
str(self.folder.to_path()),
621+
self,
622+
resolve_variables=False,
623+
resolve_command_line_vars=False,
608624
)
609625
if lib_doc is not None:
610626
command_line_vars += lib_doc.variables
611627

628+
if lib_doc.errors:
629+
# TODO add diagnostics
630+
for error in lib_doc.errors:
631+
self._logger.error(
632+
lambda: f"{error.type_name}: {error.message} in {error.source}:{error.line_no}"
633+
)
634+
612635
except (SystemExit, KeyboardInterrupt, asyncio.CancelledError):
613636
raise
614637
except BaseException as e:
@@ -878,12 +901,16 @@ async def get_variables_meta(
878901
name: str,
879902
base_dir: str = ".",
880903
variables: Optional[Dict[str, Optional[Any]]] = None,
904+
resolve_variables: bool = True,
905+
resolve_command_line_vars: bool = True,
881906
) -> Tuple[Optional[LibraryMetaData], str]:
882907
try:
883908
import_name = await self.find_variables(
884909
name,
885910
base_dir=base_dir,
886911
variables=variables,
912+
resolve_variables=resolve_variables,
913+
resolve_command_line_vars=resolve_command_line_vars,
887914
)
888915

889916
result: Optional[LibraryMetaData] = None
@@ -935,7 +962,7 @@ async def get_variables_meta(
935962
except BaseException:
936963
pass
937964

938-
return None, import_name
965+
return None, name
939966

940967
async def find_library(self, name: str, base_dir: str, variables: Optional[Dict[str, Any]] = None) -> str:
941968
return await self._library_files_cache.get(self._find_library, name, base_dir, variables)
@@ -986,19 +1013,35 @@ async def __find_resource(
9861013

9871014
return str(find_file_ex(name, base_dir, file_type))
9881015

989-
async def find_variables(self, name: str, base_dir: str, variables: Optional[Dict[str, Any]] = None) -> str:
990-
return await self._variables_files_cache.get(self.__find_variables, name, base_dir, variables)
1016+
async def find_variables(
1017+
self,
1018+
name: str,
1019+
base_dir: str,
1020+
variables: Optional[Dict[str, Any]] = None,
1021+
resolve_variables: bool = True,
1022+
resolve_command_line_vars: bool = True,
1023+
) -> str:
1024+
return await self._variables_files_cache.get(
1025+
self.__find_variables, name, base_dir, variables, resolve_command_line_vars
1026+
)
9911027

9921028
@_logger.call
993-
async def __find_variables(self, name: str, base_dir: str, variables: Optional[Dict[str, Any]] = None) -> str:
1029+
async def __find_variables(
1030+
self,
1031+
name: str,
1032+
base_dir: str,
1033+
variables: Optional[Dict[str, Any]] = None,
1034+
resolve_variables: bool = True,
1035+
resolve_command_line_vars: bool = True,
1036+
) -> str:
9941037
from robot.variables.search import contains_variable
9951038

996-
if contains_variable(name, "$@&%"):
1039+
if resolve_variables and contains_variable(name, "$@&%"):
9971040
return find_variables(
9981041
name,
9991042
str(self.folder.to_path()),
10001043
base_dir,
1001-
await self.get_resolvable_command_line_variables(),
1044+
await self.get_resolvable_command_line_variables() if resolve_command_line_vars else None,
10021045
variables,
10031046
)
10041047

@@ -1258,19 +1301,23 @@ async def get_libdoc_for_variables_import(
12581301
base_dir: str,
12591302
sentinel: Any = None,
12601303
variables: Optional[Dict[str, Any]] = None,
1304+
resolve_variables: bool = True,
12611305
resolve_command_line_vars: bool = True,
12621306
) -> VariablesDoc:
12631307
source = await self.find_variables(
12641308
name,
12651309
base_dir,
12661310
variables,
1311+
resolve_variables=resolve_variables,
1312+
resolve_command_line_vars=resolve_command_line_vars,
12671313
)
12681314

12691315
async def _get_libdoc(name: str, args: Tuple[Any, ...], working_dir: str, base_dir: str) -> VariablesDoc:
12701316
meta, source = await self.get_variables_meta(
12711317
name,
12721318
base_dir,
12731319
variables,
1320+
resolve_command_line_vars=resolve_command_line_vars,
12741321
)
12751322

12761323
self._logger.debug(lambda: f"Load variables {source}{args!r}")

packages/language_server/src/robotcode/language_server/robotframework/diagnostics/library_doc.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1546,7 +1546,8 @@ def get_variables_doc(
15461546
if import_name.lower().endswith((".yaml", ".yml")):
15471547
source = import_name
15481548
importer = YamlImporter()
1549-
if get_robot_version() >= (6, 1) and import_name.lower().endswith(".json"):
1549+
elif get_robot_version() >= (6, 1) and import_name.lower().endswith(".json"):
1550+
source = import_name
15501551
importer = JsonImporter()
15511552
else:
15521553
if not is_variables_by_path(import_name):

tests/robotcode/language_server/robotframework/parts/data/.vscode/settings.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,4 +46,7 @@
4646
// "TRACE",
4747
// "--log-calls"
4848
// ],
49+
"robotcode.robot.variableFiles": [
50+
"${EXECDIR}/resources/testvars.yml"
51+
]
4952
}

0 commit comments

Comments
 (0)