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
89
90
91
92
93
94
95
96
|
# File 'lib/klee/mcp/tools/check_naming_consistency.rb', line 46
def call(patterns:, conventions: {}, threshold: 6, ignore: [], server_context: nil)
validator = Klee::MCP::PathValidator.new
validator.validate!(patterns)
codebase = Klee.scan(*patterns, ignore: ignore, threshold: 1)
all_methods = codebase.concepts.flat_map { |_, locs| locs[:methods].to_a }.uniq
prefixes = conventions["prefixes"] || conventions[:prefixes] || []
suffixes = conventions["suffixes"] || conventions[:suffixes] || []
conforming = {}
unusual = []
prefixes.each do |prefix|
matched = all_methods.select { |m| m.start_with?(prefix) }
conforming["#{prefix}*"] = matched.sort if matched.any?
end
suffixes.each do |suffix|
matched = all_methods.select { |m| m.end_with?(suffix) }
conforming["*#{suffix}"] = matched.sort if matched.any?
end
conforming_methods = conforming.values.flatten.uniq
non_conforming = all_methods - conforming_methods
non_conforming.each do |method|
suggestion = find_similar(method, conforming_methods, threshold)
unusual << if suggestion
{
method: method,
suggestion: suggestion[:name],
similarity: suggestion[:distance]
}
else
{method: method, suggestion: nil, similarity: nil}
end
end
unusual.sort_by! { |u| u[:similarity] || Float::INFINITY }
result = {
conforming: conforming,
unusual: unusual.first(50)
}
::MCP::Tool::Response.new([{
type: "text",
text: JSON.pretty_generate(result)
}])
end
|