Skip to content

Commit c662685

Browse files
committed
perf(language_server): corrected handling of matching multiple keywords if keywords have embedded keywords
1 parent 47510ac commit c662685

13 files changed

+270
-24
lines changed

packages/robot/src/robotcode/robot/diagnostics/library_doc.py

Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -913,19 +913,13 @@ class KeywordStore:
913913
source_type: Optional[str] = None
914914
keywords: List[KeywordDoc] = field(default_factory=list)
915915

916-
@property
917-
def _matchers(self) -> Dict[KeywordMatcher, KeywordDoc]:
918-
if not hasattr(self, "__matchers"):
919-
self.__matchers = {v.matcher: v for v in self.keywords}
920-
return self.__matchers
921-
922916
def __getitem__(self, key: str) -> KeywordDoc:
923-
items = [(k, v) for k, v in self._matchers.items() if k == key]
917+
items = [v for v in self.keywords if v.matcher == key]
924918

925919
if not items:
926920
raise KeyError
927921
if len(items) == 1:
928-
return items[0][1]
922+
return items[0]
929923

930924
if self.source and self.source_type:
931925
file_info = ""
@@ -940,14 +934,14 @@ def __getitem__(self, key: str) -> KeywordDoc:
940934
else:
941935
file_info = "File"
942936
error = [f"{file_info} contains multiple keywords matching name '{key}':"]
943-
names = sorted(k.name for k, v in items)
937+
names = sorted(v.name for v in items)
944938
raise KeywordError(
945939
"\n ".join(error + names),
946-
multiple_keywords=[v for _, v in items],
940+
multiple_keywords=[v for v in items],
947941
)
948942

949943
def __contains__(self, _x: object) -> bool:
950-
return any(k == _x for k in self._matchers.keys())
944+
return any(v.matcher == _x for v in self.keywords)
951945

952946
def __len__(self) -> int:
953947
return len(self.keywords)
@@ -977,7 +971,7 @@ def get_all(self, key: str) -> List[KeywordDoc]:
977971
return list(self.iter_all(key))
978972

979973
def iter_all(self, key: str) -> Iterable[KeywordDoc]:
980-
yield from (v for k, v in self._matchers.items() if k == key)
974+
yield from (v for v in self.keywords if v.matcher == key)
981975

982976

983977
@dataclass

tests/robotcode/language_server/robotframework/parts/_regtest_outputs/rf41/test_references.test[references.robot-132-001-Embedded_keyword].out

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,13 @@ data: !GeneratedTestData
22
character: 1
33
line: 132
44
name: Embedded keyword
5-
result: null
5+
result:
6+
- !Location
7+
range:
8+
end:
9+
character: 33
10+
line: 132
11+
start:
12+
character: 0
13+
line: 132
14+
uri: tests/references.robot

tests/robotcode/language_server/robotframework/parts/_regtest_outputs/rf41/test_references.test[references.robot-132-002-Embedded_keyword].out

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,13 @@ data: !GeneratedTestData
22
character: 2
33
line: 132
44
name: Embedded keyword
5-
result: null
5+
result:
6+
- !Location
7+
range:
8+
end:
9+
character: 33
10+
line: 132
11+
start:
12+
character: 0
13+
line: 132
14+
uri: tests/references.robot

tests/robotcode/language_server/robotframework/parts/_regtest_outputs/rf50/test_references.test[references.robot-132-001-Embedded_keyword].out

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,13 @@ data: !GeneratedTestData
22
character: 1
33
line: 132
44
name: Embedded keyword
5-
result: null
5+
result:
6+
- !Location
7+
range:
8+
end:
9+
character: 33
10+
line: 132
11+
start:
12+
character: 0
13+
line: 132
14+
uri: tests/references.robot

tests/robotcode/language_server/robotframework/parts/_regtest_outputs/rf50/test_references.test[references.robot-132-002-Embedded_keyword].out

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,13 @@ data: !GeneratedTestData
22
character: 2
33
line: 132
44
name: Embedded keyword
5-
result: null
5+
result:
6+
- !Location
7+
range:
8+
end:
9+
character: 33
10+
line: 132
11+
start:
12+
character: 0
13+
line: 132
14+
uri: tests/references.robot

tests/robotcode/language_server/robotframework/parts/_regtest_outputs/rf60/test_references.test[references.robot-132-001-Embedded_keyword].out

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,31 @@ data: !GeneratedTestData
22
character: 1
33
line: 132
44
name: Embedded keyword
5-
result: null
5+
result:
6+
- !Location
7+
range:
8+
end:
9+
character: 25
10+
line: 91
11+
start:
12+
character: 4
13+
line: 91
14+
uri: tests/references.robot
15+
- !Location
16+
range:
17+
end:
18+
character: 25
19+
line: 93
20+
start:
21+
character: 4
22+
line: 93
23+
uri: tests/references.robot
24+
- !Location
25+
range:
26+
end:
27+
character: 33
28+
line: 132
29+
start:
30+
character: 0
31+
line: 132
32+
uri: tests/references.robot

tests/robotcode/language_server/robotframework/parts/_regtest_outputs/rf60/test_references.test[references.robot-132-002-Embedded_keyword].out

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,31 @@ data: !GeneratedTestData
22
character: 2
33
line: 132
44
name: Embedded keyword
5-
result: null
5+
result:
6+
- !Location
7+
range:
8+
end:
9+
character: 25
10+
line: 91
11+
start:
12+
character: 4
13+
line: 91
14+
uri: tests/references.robot
15+
- !Location
16+
range:
17+
end:
18+
character: 25
19+
line: 93
20+
start:
21+
character: 4
22+
line: 93
23+
uri: tests/references.robot
24+
- !Location
25+
range:
26+
end:
27+
character: 33
28+
line: 132
29+
start:
30+
character: 0
31+
line: 132
32+
uri: tests/references.robot

