Skip to content

Commit 603452b

Browse files
committed
Analyse environment variables
1 parent 7e5b474 commit 603452b

File tree

3 files changed

+23
-2
lines changed

3 files changed

+23
-2
lines changed

robotcode/language_server/robotframework/diagnostics/analyzer.py

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import ast
44
import asyncio
55
import itertools
6+
import os
67
import re
78
from collections import defaultdict
89
from dataclasses import dataclass
@@ -35,7 +36,11 @@
3536
)
3637
from ..utils.async_ast import AsyncVisitor
3738
from ..utils.version import get_robot_version
38-
from .entities import VariableDefinition, VariableNotFoundDefinition
39+
from .entities import (
40+
EnvironmentVariableDefinition,
41+
VariableDefinition,
42+
VariableNotFoundDefinition,
43+
)
3944
from .library_doc import KeywordDoc, is_embedded_keyword
4045
from .namespace import DIAGNOSTICS_SOURCE_NAME, KeywordFinder, Namespace
4146

@@ -194,6 +199,17 @@ async def visit(self, node: ast.AST) -> None:
194199
code="VariableNotFound",
195200
)
196201
else:
202+
if isinstance(var, EnvironmentVariableDefinition) and var.default_value is None:
203+
env_name = var.name[2:-1]
204+
if os.environ.get(env_name, None) is None:
205+
await self.append_diagnostics(
206+
range=range_from_token(var_token),
207+
message=f"Environment variable '{var.name}' not found.",
208+
severity=severity,
209+
source=DIAGNOSTICS_SOURCE_NAME,
210+
code="EnvirommentVariableNotFound",
211+
)
212+
197213
if self.namespace.document is not None:
198214
var_range = range_from_token(var_token)
199215
if var.name_range != var_range:

robotcode/language_server/robotframework/diagnostics/entities.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -264,6 +264,8 @@ class EnvironmentVariableDefinition(VariableDefinition):
264264
type: VariableDefinitionType = VariableDefinitionType.ENVIRONMENT_VARIABLE
265265
resolvable: bool = True
266266

267+
default_value: Any = field(default=None, compare=False)
268+
267269
@single_call
268270
def __hash__(self) -> int:
269271
return hash((type(self), self.name, self.type))

robotcode/language_server/robotframework/diagnostics/namespace.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -976,7 +976,10 @@ async def find_variable(
976976
await self.ensure_initialized()
977977

978978
if name[:2] == "%{" and name[-1] == "}":
979-
return EnvironmentVariableDefinition(0, 0, 0, 0, "", name, None)
979+
var_name, _, default_value = name[2:-1].partition("=")
980+
return EnvironmentVariableDefinition(
981+
0, 0, 0, 0, "", f"%{{{var_name}}}", None, default_value=default_value or None
982+
)
980983

981984
try:
982985
matcher = VariableMatcher(name)

0 commit comments

Comments
 (0)