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.
- {robotcode_language_server-0.106.0 → robotcode_language_server-0.107.0}/PKG-INFO +5 -5
- {robotcode_language_server-0.106.0 → robotcode_language_server-0.107.0}/pyproject.toml +4 -4
- robotcode_language_server-0.107.0/src/robotcode/language_server/__version__.py +1 -0
- robotcode_language_server-0.107.0/src/robotcode/language_server/common/parts/workspace_symbols.py +132 -0
- {robotcode_language_server-0.106.0 → robotcode_language_server-0.107.0}/src/robotcode/language_server/common/protocol.py +2 -0
- {robotcode_language_server-0.106.0 → robotcode_language_server-0.107.0}/src/robotcode/language_server/robotframework/parts/code_action_documentation.py +3 -11
- {robotcode_language_server-0.106.0 → robotcode_language_server-0.107.0}/src/robotcode/language_server/robotframework/parts/document_symbols.py +1 -1
- {robotcode_language_server-0.106.0 → robotcode_language_server-0.107.0}/src/robotcode/language_server/robotframework/parts/semantic_tokens.py +3 -1
- robotcode_language_server-0.107.0/src/robotcode/language_server/robotframework/parts/workspace_symbols.py +88 -0
- {robotcode_language_server-0.106.0 → robotcode_language_server-0.107.0}/src/robotcode/language_server/robotframework/protocol.py +2 -0
- robotcode_language_server-0.106.0/src/robotcode/language_server/__version__.py +0 -1
- {robotcode_language_server-0.106.0 → robotcode_language_server-0.107.0}/.gitignore +0 -0
- {robotcode_language_server-0.106.0 → robotcode_language_server-0.107.0}/LICENSE.txt +0 -0
- {robotcode_language_server-0.106.0 → robotcode_language_server-0.107.0}/README.md +0 -0
- {robotcode_language_server-0.106.0 → robotcode_language_server-0.107.0}/src/robotcode/language_server/__init__.py +0 -0
- {robotcode_language_server-0.106.0 → robotcode_language_server-0.107.0}/src/robotcode/language_server/cli.py +0 -0
- {robotcode_language_server-0.106.0 → robotcode_language_server-0.107.0}/src/robotcode/language_server/common/__init__.py +0 -0
- {robotcode_language_server-0.106.0 → robotcode_language_server-0.107.0}/src/robotcode/language_server/common/decorators.py +0 -0
- {robotcode_language_server-0.106.0 → robotcode_language_server-0.107.0}/src/robotcode/language_server/common/parts/__init__.py +0 -0
- {robotcode_language_server-0.106.0 → robotcode_language_server-0.107.0}/src/robotcode/language_server/common/parts/code_action.py +0 -0
- {robotcode_language_server-0.106.0 → robotcode_language_server-0.107.0}/src/robotcode/language_server/common/parts/code_lens.py +0 -0
- {robotcode_language_server-0.106.0 → robotcode_language_server-0.107.0}/src/robotcode/language_server/common/parts/commands.py +0 -0
- {robotcode_language_server-0.106.0 → robotcode_language_server-0.107.0}/src/robotcode/language_server/common/parts/completion.py +0 -0
- {robotcode_language_server-0.106.0 → robotcode_language_server-0.107.0}/src/robotcode/language_server/common/parts/declaration.py +0 -0
- {robotcode_language_server-0.106.0 → robotcode_language_server-0.107.0}/src/robotcode/language_server/common/parts/definition.py +0 -0
- {robotcode_language_server-0.106.0 → robotcode_language_server-0.107.0}/src/robotcode/language_server/common/parts/diagnostics.py +0 -0
- {robotcode_language_server-0.106.0 → robotcode_language_server-0.107.0}/src/robotcode/language_server/common/parts/document_highlight.py +0 -0
- {robotcode_language_server-0.106.0 → robotcode_language_server-0.107.0}/src/robotcode/language_server/common/parts/document_symbols.py +0 -0
- {robotcode_language_server-0.106.0 → robotcode_language_server-0.107.0}/src/robotcode/language_server/common/parts/documents.py +0 -0
- {robotcode_language_server-0.106.0 → robotcode_language_server-0.107.0}/src/robotcode/language_server/common/parts/folding_range.py +0 -0
- {robotcode_language_server-0.106.0 → robotcode_language_server-0.107.0}/src/robotcode/language_server/common/parts/formatting.py +0 -0
- {robotcode_language_server-0.106.0 → robotcode_language_server-0.107.0}/src/robotcode/language_server/common/parts/hover.py +0 -0
- {robotcode_language_server-0.106.0 → robotcode_language_server-0.107.0}/src/robotcode/language_server/common/parts/implementation.py +0 -0
- {robotcode_language_server-0.106.0 → robotcode_language_server-0.107.0}/src/robotcode/language_server/common/parts/inlay_hint.py +0 -0
- {robotcode_language_server-0.106.0 → robotcode_language_server-0.107.0}/src/robotcode/language_server/common/parts/inline_value.py +0 -0
- {robotcode_language_server-0.106.0 → robotcode_language_server-0.107.0}/src/robotcode/language_server/common/parts/linked_editing_ranges.py +0 -0
- {robotcode_language_server-0.106.0 → robotcode_language_server-0.107.0}/src/robotcode/language_server/common/parts/protocol_part.py +0 -0
- {robotcode_language_server-0.106.0 → robotcode_language_server-0.107.0}/src/robotcode/language_server/common/parts/references.py +0 -0
- {robotcode_language_server-0.106.0 → robotcode_language_server-0.107.0}/src/robotcode/language_server/common/parts/rename.py +0 -0
- {robotcode_language_server-0.106.0 → robotcode_language_server-0.107.0}/src/robotcode/language_server/common/parts/selection_range.py +0 -0
- {robotcode_language_server-0.106.0 → robotcode_language_server-0.107.0}/src/robotcode/language_server/common/parts/semantic_tokens.py +0 -0
- {robotcode_language_server-0.106.0 → robotcode_language_server-0.107.0}/src/robotcode/language_server/common/parts/signature_help.py +0 -0
- {robotcode_language_server-0.106.0 → robotcode_language_server-0.107.0}/src/robotcode/language_server/common/parts/window.py +0 -0
- {robotcode_language_server-0.106.0 → robotcode_language_server-0.107.0}/src/robotcode/language_server/common/parts/workspace.py +0 -0
- {robotcode_language_server-0.106.0 → robotcode_language_server-0.107.0}/src/robotcode/language_server/common/server.py +0 -0
- {robotcode_language_server-0.106.0 → robotcode_language_server-0.107.0}/src/robotcode/language_server/hooks.py +0 -0
- {robotcode_language_server-0.106.0 → robotcode_language_server-0.107.0}/src/robotcode/language_server/py.typed +0 -0
- {robotcode_language_server-0.106.0 → robotcode_language_server-0.107.0}/src/robotcode/language_server/robotframework/__init__.py +0 -0
- {robotcode_language_server-0.106.0 → robotcode_language_server-0.107.0}/src/robotcode/language_server/robotframework/configuration.py +0 -0
- {robotcode_language_server-0.106.0 → robotcode_language_server-0.107.0}/src/robotcode/language_server/robotframework/parts/__init__.py +0 -0
- {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
- {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
- {robotcode_language_server-0.106.0 → robotcode_language_server-0.107.0}/src/robotcode/language_server/robotframework/parts/code_action_refactor.py +0 -0
- {robotcode_language_server-0.106.0 → robotcode_language_server-0.107.0}/src/robotcode/language_server/robotframework/parts/code_lens.py +0 -0
- {robotcode_language_server-0.106.0 → robotcode_language_server-0.107.0}/src/robotcode/language_server/robotframework/parts/completion.py +0 -0
- {robotcode_language_server-0.106.0 → robotcode_language_server-0.107.0}/src/robotcode/language_server/robotframework/parts/debugging_utils.py +0 -0
- {robotcode_language_server-0.106.0 → robotcode_language_server-0.107.0}/src/robotcode/language_server/robotframework/parts/diagnostics.py +0 -0
- {robotcode_language_server-0.106.0 → robotcode_language_server-0.107.0}/src/robotcode/language_server/robotframework/parts/document_highlight.py +0 -0
- {robotcode_language_server-0.106.0 → robotcode_language_server-0.107.0}/src/robotcode/language_server/robotframework/parts/documents_cache.py +0 -0
- {robotcode_language_server-0.106.0 → robotcode_language_server-0.107.0}/src/robotcode/language_server/robotframework/parts/folding_range.py +0 -0
- {robotcode_language_server-0.106.0 → robotcode_language_server-0.107.0}/src/robotcode/language_server/robotframework/parts/formatting.py +0 -0
- {robotcode_language_server-0.106.0 → robotcode_language_server-0.107.0}/src/robotcode/language_server/robotframework/parts/goto.py +0 -0
- {robotcode_language_server-0.106.0 → robotcode_language_server-0.107.0}/src/robotcode/language_server/robotframework/parts/hover.py +0 -0
- {robotcode_language_server-0.106.0 → robotcode_language_server-0.107.0}/src/robotcode/language_server/robotframework/parts/http_server.py +0 -0
- {robotcode_language_server-0.106.0 → robotcode_language_server-0.107.0}/src/robotcode/language_server/robotframework/parts/inlay_hint.py +0 -0
- {robotcode_language_server-0.106.0 → robotcode_language_server-0.107.0}/src/robotcode/language_server/robotframework/parts/inline_value.py +0 -0
- {robotcode_language_server-0.106.0 → robotcode_language_server-0.107.0}/src/robotcode/language_server/robotframework/parts/keywords_treeview.py +0 -0
- {robotcode_language_server-0.106.0 → robotcode_language_server-0.107.0}/src/robotcode/language_server/robotframework/parts/project_info.py +0 -0
- {robotcode_language_server-0.106.0 → robotcode_language_server-0.107.0}/src/robotcode/language_server/robotframework/parts/protocol_part.py +0 -0
- {robotcode_language_server-0.106.0 → robotcode_language_server-0.107.0}/src/robotcode/language_server/robotframework/parts/references.py +0 -0
- {robotcode_language_server-0.106.0 → robotcode_language_server-0.107.0}/src/robotcode/language_server/robotframework/parts/rename.py +0 -0
- {robotcode_language_server-0.106.0 → robotcode_language_server-0.107.0}/src/robotcode/language_server/robotframework/parts/robocop_diagnostics.py +0 -0
- {robotcode_language_server-0.106.0 → robotcode_language_server-0.107.0}/src/robotcode/language_server/robotframework/parts/robot_workspace.py +0 -0
- {robotcode_language_server-0.106.0 → robotcode_language_server-0.107.0}/src/robotcode/language_server/robotframework/parts/selection_range.py +0 -0
- {robotcode_language_server-0.106.0 → robotcode_language_server-0.107.0}/src/robotcode/language_server/robotframework/parts/signature_help.py +0 -0
- {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.
|
|
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.
|
|
29
|
-
Requires-Dist: robotcode-jsonrpc2==0.
|
|
30
|
-
Requires-Dist: robotcode-robot==0.
|
|
31
|
-
Requires-Dist: robotcode==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.
|
|
31
|
-
"robotcode-robot==0.
|
|
32
|
-
"robotcode-analyze==0.
|
|
33
|
-
"robotcode==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"
|
robotcode_language_server-0.107.0/src/robotcode/language_server/common/parts/workspace_symbols.py
ADDED
|
@@ -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
|
|
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),
|
|
@@ -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(
|
|
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"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|