robotcode-language-server 0.106.0__tar.gz → 0.107.0__tar.gz

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.
Files changed (76) hide show
  1. {robotcode_language_server-0.106.0 → robotcode_language_server-0.107.0}/PKG-INFO +5 -5
  2. {robotcode_language_server-0.106.0 → robotcode_language_server-0.107.0}/pyproject.toml +4 -4
  3. robotcode_language_server-0.107.0/src/robotcode/language_server/__version__.py +1 -0
  4. robotcode_language_server-0.107.0/src/robotcode/language_server/common/parts/workspace_symbols.py +132 -0
  5. {robotcode_language_server-0.106.0 → robotcode_language_server-0.107.0}/src/robotcode/language_server/common/protocol.py +2 -0
  6. {robotcode_language_server-0.106.0 → robotcode_language_server-0.107.0}/src/robotcode/language_server/robotframework/parts/code_action_documentation.py +3 -11
  7. {robotcode_language_server-0.106.0 → robotcode_language_server-0.107.0}/src/robotcode/language_server/robotframework/parts/document_symbols.py +1 -1
  8. {robotcode_language_server-0.106.0 → robotcode_language_server-0.107.0}/src/robotcode/language_server/robotframework/parts/semantic_tokens.py +3 -1
  9. robotcode_language_server-0.107.0/src/robotcode/language_server/robotframework/parts/workspace_symbols.py +88 -0
  10. {robotcode_language_server-0.106.0 → robotcode_language_server-0.107.0}/src/robotcode/language_server/robotframework/protocol.py +2 -0
  11. robotcode_language_server-0.106.0/src/robotcode/language_server/__version__.py +0 -1
  12. {robotcode_language_server-0.106.0 → robotcode_language_server-0.107.0}/.gitignore +0 -0
  13. {robotcode_language_server-0.106.0 → robotcode_language_server-0.107.0}/LICENSE.txt +0 -0
  14. {robotcode_language_server-0.106.0 → robotcode_language_server-0.107.0}/README.md +0 -0
  15. {robotcode_language_server-0.106.0 → robotcode_language_server-0.107.0}/src/robotcode/language_server/__init__.py +0 -0
  16. {robotcode_language_server-0.106.0 → robotcode_language_server-0.107.0}/src/robotcode/language_server/cli.py +0 -0
  17. {robotcode_language_server-0.106.0 → robotcode_language_server-0.107.0}/src/robotcode/language_server/common/__init__.py +0 -0
  18. {robotcode_language_server-0.106.0 → robotcode_language_server-0.107.0}/src/robotcode/language_server/common/decorators.py +0 -0
  19. {robotcode_language_server-0.106.0 → robotcode_language_server-0.107.0}/src/robotcode/language_server/common/parts/__init__.py +0 -0
  20. {robotcode_language_server-0.106.0 → robotcode_language_server-0.107.0}/src/robotcode/language_server/common/parts/code_action.py +0 -0
  21. {robotcode_language_server-0.106.0 → robotcode_language_server-0.107.0}/src/robotcode/language_server/common/parts/code_lens.py +0 -0
  22. {robotcode_language_server-0.106.0 → robotcode_language_server-0.107.0}/src/robotcode/language_server/common/parts/commands.py +0 -0
  23. {robotcode_language_server-0.106.0 → robotcode_language_server-0.107.0}/src/robotcode/language_server/common/parts/completion.py +0 -0
  24. {robotcode_language_server-0.106.0 → robotcode_language_server-0.107.0}/src/robotcode/language_server/common/parts/declaration.py +0 -0
  25. {robotcode_language_server-0.106.0 → robotcode_language_server-0.107.0}/src/robotcode/language_server/common/parts/definition.py +0 -0
  26. {robotcode_language_server-0.106.0 → robotcode_language_server-0.107.0}/src/robotcode/language_server/common/parts/diagnostics.py +0 -0
  27. {robotcode_language_server-0.106.0 → robotcode_language_server-0.107.0}/src/robotcode/language_server/common/parts/document_highlight.py +0 -0
  28. {robotcode_language_server-0.106.0 → robotcode_language_server-0.107.0}/src/robotcode/language_server/common/parts/document_symbols.py +0 -0
  29. {robotcode_language_server-0.106.0 → robotcode_language_server-0.107.0}/src/robotcode/language_server/common/parts/documents.py +0 -0
  30. {robotcode_language_server-0.106.0 → robotcode_language_server-0.107.0}/src/robotcode/language_server/common/parts/folding_range.py +0 -0
  31. {robotcode_language_server-0.106.0 → robotcode_language_server-0.107.0}/src/robotcode/language_server/common/parts/formatting.py +0 -0
  32. {robotcode_language_server-0.106.0 → robotcode_language_server-0.107.0}/src/robotcode/language_server/common/parts/hover.py +0 -0
  33. {robotcode_language_server-0.106.0 → robotcode_language_server-0.107.0}/src/robotcode/language_server/common/parts/implementation.py +0 -0
  34. {robotcode_language_server-0.106.0 → robotcode_language_server-0.107.0}/src/robotcode/language_server/common/parts/inlay_hint.py +0 -0
  35. {robotcode_language_server-0.106.0 → robotcode_language_server-0.107.0}/src/robotcode/language_server/common/parts/inline_value.py +0 -0
  36. {robotcode_language_server-0.106.0 → robotcode_language_server-0.107.0}/src/robotcode/language_server/common/parts/linked_editing_ranges.py +0 -0
  37. {robotcode_language_server-0.106.0 → robotcode_language_server-0.107.0}/src/robotcode/language_server/common/parts/protocol_part.py +0 -0
  38. {robotcode_language_server-0.106.0 → robotcode_language_server-0.107.0}/src/robotcode/language_server/common/parts/references.py +0 -0
  39. {robotcode_language_server-0.106.0 → robotcode_language_server-0.107.0}/src/robotcode/language_server/common/parts/rename.py +0 -0
  40. {robotcode_language_server-0.106.0 → robotcode_language_server-0.107.0}/src/robotcode/language_server/common/parts/selection_range.py +0 -0
  41. {robotcode_language_server-0.106.0 → robotcode_language_server-0.107.0}/src/robotcode/language_server/common/parts/semantic_tokens.py +0 -0
  42. {robotcode_language_server-0.106.0 → robotcode_language_server-0.107.0}/src/robotcode/language_server/common/parts/signature_help.py +0 -0
  43. {robotcode_language_server-0.106.0 → robotcode_language_server-0.107.0}/src/robotcode/language_server/common/parts/window.py +0 -0
  44. {robotcode_language_server-0.106.0 → robotcode_language_server-0.107.0}/src/robotcode/language_server/common/parts/workspace.py +0 -0
  45. {robotcode_language_server-0.106.0 → robotcode_language_server-0.107.0}/src/robotcode/language_server/common/server.py +0 -0
  46. {robotcode_language_server-0.106.0 → robotcode_language_server-0.107.0}/src/robotcode/language_server/hooks.py +0 -0
  47. {robotcode_language_server-0.106.0 → robotcode_language_server-0.107.0}/src/robotcode/language_server/py.typed +0 -0
  48. {robotcode_language_server-0.106.0 → robotcode_language_server-0.107.0}/src/robotcode/language_server/robotframework/__init__.py +0 -0
  49. {robotcode_language_server-0.106.0 → robotcode_language_server-0.107.0}/src/robotcode/language_server/robotframework/configuration.py +0 -0
  50. {robotcode_language_server-0.106.0 → robotcode_language_server-0.107.0}/src/robotcode/language_server/robotframework/parts/__init__.py +0 -0
  51. {robotcode_language_server-0.106.0 → robotcode_language_server-0.107.0}/src/robotcode/language_server/robotframework/parts/code_action_helper_mixin.py +0 -0
  52. {robotcode_language_server-0.106.0 → robotcode_language_server-0.107.0}/src/robotcode/language_server/robotframework/parts/code_action_quick_fixes.py +0 -0
  53. {robotcode_language_server-0.106.0 → robotcode_language_server-0.107.0}/src/robotcode/language_server/robotframework/parts/code_action_refactor.py +0 -0
  54. {robotcode_language_server-0.106.0 → robotcode_language_server-0.107.0}/src/robotcode/language_server/robotframework/parts/code_lens.py +0 -0
  55. {robotcode_language_server-0.106.0 → robotcode_language_server-0.107.0}/src/robotcode/language_server/robotframework/parts/completion.py +0 -0
  56. {robotcode_language_server-0.106.0 → robotcode_language_server-0.107.0}/src/robotcode/language_server/robotframework/parts/debugging_utils.py +0 -0
  57. {robotcode_language_server-0.106.0 → robotcode_language_server-0.107.0}/src/robotcode/language_server/robotframework/parts/diagnostics.py +0 -0
  58. {robotcode_language_server-0.106.0 → robotcode_language_server-0.107.0}/src/robotcode/language_server/robotframework/parts/document_highlight.py +0 -0
  59. {robotcode_language_server-0.106.0 → robotcode_language_server-0.107.0}/src/robotcode/language_server/robotframework/parts/documents_cache.py +0 -0
  60. {robotcode_language_server-0.106.0 → robotcode_language_server-0.107.0}/src/robotcode/language_server/robotframework/parts/folding_range.py +0 -0
  61. {robotcode_language_server-0.106.0 → robotcode_language_server-0.107.0}/src/robotcode/language_server/robotframework/parts/formatting.py +0 -0
  62. {robotcode_language_server-0.106.0 → robotcode_language_server-0.107.0}/src/robotcode/language_server/robotframework/parts/goto.py +0 -0
  63. {robotcode_language_server-0.106.0 → robotcode_language_server-0.107.0}/src/robotcode/language_server/robotframework/parts/hover.py +0 -0
  64. {robotcode_language_server-0.106.0 → robotcode_language_server-0.107.0}/src/robotcode/language_server/robotframework/parts/http_server.py +0 -0
  65. {robotcode_language_server-0.106.0 → robotcode_language_server-0.107.0}/src/robotcode/language_server/robotframework/parts/inlay_hint.py +0 -0
  66. {robotcode_language_server-0.106.0 → robotcode_language_server-0.107.0}/src/robotcode/language_server/robotframework/parts/inline_value.py +0 -0
  67. {robotcode_language_server-0.106.0 → robotcode_language_server-0.107.0}/src/robotcode/language_server/robotframework/parts/keywords_treeview.py +0 -0
  68. {robotcode_language_server-0.106.0 → robotcode_language_server-0.107.0}/src/robotcode/language_server/robotframework/parts/project_info.py +0 -0
  69. {robotcode_language_server-0.106.0 → robotcode_language_server-0.107.0}/src/robotcode/language_server/robotframework/parts/protocol_part.py +0 -0
  70. {robotcode_language_server-0.106.0 → robotcode_language_server-0.107.0}/src/robotcode/language_server/robotframework/parts/references.py +0 -0
  71. {robotcode_language_server-0.106.0 → robotcode_language_server-0.107.0}/src/robotcode/language_server/robotframework/parts/rename.py +0 -0
  72. {robotcode_language_server-0.106.0 → robotcode_language_server-0.107.0}/src/robotcode/language_server/robotframework/parts/robocop_diagnostics.py +0 -0
  73. {robotcode_language_server-0.106.0 → robotcode_language_server-0.107.0}/src/robotcode/language_server/robotframework/parts/robot_workspace.py +0 -0
  74. {robotcode_language_server-0.106.0 → robotcode_language_server-0.107.0}/src/robotcode/language_server/robotframework/parts/selection_range.py +0 -0
  75. {robotcode_language_server-0.106.0 → robotcode_language_server-0.107.0}/src/robotcode/language_server/robotframework/parts/signature_help.py +0 -0
  76. {robotcode_language_server-0.106.0 → robotcode_language_server-0.107.0}/src/robotcode/language_server/robotframework/server.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: robotcode-language-server