tests/robotcode/language_server/robotframework/parts/_regtest_outputs/rf61/test_references.test[references.robot-132-001-Embedded_keyword].out

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,31 @@ data: !GeneratedTestData
22
character: 1
33
line: 132
44
name: Embedded keyword
5-
result: null
5+
result:
6+
- !Location
7+
range:
8+
end:
9+
character: 25
10+
line: 91
11+
start:
12+
character: 4
13+
line: 91
14+
uri: tests/references.robot
15+
- !Location
16+
range:
17+
end:
18+
character: 25
19+
line: 93
20+
start:
21+
character: 4
22+
line: 93
23+
uri: tests/references.robot
24+
- !Location
25+
range:
26+
end:
27+
character: 33
28+
line: 132
29+
start:
30+
character: 0
31+
line: 132
32+
uri: tests/references.robot

tests/robotcode/language_server/robotframework/parts/_regtest_outputs/rf61/test_references.test[references.robot-132-002-Embedded_keyword].out

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,31 @@ data: !GeneratedTestData
22
character: 2
33
line: 132
44
name: Embedded keyword
5-
result: null
5+
result:
6+
- !Location
7+
range:
8+
end:
9+
character: 25
10+
line: 91
11+
start:
12+
character: 4
13+
line: 91
14+
uri: tests/references.robot
15+
- !Location
16+
range:
17+
end:
18+
character: 25
19+
line: 93
20+
start:
21+
character: 4
22+
line: 93
23+
uri: tests/references.robot
24+
- !Location
25+
range:
26+
end:
27+
character: 33
28+
line: 132
29+
start:
30+
character: 0
31+
line: 132
32+
uri: tests/references.robot

tests/robotcode/language_server/robotframework/parts/_regtest_outputs/rf70/test_references.test[references.robot-132-001-Embedded_keyword].out

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,31 @@ data: !GeneratedTestData
22
character: 1
33
line: 132
44
name: Embedded keyword
5-
result: null
5+
result:
6+
- !Location
7+
range:
8+
end:
9+
character: 25
10+
line: 91
11+
start:
12+
character: 4
13+
line: 91
14+
uri: tests/references.robot
15+
- !Location
16+
range:
17+
end:
18+
character: 25
19+
line: 93
20+
start:
21+
character: 4
22+
line: 93
23+
uri: tests/references.robot
24+
- !Location
25+
range:
26+
end:
27+
character: 33
28+
line: 132
29+
start:
30+
character: 0
31+
line: 132
32+
uri: tests/references.robot

tests/robotcode/language_server/robotframework/parts/_regtest_outputs/rf70/test_references.test[references.robot-132-002-Embedded_keyword].out

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,31 @@ data: !GeneratedTestData
22
character: 2
33
line: 132
44
name: Embedded keyword
5-
result: null
5+
result:
6+
- !Location
7+
range:
8+
end:
9+
character: 25
10+
line: 91
11+
start:
12+
character: 4
13+
line: 91
14+
uri: tests/references.robot
15+
- !Location
16+
range:
17+
end:
18+
character: 25
19+
line: 93
20+
start:
21+
character: 4
22+
line: 93
23+
uri: tests/references.robot
24+
- !Location
25+
range:
26+
end:
27+
character: 33
28+
line: 132
29+
start:
30+
character: 0
31+
line: 132
32+
uri: tests/references.robot

tests/robotcode/language_server/robotframework/parts/_regtest_outputs/rf71/test_references.test[references.robot-132-001-Embedded_keyword].out

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,31 @@ data: !GeneratedTestData
22
character: 1
33
line: 132
44
name: Embedded keyword
5-
result: null
5+
result:
6+
- !Location
7+
range:
8+
end:
9+
character: 25
10+
line: 91
11+
start:
12+
character: 4
13+
line: 91
14+
uri: tests/references.robot
15+
- !Location
16+
range:
17+
end:
18+
character: 25
19+
line: 93
20+
start:
21+
character: 4
22+
line: 93
23+
uri: tests/references.robot
24+
- !Location
25+
range:
26+
end:
27+
character: 33
28+
line: 132
29+
start:
30+
character: 0
31+
line: 132
32+
uri: tests/references.robot

tests/robotcode/language_server/robotframework/parts/_regtest_outputs/rf71/test_references.test[references.robot-132-002-Embedded_keyword].out

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,31 @@ data: !GeneratedTestData
22
character: 2
33
line: 132
44
name: Embedded keyword
5-
result: null
5+
result:
6+
- !Location
7+
range:
8+
end:
9+
character: 25
10+
line: 91
11+
start:
12+
character: 4
13+
line: 91
14+
uri: tests/references.robot
15+
- !Location
16+
range:
17+
end:
18+
character: 25
19+
line: 93
20+
start:
21+
character: 4
22+
line: 93
23+
uri: tests/references.robot
24+
- !Location
25+
range:
26+
end:
27+
character: 33
28+
line: 132
29+
start:
30+
character: 0
31+
line: 132
32+
uri: tests/references.robot

0 commit comments

Comments
 (0)