diff options
Diffstat (limited to 'src/buildtool/main/describe.cpp')
-rw-r--r-- | src/buildtool/main/describe.cpp | 30 |
1 files changed, 28 insertions, 2 deletions
diff --git a/src/buildtool/main/describe.cpp b/src/buildtool/main/describe.cpp index 292ea7b9..1fcdf44e 100644 --- a/src/buildtool/main/describe.cpp +++ b/src/buildtool/main/describe.cpp @@ -52,7 +52,8 @@ void PrintFields(nlohmann::json const& fields, } } -void PrettyPrintRule(nlohmann::json const& rdesc) { +void PrettyPrintRule(nlohmann::json const& rdesc, + BuildMaps::Base::EntityName const& rule_name) { auto doc = rdesc.find("doc"); if (doc != rdesc.end()) { PrintDoc(*doc, " | "); @@ -72,6 +73,31 @@ void PrettyPrintRule(nlohmann::json const& rdesc) { std::cout << " Target fields\n"; PrintFields(*target_fields, field_doc, " - ", " | "); } + auto implicit_targets = rdesc.find("implicit"); + if (implicit_targets != rdesc.end()) { + for (auto const& [key, value] : implicit_targets->items()) { + std::cout << " - implict dependency\n"; // + auto doc = field_doc.find(key); + if (doc != field_doc.end()) { + PrintDoc(*doc, " | "); + } + for (auto const& entry : value) { + auto resolved_entry = BuildMaps::Base::ParseEntityNameFromJson( + entry, + rule_name, + [&entry, &rule_name](std::string const& parse_err) { + Logger::Log(LogLevel::Warning, + "Failed to resolve {} relative to {}:\n{}", + entry.dump(), + rule_name.ToString(), + parse_err); + }); + if (resolved_entry) { + std::cout << " - " << resolved_entry->ToString() << "\n"; + } + } + } + } auto config_fields = rdesc.find("config_fields"); if (config_fields != rdesc.end() and (not config_fields->empty())) { std::cout << " Config fields\n"; @@ -224,7 +250,7 @@ auto DescribeUserDefinedRule(BuildMaps::Base::EntityName const& rule_name, PrintRuleAsOrderedJson(*ruledesc_it, rule_name.ToJson()); return kExitSuccess; } - PrettyPrintRule(*ruledesc_it); + PrettyPrintRule(*ruledesc_it, rule_name); return kExitSuccess; } |