3
- Version: 0.106.0
3
+ Version: 0.107.0
4
4
  Summary: RobotCode Language Server for Robot Framework
5
5
  Project-URL: Homepage, https://robotcode.io
6
6
  Project-URL: Donate, https://opencollective.com/robotcode
@@ -25,10 +25,10 @@ Classifier: Programming Language :: Python :: Implementation :: PyPy
25
25
  Classifier: Topic :: Utilities
26
26
  Classifier: Typing :: Typed
27
27
  Requires-Python: >=3.8
28
- Requires-Dist: robotcode-analyze==0.106.0
29
- Requires-Dist: robotcode-jsonrpc2==0.106.0
30
- Requires-Dist: robotcode-robot==0.106.0
31
- Requires-Dist: robotcode==0.106.0
28
+ Requires-Dist: robotcode-analyze==0.107.0
29
+ Requires-Dist: robotcode-jsonrpc2==0.107.0
30
+ Requires-Dist: robotcode-robot==0.107.0
31
+ Requires-Dist: robotcode==0.107.0
32
32
  Requires-Dist: robotframework>=4.1.0
33
33
  Description-Content-Type: text/markdown
34
34
 
@@ -27,10 +27,10 @@ classifiers = [
27
27
  ]
28
28
  dependencies = [
29
29
  "robotframework>=4.1.0",
30
- "robotcode-jsonrpc2==0.106.0",
31
- "robotcode-robot==0.106.0",
32
- "robotcode-analyze==0.106.0",
33
- "robotcode==0.106.0",
30
+ "robotcode-jsonrpc2==0.107.0",
31
+ "robotcode-robot==0.107.0",
32
+ "robotcode-analyze==0.107.0",
33
+ "robotcode==0.107.0",
34
34
  ]
