5#include "absl/strings/str_cat.h"
7#include "absl/strings/str_join.h"
15namespace fs = std::filesystem;
24 return absl::FailedPreconditionError(
"Project context not available.");
27 std::string query_type = parser.
GetString(
"query").value();
29 if (query_type ==
"info") {
31 }
else if (query_type ==
"files") {
34 }
else if (query_type ==
"symbols") {
36 return absl::FailedPreconditionError(
"Asar wrapper not available for symbols query.");
40 return absl::InvalidArgumentError(
41 absl::StrCat(
"Unknown query type: ", query_type));
55 return absl::OkStatus();
61 if (!fs::exists(abs_path)) {
62 return absl::NotFoundError(absl::StrCat(
"Path not found: ", path));
66 for (
const auto& entry : fs::directory_iterator(abs_path)) {
68 formatter.
AddField(
"name", entry.path().filename().string());
69 formatter.
AddField(
"type", entry.is_directory() ?
"directory" :
"file");
74 return absl::OkStatus();
79 if (symbols.empty()) {
80 return absl::NotFound(
"No symbols loaded. Load symbols via the Assemble menu or ensure the build script generates them.");
84 for (
const auto& [
name, symbol] : symbols) {
86 formatter.
AddField(
"name", symbol.name);
87 formatter.
AddField(
"address", absl::StrFormat(
"$%06X", symbol.address));
91 return absl::OkStatus();
The Rom class is used to load, save, and modify Rom data. This is a generic SNES ROM container and do...
Utility for parsing common CLI argument patterns.
std::optional< std::string > GetString(const std::string &name) const
Parse a named argument (e.g., –format=json or –format json)
absl::Status RequireArgs(const std::vector< std::string > &required) const
Validate that required arguments are present.
core::AsarWrapper * asar_wrapper_
project::YazeProject * project_
std::map< std::string, AsarSymbol > GetSymbolTable() const
std::string git_repository
std::string GetRelativePath(const std::string &absolute_path) const
std::string GetAbsolutePath(const std::string &relative_path) const
std::string last_build_hash
std::string symbols_filename