Skip to content

Commit 9596540

Browse files
committed
feat(robotlangserver): Highlight dictionary keys and values with different colors
close #95
1 parent 0995a2e commit 9596540

File tree

1 file changed

+19
-2
lines changed

1 file changed

+19
-2
lines changed

robotcode/language_server/robotframework/parts/semantic_tokens.py

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -325,8 +325,8 @@ async def generate_sem_sub_tokens(
325325
for g in cls.ESCAPE_REGEX.finditer(token.value):
326326
yield SemTokenInfo.from_token(
327327
token,
328-
sem_info[0] if g.group("x") is None or g.end() - g.start() == 1 else RobotSemTokenTypes.ESCAPE,
329-
sem_info[1],
328+
sem_type if g.group("x") is None or g.end() - g.start() == 1 else RobotSemTokenTypes.ESCAPE,
329+
sem_mod,
330330
col_offset + g.start(),
331331
g.end() - g.start(),
332332
)
@@ -491,9 +491,26 @@ async def generate_sem_tokens(
491491
resources_matchers: Dict[KeywordMatcher, ResourceEntry],
492492
) -> AsyncGenerator[SemTokenInfo, None]:
493493
from robot.parsing.lexer.tokens import Token as RobotToken
494+
from robot.parsing.model.statements import Variable
495+
from robot.utils.escaping import split_from_equals
494496

495497
if token.type in {RobotToken.ARGUMENT, RobotToken.TESTCASE_NAME, RobotToken.KEYWORD_NAME}:
496498

499+
if isinstance(node, Variable) and token.type == RobotToken.ARGUMENT and node.name and node.name[0] == "&":
500+
name, value = split_from_equals(token.value)
501+
if value is not None:
502+
length = len(name)
503+
504+
yield SemTokenInfo.from_token(
505+
RobotToken(ROBOT_NAMED_ARGUMENT, name, token.lineno, token.col_offset),
506+
RobotSemTokenTypes.NAMED_ARGUMENT,
507+
)
508+
yield SemTokenInfo.from_token(
509+
RobotToken(ROBOT_OPERATOR, "=", token.lineno, token.col_offset + length),
510+
SemanticTokenTypes.OPERATOR,
511+
)
512+
token = RobotToken(token.type, value, token.lineno, token.col_offset + length + 1, token.error)
513+
497514
for sub_token in self._tokenize_variables(
498515
token,
499516
ignore_errors=True,

0 commit comments

Comments
 (0)