def call(query:, kind: nil, match_mode: nil, limit: nil, offset: nil)
declarations = case match_mode
when nil, "fuzzy"
@graph.fuzzy_search(query)
when "exact"
@graph.search(query)
else
return response(
Error.new(
"invalid_match_mode",
"Invalid match_mode '#{match_mode}'",
'Use "fuzzy" or "exact"',
),
)
end
if kind
declarations = declarations.lazy.select { |declaration| declaration_kind(declaration).casecmp?(kind) }
end
page, total = paginate(declarations, offset, limit, 100)
results = page.map do |declaration|
{
name: declaration.name,
kind: declaration_kind(declaration),
locations: declaration.definitions.map do |definition|
display_location(definition.location)
end,
}
end
response(results: results, total: total)
end