35
35
  dynamic = ["version"]
36
36
 
@@ -0,0 +1 @@
1
+ __version__ = "0.107.0"
@@ -0,0 +1,132 @@
1
+ from concurrent.futures import CancelledError
2
+ from typing import (
3
+ TYPE_CHECKING,
4
+ Any,
5
+ Callable,
6
+ Final,
7
+ Iterable,
8
+ List,
9
+ Optional,
10
+ Protocol,
11
+ TypeVar,
12
+ Union,
13
+ cast,
14
+ runtime_checkable,
15
+ )
16
+
17
+ from robotcode.core.event import event
18
+ from robotcode.core.lsp.types import (
19
+ Location,
20
+ ServerCapabilities,
21
+ SymbolInformation,
22
+ WorkspaceSymbol,
23
+ WorkspaceSymbolClientCapabilitiesResolveSupportType,
24
+ WorkspaceSymbolClientCapabilitiesSymbolKindType,
25
+ WorkspaceSymbolClientCapabilitiesTagSupportType,
26
+ WorkspaceSymbolParams,
27
+ )
28
+ from robotcode.core.utils.logging import LoggingDescriptor
29
+ from robotcode.jsonrpc2.protocol import rpc_method
30
+ from robotcode.language_server.common.parts.protocol_part import (
31
+ LanguageServerProtocolPart,
32
+ )
33
+
34
+ if TYPE_CHECKING:
35
+ from robotcode.language_server.common.protocol import LanguageServerProtocol
36
+
37
+
38
+ @runtime_checkable
39
+ class HasSymbolInformationLabel(Protocol):
40
+ symbol_information_label: str
41
+
42
+
43
+ _F = TypeVar("_F", bound=Callable[..., Any])
44
+
45
+
46
+ def symbol_information_label(label: str) -> Callable[[_F], _F]:
47
+ def decorator(func: _F) -> _F:
48
+ setattr(func, "symbol_information_label", label)
49
+ return func
50
+
51
+ return decorator
52
+
53
+
54
+ class WorkspaceSymbolsProtocolPart(LanguageServerProtocolPart):
55
+ _logger: Final = LoggingDescriptor()
56
+
57
+ def __init__(self, parent: "LanguageServerProtocol") -> None:
58
+ super().__init__(parent)
59
+ self.symbol_kind: Optional[WorkspaceSymbolClientCapabilitiesSymbolKindType] = None
60
+ self.tag_support: Optional[WorkspaceSymbolClientCapabilitiesTagSupportType] = None
61
+ self.resolve_support: Optional[WorkspaceSymbolClientCapabilitiesResolveSupportType] = None
62
+
63
+ @event
64
+ def collect(
65
+ sender,
66
+ query: str,
67
+ ) -> Optional[Union[List[WorkspaceSymbol], List[SymbolInformation], None]]: ...
68
+
69
+ def extend_capabilities(self, capabilities: ServerCapabilities) -> None:
70
+ if (
71
+ self.parent.client_capabilities
72
+ and self.parent.client_capabilities.workspace
73
+ and self.parent.client_capabilities.workspace.symbol is not None
74
+ ):
75
+ workspace_symbol = self.parent.client_capabilities.workspace.symbol
76
+
77
+ self.symbol_kind = workspace_symbol.symbol_kind
78
+ self.tag_support = workspace_symbol.tag_support
79
+ self.resolve_support = workspace_symbol.resolve_support
80
+
81
+ if len(self.collect):
82
+ # TODO: Implement workspace resolve
83
+ capabilities.workspace_symbol_provider = True
84
+
85
+ @rpc_method(name="workspace/symbol", param_type=WorkspaceSymbolParams, threaded=True)
86
+ def _workspace_symbol(
87
+ self, query: str, *args: Any, **kwargs: Any
88
+ ) -> Optional[Union[List[WorkspaceSymbol], List[SymbolInformation], None]]:
89
+ workspace_symbols: List[WorkspaceSymbol] = []
90
+ symbol_informations: List[SymbolInformation] = []
91
+
92
+ for result in self.collect(self, query):
93
+ if isinstance(result, BaseException):
94
+ if not isinstance(result, CancelledError):
95
+ self._logger.exception(result, exc_info=result)
96
+ else:
97
+ if result is not None:
98
+ if all(isinstance(e, WorkspaceSymbol) for e in result):
99
+ workspace_symbols.extend(cast(Iterable[WorkspaceSymbol], result))
100
+ elif all(isinstance(e, SymbolInformation) for e in result):
101
+ symbol_informations.extend(cast(Iterable[SymbolInformation], result))
102
+ else:
103
+ self._logger.warning(
104
+ "Result contains WorkspaceSymbol and SymbolInformation results, result is skipped."
105
+ )
106
+
107
+ if workspace_symbols:
108
+ for symbol in workspace_symbols:
109
+ if isinstance(symbol.location, Location):
110
+ doc = self.parent.documents.get(symbol.location.uri)
111
+ if doc is not None:
112
+ symbol.location.range = doc.range_to_utf16(symbol.location.range)
113
+
114
+ if symbol_informations:
115
+ for symbol_information in symbol_informations:
116
+ doc = self.parent.documents.get(symbol_information.location.uri)
117
+ if doc is not None:
118
+ symbol_information.location.range = doc.range_to_utf16(symbol_information.location.range)
119
+
120
+ if workspace_symbols and symbol_informations:
121
+ self._logger.warning(
122
+ "Result contains WorksapceSymbol and SymbolInformation results, only WorkspaceSymbols returned."
123
+ )
124
+ return workspace_symbols
125
+
126
+ if workspace_symbols:
127
+ return workspace_symbols
128
+
129
+ if symbol_informations:
130
+ return symbol_informations
131
+
132
+ return None
@@ -71,6 +71,7 @@ from .parts.semantic_tokens import SemanticTokensProtocolPart
71
71
  from .parts.signature_help import SignatureHelpProtocolPart
