code-analysis-client 1.6.260__tar.gz → 1.6.262__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 (29) hide show
  1. {code_analysis_client-1.6.260 → code_analysis_client-1.6.262}/PKG-INFO +1 -1
  2. {code_analysis_client-1.6.260 → code_analysis_client-1.6.262}/code_analysis_client/__init__.py +2 -0
  3. {code_analysis_client-1.6.260 → code_analysis_client-1.6.262}/code_analysis_client/client.py +36 -0
  4. {code_analysis_client-1.6.260 → code_analysis_client-1.6.262}/code_analysis_client/exceptions.py +2 -2
  5. {code_analysis_client-1.6.260 → code_analysis_client-1.6.262}/code_analysis_client/queue_wait.py +2 -2
  6. code_analysis_client-1.6.262/code_analysis_client/symbol_tree.py +13 -0
  7. code_analysis_client-1.6.262/code_analysis_client/version.txt +1 -0
  8. {code_analysis_client-1.6.260 → code_analysis_client-1.6.262}/code_analysis_client.egg-info/PKG-INFO +1 -1
  9. {code_analysis_client-1.6.260 → code_analysis_client-1.6.262}/code_analysis_client.egg-info/SOURCES.txt +1 -0
  10. code_analysis_client-1.6.260/code_analysis_client/version.txt +0 -1
  11. {code_analysis_client-1.6.260 → code_analysis_client-1.6.262}/README.md +0 -0
  12. {code_analysis_client-1.6.260 → code_analysis_client-1.6.262}/code_analysis_client/check_chain.py +0 -0
  13. {code_analysis_client-1.6.260 → code_analysis_client-1.6.262}/code_analysis_client/commands_proxy.py +0 -0
  14. {code_analysis_client-1.6.260 → code_analysis_client-1.6.262}/code_analysis_client/config.py +0 -0
  15. {code_analysis_client-1.6.260 → code_analysis_client-1.6.262}/code_analysis_client/file_session.py +0 -0
  16. {code_analysis_client-1.6.260 → code_analysis_client-1.6.262}/code_analysis_client/py.typed +0 -0
  17. {code_analysis_client-1.6.260 → code_analysis_client-1.6.262}/code_analysis_client/responses.py +0 -0
  18. {code_analysis_client-1.6.260 → code_analysis_client-1.6.262}/code_analysis_client/schema_disk_cache.py +0 -0
  19. {code_analysis_client-1.6.260 → code_analysis_client-1.6.262}/code_analysis_client/server_api.py +0 -0
  20. {code_analysis_client-1.6.260 → code_analysis_client-1.6.262}/code_analysis_client/server_schema.py +0 -0
  21. {code_analysis_client-1.6.260 → code_analysis_client-1.6.262}/code_analysis_client/universal_file.py +0 -0
  22. {code_analysis_client-1.6.260 → code_analysis_client-1.6.262}/code_analysis_client/validation.py +0 -0
  23. {code_analysis_client-1.6.260 → code_analysis_client-1.6.262}/code_analysis_client/vectorizer_state.py +0 -0
  24. {code_analysis_client-1.6.260 → code_analysis_client-1.6.262}/code_analysis_client/worktree.py +0 -0
  25. {code_analysis_client-1.6.260 → code_analysis_client-1.6.262}/code_analysis_client.egg-info/dependency_links.txt +0 -0
  26. {code_analysis_client-1.6.260 → code_analysis_client-1.6.262}/code_analysis_client.egg-info/requires.txt +0 -0
  27. {code_analysis_client-1.6.260 → code_analysis_client-1.6.262}/code_analysis_client.egg-info/top_level.txt +0 -0
  28. {code_analysis_client-1.6.260 → code_analysis_client-1.6.262}/pyproject.toml +0 -0
  29. {code_analysis_client-1.6.260 → code_analysis_client-1.6.262}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: code-analysis-client
3
- Version: 1.6.260
3
+ Version: 1.6.262
4
4
  Summary: Async JSON-RPC client for the code-analysis MCP server (mcp-proxy-adapter JsonRpcClient)
5
5
  Author-email: Vasiliy Zdanovskiy <vasilyvz@gmail.com>
6
6
  Requires-Python: >=3.10
@@ -10,6 +10,7 @@ from __future__ import annotations
10
10
  from pathlib import Path
11
11
 
12
12
  from code_analysis_client.client import CodeAnalysisAsyncClient
13
+ from code_analysis_client.symbol_tree import SymbolTreeNode
13
14
  from code_analysis_client.commands_proxy import ValidatedCommandsProxy
