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
|
# File 'lib/coverband/mcp/tools/get_file_coverage.rb', line 20
def self.call(filename:, server_context:, **)
store = Coverband.configuration.store
report = Coverband::Reporters::JSONReport.new(store, {
filename: filename,
line_coverage: true
})
data = JSON.parse(report.report)
if data["files"].nil? || data["files"].empty?
return ::MCP::Tool::Response.new([{
type: "text",
text: "No coverage data found for file: #{filename}"
}])
end
matching_files = data["files"].select { |path, _| path.include?(filename) }
if matching_files.empty?
return ::MCP::Tool::Response.new([{
type: "text",
text: "No coverage data found for file matching: #{filename}"
}])
end
result = matching_files.transform_values do |file_data|
{
filename: file_data["filename"],
covered_percent: file_data["covered_percent"],
lines_of_code: file_data["lines_of_code"],
lines_covered: file_data["lines_covered"],
lines_missed: file_data["lines_missed"],
runtime_percentage: file_data["runtime_percentage"],
never_loaded: file_data["never_loaded"],
first_updated_at: file_data["first_updated_at"],
last_updated_at: file_data["last_updated_at"],
coverage: file_data["coverage"]
}
end
::MCP::Tool::Response.new([{
type: "text",
text: JSON.pretty_generate(result)
}])
rescue => e
::MCP::Tool::Response.new([{
type: "text",
text: "Error getting file coverage: #{e.message}"
}])
end
|