forked from coder/claudecode.nvim
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathsave_document.lua
More file actions
88 lines (80 loc) · 2 KB
/
save_document.lua
File metadata and controls
88 lines (80 loc) · 2 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
--- Tool implementation for saving a document.
local schema = {
description = "Save a document with unsaved changes",
inputSchema = {
type = "object",
properties = {
filePath = {
type = "string",
description = "Path to the file to save",
},
},
required = { "filePath" },
additionalProperties = false,
["$schema"] = "http://json-schema.org/draft-07/schema#",
},
}
---Handles the saveDocument tool invocation.
---Saves the specified file (buffer).
---@param params table The input parameters for the tool
---@return table MCP-compliant response with save status
local function handler(params)
if not params.filePath then
error({
code = -32602,
message = "Invalid params",
data = "Missing filePath parameter",
})
end
local bufnr = vim.fn.bufnr(params.filePath)
if bufnr == -1 then
-- Return failure when document not open, matching VS Code behavior
return {
content = {
{
type = "text",
text = vim.json.encode({
success = false,
message = "Document not open: " .. params.filePath,
}, { indent = 2 }),
},
},
}
end
local success, err = pcall(vim.api.nvim_buf_call, bufnr, function()
vim.cmd("write")
end)
if not success then
return {
content = {
{
type = "text",
text = vim.json.encode({
success = false,
message = "Failed to save file: " .. tostring(err),
filePath = params.filePath,
}, { indent = 2 }),
},
},
}
end
-- Return MCP-compliant format with JSON-stringified success result
return {
content = {
{
type = "text",
text = vim.json.encode({
success = true,
filePath = params.filePath,
saved = true,
message = "Document saved successfully",
}, { indent = 2 }),
},
},
}
end
return {
name = "saveDocument",
schema = schema,
handler = handler,
}