Packages

fnord

0.9.17

AI code archaeology

Current section

Files

Jump to
fnord lib cmd summary.ex
Raw

lib/cmd/summary.ex

defmodule Cmd.Summary do
@behaviour Cmd
@impl Cmd
def requires_project?(), do: true
@impl Cmd
def spec do
[
summary: [
name: "summary",
about: "Retrieve the AI-generated file summary used when indexing the file",
options: [
project: Cmd.project_arg(),
file: [
value_name: "FILE",
long: "--file",
short: "-f",
help: "File to summarize",
required: true
]
]
]
]
end
@impl Cmd
def run(opts, _subcommands, _unknown) do
# Make sure that the file path is an absolute path
file_path = Path.absname(opts.file)
with {:ok, project} <- Store.get_project(),
{:ok, entry} <- get_file(project, file_path),
{:ok, summary} <- Store.Project.Entry.read_summary(entry),
{:ok, outline} <- Store.Project.Entry.read_outline(entry) do
UI.puts("# File: `#{file_path}`")
UI.puts("- Store location: `#{entry.store_path}`")
UI.puts("----------")
UI.puts("# Summary")
UI.puts(summary)
UI.puts("----------")
UI.puts("# Outline")
UI.puts("```")
UI.puts(outline)
UI.puts("```")
end
end
defp get_file(project, file_path) do
entry = Store.Project.Entry.new_from_file_path(project, file_path)
if Store.Project.Entry.exists_in_store?(entry) do
{:ok, entry}
else
{:error, :entry_not_found}
end
end
end