---
title: "LSPサーバー"
hideTitleOnPage: true
---

## LspServer

```python
class LspServer()
```

コードインテリジェンスのための Language Server Protocol 機能を提供し、コード補完やシンボル検索などの IDE 風の機能を実現します。

#### LspServer.__init__

```python
def __init__(language_id: LspLanguageId, path_to_project: str,
             toolbox_api: ToolboxApi, sandbox_id: str)
```

新しい LSP サーバーインスタンスを初期化します。

**引数**:

- `language_id` _LspLanguageId_ - 言語サーバーの種類（例: LspLanguageId.TYPESCRIPT）。
- `path_to_project` _str_ - プロジェクトのルートディレクトリへの絶対パス。
- `toolbox_api` _ToolboxApi_ - サンドボックス操作用の API クライアント。
- `instance` _SandboxInstance_ - このサーバーが属するサンドボックスインスタンス。

#### LspServer.start

```python
@intercept_errors(message_prefix="Failed to start LSP server: ")
def start() -> None
```

言語サーバーを起動します。

このメソッドは他の LSP 機能を使用する前に呼び出す必要があります。指定された言語とプロジェクトに対して言語サーバーを初期化します。

**例**:

```python
lsp = sandbox.create_lsp_server("typescript", "workspace/project")
lsp.start()  # Initialize the server
# Now ready for LSP operations
```

#### LspServer.stop

```python
@intercept_errors(message_prefix="Failed to stop LSP server: ")
def stop() -> None
```

言語サーバーを停止します。

このメソッドは LSP サーバーが不要になったときに呼び出して、システムリソースを解放します。

**例**:

```python
# When done with LSP features
lsp.stop()  # Clean up resources
```

#### LspServer.did_open

```python
@intercept_errors(message_prefix="Failed to open file: ")
def did_open(path: str) -> None
```

ファイルが開かれたことを言語サーバーに通知します。

エディタでファイルを開いたときにこのメソッドを呼び出すと、そのファイルに対する診断や補完などの言語機能が有効になります。サーバーはファイル内容の追跡を開始し、言語機能を提供します。

**引数**:

- `path` _str_ - 開いたファイルへのパス。相対パスは LSP サーバーのコンストラクタで設定されたプロジェクトパスに基づいて解決されます。
  

**例**:

```python
# When opening a file for editing
lsp.did_open("workspace/project/src/index.ts")
# Now can get completions, symbols, etc. for this file
```

#### LspServer.did_close

```python
@intercept_errors(message_prefix="Failed to close file: ")
def did_close(path: str) -> None
```

ファイルが閉じられたことを言語サーバーに通知します。

エディタでファイルを閉じたときにこのメソッドを呼び出すことで、そのファイルに関連するリソースを言語サーバーがクリーンアップできます。

**引数**:

- `path` _str_ - 閉じたファイルへのパス。相対パスは LSP サーバーのコンストラクタで設定されたプロジェクトパスに基づいて解決されます。
  

**例**:

```python
# When done editing a file
lsp.did_close("workspace/project/src/index.ts")
```

#### LspServer.document_symbols

```python
@intercept_errors(message_prefix="Failed to get symbols from document: ")
def document_symbols(path: str) -> List[LspSymbol]
```

ドキュメントからシンボル情報（関数、クラス、変数など）を取得します。

**引数**:

- `path` _str_ - シンボルを取得するファイルへのパス。相対パスは LSP サーバーのコンストラクタで設定されたプロジェクトパスに基づいて解決されます。
  

**戻り値**:

- `List[LspSymbol]` - ドキュメント内のシンボル一覧。各シンボルには以下が含まれます:
  - name: シンボル名
  - kind: シンボルの種類（function、class、variable など）
  - location: ファイル内でのシンボルの位置
  

**例**:

```python
# Get all symbols in a file
symbols = lsp.document_symbols("workspace/project/src/index.ts")
for symbol in symbols:
    print(f"{symbol.kind} {symbol.name}: {symbol.location}")
```

#### LspServer.workspace_symbols

```python
@deprecated(
    reason=
    "Method is deprecated. Use `sandbox_symbols` instead. This method will be removed in a future version."
)
def workspace_symbols(query: str) -> List[LspSymbol]
```

クエリ文字列に一致するシンボルをサンドボックス内の全ファイルから検索します。

**引数**:

- `query` _str_ - シンボル名に照合する検索クエリ。
  

**戻り値**:

- `List[LspSymbol]` - すべてのファイルからの一致シンボルの一覧。

#### LspServer.sandbox_symbols

```python
@intercept_errors(message_prefix="Failed to get symbols from sandbox: ")
def sandbox_symbols(query: str) -> List[LspSymbol]
```

クエリ文字列に一致するシンボルを、サンドボックス内のすべてのファイルから検索します。

**引数**:

- `query` _str_ - シンボル名に対して照合する検索クエリ。
  

**返り値**:

- `List[LspSymbol]` - すべてのファイルから一致したシンボルの一覧。各シンボルには次が含まれます:
  - name: シンボル名
  - kind: シンボルの種別（function、class、variable など）
  - location: ファイル内でのシンボル位置
  

**例**:

```python
# 「User」を含むすべてのシンボルを検索
symbols = lsp.sandbox_symbols("User")
for symbol in symbols:
    print(f"{symbol.name} in {symbol.location}")
```

#### LspServer.completions

```python
@intercept_errors(message_prefix="Failed to get completions: ")
def completions(path: str, position: Position) -> CompletionList
```

ファイル内の指定位置で補完候補を取得します。

**引数**:

- `path` _str_ - ファイルパス。相対パスは、LSP サーバーのコンストラクターで設定したプロジェクトパスを基準に解決されます。
- `position` _Position_ - 補完を取得するカーソル位置。
  

**返り値**:

- `CompletionList` - 補完候補の一覧。以下を含みます:
  - isIncomplete: さらに項目が利用可能な可能性があるか
  - items: 補完項目のリスト。各項目には次が含まれます:
  - label: 挿入するテキスト
  - kind: 補完の種別
  - detail: 項目に関する追加情報
  - documentation: 項目のドキュメント
  - sortText: 一覧でのソートに使うテキスト
  - filterText: フィルターに使うテキスト
  - insertText: 実際に挿入するテキスト（label と異なる場合）
  

**例**:

```python
# 特定の位置で補完候補を取得
pos = Position(line=10, character=15)
completions = lsp.completions("workspace/project/src/index.ts", pos)
for item in completions.items:
    print(f"{item.label} ({item.kind}): {item.detail}")
```


## LspLanguageId

```python
class LspLanguageId(Enum)
```

LSP（言語サーバープロトコル）で使用する言語ID。

**列挙メンバー**:
    - `PYTHON` ("python")
    - `TYPESCRIPT` ("typescript")
    - `JAVASCRIPT` ("javascript")

## Position

```python
class Position()
```

テキストドキュメント内のゼロ基準の位置を表し、行番号と文字オフセットで指定します。

**属性**:

- `line` _int_ - ドキュメント内のゼロ基準の行番号。
- `character` _int_ - 行内のゼロ基準の文字オフセット。

#### Position.\_\_init\_\_

```python
def __init__(line: int, character: int)
```

新しい Position インスタンスを初期化します。

**引数**:

- `line` _int_ - ドキュメント内のゼロ基準の行番号。
- `character` _int_ - 行内のゼロ基準の文字オフセット。