14
15
  from code_analysis_client.config import (
15
16
  DEFAULT_CLIENT_ADAPTER_CONFIG,
@@ -76,6 +77,7 @@ __all__ = [
76
77
  "CST_REMOVED_COMMANDS",
77
78
  "ClientValidationError",
78
79
  "CodeAnalysisAsyncClient",
80
+ "SymbolTreeNode",
79
81
  "CommandFailedError",
80
82
  "FILE_SESSION_COMMANDS",
81
83
  "FILE_SESSION_FACADE_METHODS",
@@ -49,11 +49,14 @@ from code_analysis_client.schema_disk_cache import (
49
49
  )
50
50
  from code_analysis_client.server_schema import fetch_command_schema_from_server
51
51
  from code_analysis_client.exceptions import ClientValidationError
52
+ from code_analysis_client.symbol_tree import SymbolTreeNode
52
53
  from code_analysis_client.validation import (
53
54
  prepare_params_for_schema,
54
55
  validate_params_against_schema,
55
56
  )
56
57
 
58
+ _SYMBOL_TREE_OMITTED: Any = object()
59
+
57
60
 
58
61
  def _remote_invalid_params_as_client_validation(
59
62
  error: ClientRemoteResponseError,
@@ -182,6 +185,39 @@ class CodeAnalysisAsyncClient:
182
185
  self._command_schema_cache.clear()
183
186
  clear_cached_schemas(self._rpc.base_url)
184
187
 
188
+ async def symbol_tree(
189
+ self,
190
+ *,
191
+ project_id: str,
192
+ file_path: str | None = _SYMBOL_TREE_OMITTED,
193
+ source: str | None = _SYMBOL_TREE_OMITTED,
194
+ source_name: str | None = _SYMBOL_TREE_OMITTED,
195
+ worktree_name: str | None = _SYMBOL_TREE_OMITTED,
196
+ options: dict[str, object] | None = _SYMBOL_TREE_OMITTED,
197
+ ) -> list[SymbolTreeNode]:
198
+ """Read declarations without saving raw source or changing project state.
199
+
200
+ Select exactly one of ``file_path`` and ``source``. Raw source requires
201
+ ``source_name``; its extension selects the plugin. Domain failures retain
202
+ the normal ``CommandFailedError`` result; validation uses
203
+ ``ClientValidationError``.
204
+ """
205
+ params: dict[str, Any] = {"project_id": project_id}
206
+ for key, value in (
207
+ ("file_path", file_path),
208
+ ("source", source),
209
+ ("source_name", source_name),
210
+ ("worktree_name", worktree_name),
211
+ ("options", options),
212
+ ):
213
+ if value is not _SYMBOL_TREE_OMITTED:
214
+ params[key] = value
215
+ result = await self.call("symbol_tree", params)
216
+ data = result.get("data")
217
+ if not isinstance(data, list):
218
+ raise RuntimeError("symbol_tree returned a non-list result")
219
+ return data
220
+
185
221
  @property
186
222
  def file_sessions(self) -> FileSessionClient:
187
223
  """Session workflow: ``session_*``, ``subordinate_session_*``, transfer, advisory locks."""
@@ -20,7 +20,7 @@ class ClientValidationError(ValueError):
20
20
  ``SESSION_OPEN_IN_EDITOR``) and ``details`` is the server's error details object.
21
21
  """
22
22
 
23
- code = "VALIDATION_ERROR"
23
+ code: str | int = "VALIDATION_ERROR"
24
24
 
25
25
  def __init__(
26
26
  self,
@@ -28,7 +28,7 @@ class ClientValidationError(ValueError):
28
28
  *,
29
29
  field: Optional[str] = None,
30
30
  details: Optional[Dict[str, Any]] = None,
31
- code: Optional[str] = None,
31
+ code: str | int | None = None,
32
32
  ) -> None:
33
33
  """Initialize with optional field, details payload and the server error code."""
34
34
  super().__init__(message)
@@ -97,7 +97,7 @@ def remote_error_text(message: Any, code: Any) -> str:
97
97
 
98
98
 
99
99
  def invalid_params_error(
100
- message: str, data: Any, *, code: Optional[str] = None
100
+ message: str, data: Any, *, code: str | int = -32602
101
101
  ) -> ClientValidationError:
102
102
  """Build the :class:`ClientValidationError` for a server refusal of a command's parameters.
103
103
 
@@ -105,7 +105,7 @@ def invalid_params_error(
105
105
  failed job (``job_failure``) and a refused command-session open with the server's own error
106
106
  code (``map_adapter_error``), so ``code`` / ``field`` / ``details`` have one shape: ``details``
107
107
  is the server's error ``data`` object, ``field`` its ``field`` entry (else ``"command"``),
108
- ``code`` ``VALIDATION_ERROR`` unless the server named its own code.
108
+ ``code`` retains JSON-RPC ``-32602`` unless the server named its own code.
109
109
  """
110
110
  payload = data if isinstance(data, dict) else {}
111
111
  field = payload.get("field")
@@ -0,0 +1,13 @@
1
+ """The uniform recursive declaration-tree result."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from typing import TypedDict
6
+
7
+
8
+ class SymbolTreeNode(TypedDict):
9
+ """One declaration; kinds belong to language plugins."""
10
+
11
+ name: str
12
+ kind: str
13
+ children: list[SymbolTreeNode]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: code-analysis-client
3
- Version: 1.6.260
3
+ Version: 1.6.262
4
4
  Summary: Async JSON-RPC client for the code-analysis MCP server (mcp-proxy-adapter JsonRpcClient)
5
5
  Author-email: Vasiliy Zdanovskiy <vasilyvz@gmail.com>
6
6
  Requires-Python: >=3.10
@@ -13,6 +13,7 @@ code_analysis_client/responses.py
13
13
  code_analysis_client/schema_disk_cache.py
14
14
  code_analysis_client/server_api.py
15
15
  code_analysis_client/server_schema.py
16
+ code_analysis_client/symbol_tree.py
16
17
  code_analysis_client/universal_file.py
17
18
  code_analysis_client/validation.py
18
19
  code_analysis_client/vectorizer_state.py