72
72
  from .parts.window import WindowProtocolPart
73
73
  from .parts.workspace import Workspace
74
+ from .parts.workspace_symbols import WorkspaceSymbolsProtocolPart
74
75
 
75
76
  __all__ = ["LanguageServerException", "LanguageServerProtocol"]
76
77
 
@@ -133,6 +134,7 @@ class LanguageServerProtocol(JsonRPCProtocol):
133
134
  inline_value: Final = ProtocolPartDescriptor(InlineValueProtocolPart)
134
135
  inlay_hint: Final = ProtocolPartDescriptor(InlayHintProtocolPart)
135
136
  code_action: Final = ProtocolPartDescriptor(CodeActionProtocolPart)
137
+ workspace_symbols: Final = ProtocolPartDescriptor(WorkspaceSymbolsProtocolPart)
136
138
 
137
139
  name: Optional[str] = None
138
140
  short_name: Optional[str] = None
@@ -113,26 +113,18 @@ class RobotCodeActionDocumentationProtocolPart(RobotLanguageServerProtocolPart,
113
113
 
114
114
  if kw_doc.libtype == "LIBRARY":
115
115
  entry = next(
116
- (
117
- v
118
- for v in (namespace.get_libraries()).values()
119
- if v.library_doc.digest == kw_doc.parent_digest
120
- ),
116
+ (v for v in (namespace.get_libraries()).values() if v.library_doc == kw_doc.parent),
121
117
  None,
122
118
  )
123
119
 
124
120
  elif kw_doc.libtype == "RESOURCE":
125
121
  entry = next(
126
- (
127
- v
128
- for v in (namespace.get_resources()).values()
129
- if v.library_doc.digest == kw_doc.parent_digest
130
- ),
122
+ (v for v in (namespace.get_resources()).values() if v.library_doc == kw_doc.parent),
131
123
  None,
132
124
  )
133
125
 
134
126
  self_libdoc = namespace.get_library_doc()
135
- if entry is None and self_libdoc.digest == kw_doc.parent_digest:
127
+ if entry is None and self_libdoc == kw_doc.parent:
136
128
  entry = LibraryEntry(
137
129
  self_libdoc.name,
138
130
  str(document.uri.to_path().name),
@@ -94,7 +94,7 @@ class _Visitor(Visitor):
94
94
  r = range_from_node(node)
95
95
  symbol = DocumentSymbol(
96
96
  name=node.name,
97
- kind=SymbolKind.METHOD,
97
+ kind=SymbolKind.CLASS,
98
98
  range=r,
99
99
  selection_range=r,
100
100
  children=[],
@@ -537,7 +537,9 @@ class RobotSemanticTokenProtocolPart(RobotLanguageServerProtocolPart):
537
537
  ignore_errors=True,
538
538
  identifiers="$@&%",
539
539
  ):
540
- for e in self.generate_sem_sub_tokens(namespace, builtin_library_doc, sub_token, node):
540
+ for e in self.generate_sem_sub_tokens(
541
+ namespace, builtin_library_doc, sub_token, node, yield_arguments=True
542
+ ):
541
543
  e.sem_modifiers = {RobotSemTokenModifiers.EMBEDDED}
542
544
  yield e
543
545
 
@@ -0,0 +1,88 @@
1
+ from typing import TYPE_CHECKING, Any, List, Optional, Union
2
+
3
+ from robotcode.core.lsp.types import (
4
+ Location,
5
+ SymbolInformation,
6
+ SymbolKind,
7
+ SymbolTag,
8
+ WorkspaceSymbol,
9
+ )
10
+ from robotcode.core.utils.logging import LoggingDescriptor
11
+
12
+ from .protocol_part import RobotLanguageServerProtocolPart
13
+
14
+ if TYPE_CHECKING:
15
+ from ..protocol import RobotLanguageServerProtocol
16
+
17
+
18
+ def contains_characters_in_order(main_string: str, check_string: str) -> bool:
19
+ main_iter = iter(main_string.lower())
20
+ return all(char in main_iter for char in check_string.lower())
21
+
22
+
23
+ class RobotWorkspaceSymbolsProtocolPart(RobotLanguageServerProtocolPart):
24
+ _logger = LoggingDescriptor()
25
+
26
+ def __init__(self, parent: "RobotLanguageServerProtocol") -> None:
27
+ super().__init__(parent)
28
+
29
+ parent.workspace_symbols.collect.add(self.collect)
30
+
31
+ @_logger.call
32
+ def collect(self, sender: Any, query: str) -> Optional[Union[List[WorkspaceSymbol], List[SymbolInformation], None]]:
33
+ result: List[WorkspaceSymbol] = []
34
+ for document in self.parent.documents.documents:
35
+ if document.language_id == "robotframework":
36
+ namespace = self.parent.documents_cache.get_only_initialized_namespace(document)
37
+ if namespace is not None:
38
+ container_name = namespace.get_library_doc().name
39
+
40
+ for kw_doc in [
41
+ v
42
+ for v in namespace.get_keyword_references().keys()
43
+ if v.source == namespace.source and contains_characters_in_order(v.name, query)
44
+ ]:
45
+ result.append(
46
+ WorkspaceSymbol(
47
+ name=kw_doc.name,
48
+ kind=SymbolKind.FUNCTION,
49
+ location=Location(
50
+ uri=document.document_uri,
51
+ range=kw_doc.range,
52
+ ),
53
+ tags=[SymbolTag.DEPRECATED] if kw_doc.is_deprecated else None,
54
+ container_name=container_name,
55
+ )
56
+ )
57
+ for var in [
58
+ v
59
+ for v in namespace.get_variable_references().keys()
60
+ if v.source == namespace.source and contains_characters_in_order(v.name, query)
61
+ ]:
62
+ result.append(
63
+ WorkspaceSymbol(
64
+ name=var.name,
65
+ kind=SymbolKind.VARIABLE,
66
+ location=Location(
67
+ uri=document.document_uri,
68
+ range=var.range,
69
+ ),
70
+ container_name=container_name,
71
+ )
72
+ )
73
+
74
+ for test in [
75
+ v for v in namespace.get_testcase_definitions() if contains_characters_in_order(v.name, query)
76
+ ]:
77
+ result.append(
78
+ WorkspaceSymbol(
79
+ name=test.name,
80
+ kind=SymbolKind.CLASS,
81
+ location=Location(
82
+ uri=document.document_uri,
83
+ range=test.range,
84
+ ),
85
+ container_name=container_name,
86
+ )
87
+ )
88
+ return result
@@ -52,6 +52,7 @@ from .parts.robot_workspace import RobotWorkspaceProtocolPart
52
52
  from .parts.selection_range import RobotSelectionRangeProtocolPart
53
53
  from .parts.semantic_tokens import RobotSemanticTokenProtocolPart
54
54
  from .parts.signature_help import RobotSignatureHelpProtocolPart
55
+ from .parts.workspace_symbols import RobotWorkspaceSymbolsProtocolPart
55
56
 
56
57
  if TYPE_CHECKING:
57
58
  from .server import RobotLanguageServer
@@ -118,6 +119,7 @@ class RobotLanguageServerProtocol(LanguageServerProtocol):
118
119
  robot_debugging_utils = ProtocolPartDescriptor(RobotDebuggingUtilsProtocolPart)
119
120
  robot_keywords_treeview = ProtocolPartDescriptor(RobotKeywordsTreeViewPart)
120
121
  robot_project_info = ProtocolPartDescriptor(ProjectInfoPart)
122
+ robot_workspace_symbols = ProtocolPartDescriptor(RobotWorkspaceSymbolsProtocolPart)
121
123
 
122
124
  http_server = ProtocolPartDescriptor(HttpServerProtocolPart)
123
125
 
@@ -1 +0,0 @@
1
- __version__ = "0.106.0"