Skip to content

Commit bd9bcfd

Browse files
committed
Merge branch 'fix-delete-text-file-contents' into develop
2 parents 7a3035c + 13ce061 commit bd9bcfd

File tree

3 files changed

+24
-19
lines changed

3 files changed

+24
-19
lines changed

src/mcp_text_editor/handlers/delete_text_file_contents.py

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88

99
from mcp.types import TextContent, Tool
1010

11+
from ..models import DeleteTextFileContentsRequest, FileRange
1112
from .base import BaseHandler
1213

1314
logger = logging.getLogger("mcp-text-editor")
@@ -88,25 +89,25 @@ async def run_tool(self, arguments: Dict[str, Any]) -> Sequence[TextContent]:
8889

8990
encoding = arguments.get("encoding", "utf-8")
9091

91-
# Create patches for deletion (replacing content with empty string)
92-
patches = [
93-
{
94-
"start": r["start"],
95-
"end": r["end"],
96-
"contents": "",
97-
"range_hash": r["range_hash"],
98-
}
92+
# Create file ranges for deletion
93+
ranges = [
94+
FileRange(
95+
start=r["start"], end=r.get("end"), range_hash=r["range_hash"]
96+
)
9997
for r in arguments["ranges"]
10098
]
10199

102-
# Use the existing edit_file_contents method
103-
result = await self.editor.edit_file_contents(
104-
file_path,
105-
expected_hash=arguments["file_hash"],
106-
patches=patches,
100+
# Create delete request
101+
request = DeleteTextFileContentsRequest(
102+
file_path=file_path,
103+
file_hash=arguments["file_hash"],
104+
ranges=ranges,
107105
encoding=encoding,
108106
)
109107

108+
# Execute deletion using the service
109+
result = self.editor.service.delete_text_file_contents(request)
110+
110111
return [TextContent(type="text", text=json.dumps(result, indent=2))]
111112

112113
except Exception as e:

src/mcp_text_editor/text_editor.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@
55
import os
66
from typing import Any, Dict, List, Optional, Tuple
77

8-
from mcp_text_editor.models import DeleteTextFileContentsRequest, EditPatch, FileRanges
8+
from .models import DeleteTextFileContentsRequest, EditPatch, FileRanges
9+
from .service import TextEditorService
910

1011
logger = logging.getLogger(__name__)
1112

@@ -42,6 +43,7 @@ class TextEditor:
4243
def __init__(self):
4344
"""Initialize TextEditor."""
4445
self._validate_environment()
46+
self.service = TextEditorService()
4547

4648
def _validate_environment(self) -> None:
4749
"""

tests/test_delete_file_contents.py

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -277,13 +277,15 @@ async def test_delete_text_file_contents_handler_runtime_error(tmp_path):
277277
from mcp_text_editor.handlers.delete_text_file_contents import (
278278
DeleteTextFileContentsHandler,
279279
)
280+
from mcp_text_editor.service import TextEditorService
280281
from mcp_text_editor.text_editor import TextEditor
281282

282-
class MockEditor(TextEditor):
283-
async def edit_file_contents(self, *args, **kwargs):
284-
raise RuntimeError("Mock error during edit")
283+
class MockService(TextEditorService):
284+
def delete_text_file_contents(self, request):
285+
raise RuntimeError("Mock error during delete")
285286

286-
editor = MockEditor()
287+
editor = TextEditor()
288+
editor.service = MockService()
287289
handler = DeleteTextFileContentsHandler(editor)
288290

289291
test_file = tmp_path / "error_test.txt"
@@ -298,4 +300,4 @@ async def edit_file_contents(self, *args, **kwargs):
298300
}
299301
await handler.run_tool(arguments)
300302

301-
assert "Error processing request: Mock error during edit" in str(exc_info.value)
303+
assert "Error processing request: Mock error during delete" in str(exc_info.value)

0 commit comments

Comments
 (0)