diff --git a/Source/cmCMakePresetsGraph.cxx b/Source/cmCMakePresetsGraph.cxx index 3fd9d7ad47..9a4930ce9e 100644 --- a/Source/cmCMakePresetsGraph.cxx +++ b/Source/cmCMakePresetsGraph.cxx @@ -61,6 +61,8 @@ using ImmediateMacroExpander = cmCMakePresetsGraphInternal::ImmediateMacroExpander; using cmCMakePresetsGraphInternal::ExpandMacros; +bool gSkipNewLine = true; + void InheritString(std::string& child, std::string const& parent) { if (child.empty()) { @@ -504,15 +506,6 @@ ExpandMacroResult VisitEnv(std::string& value, CycleStatus& status, return ExpandMacroResult::Ok; } -void printPrecedingNewline() -{ - static bool skipNewLine = true; - if (!skipNewLine) { - std::cout << '\n'; - } - skipNewLine = false; -} - void PrintPresets( std::vector const& presets) { @@ -529,18 +522,52 @@ void PrintPresets( auto longestLength = (*longestPresetName)->Name.length(); for (auto const* preset : presets) { - auto name = cmStrCat(" \"", preset->Name, '"'); - auto const& description = preset->DisplayName; - if (!description.empty()) { + std::string name = cmStrCat(" \"", preset->Name, '"'); + if (!preset->DisplayName.empty()) { int const width = static_cast(longestLength + name.length() - preset->Name.length()); std::cout << std::left << std::setw(width) << name << " - " - << description << '\n'; + << preset->DisplayName << '\n'; } else { std::cout << name << '\n'; } } } + +struct AlwaysTrue +{ + template + constexpr bool operator()(T const&) const noexcept + { + return true; + } +}; + +template +void PrintPresetList( + cmCMakePresetsGraph const* const graph, + std::map> + cmCMakePresetsGraph::*data, + std::vector cmCMakePresetsGraph::*index, Filter filter = {}) +{ + std::vector presets; + presets.reserve((graph->*index).size()); + for (auto const& p : graph->*index) { + auto const& preset = (graph->*data).at(p); + if (!preset.Unexpanded.Hidden && preset.Expanded && + preset.Expanded->ConditionResult && filter(preset.Unexpanded)) { + presets.push_back( + static_cast(&preset.Unexpanded)); + } + } + + if (!presets.empty()) { + std::cout << (gSkipNewLine ? "" : "\n") << "Available " + << PresetType::kind() << " presets:\n\n"; + gSkipNewLine = false; + PrintPresets(presets); + } +} } template @@ -945,11 +972,7 @@ bool cmCMakePresetsGraph::BuildPreset::VisitPresetInherit( bool cmCMakePresetsGraph::BuildPreset::VisitPresetAfterInherit( int /* version */, cmJSONState* /*stat*/) { - auto& preset = *this; - if (!preset.Hidden && preset.ConfigurePreset.empty()) { - return false; - } - return true; + return this->Hidden || !this->ConfigurePreset.empty(); } bool cmCMakePresetsGraph::TestPreset::VisitPresetInherit( @@ -1059,11 +1082,7 @@ bool cmCMakePresetsGraph::TestPreset::VisitPresetInherit( bool cmCMakePresetsGraph::TestPreset::VisitPresetAfterInherit( int /* version */, cmJSONState* /*state*/) { - auto& preset = *this; - if (!preset.Hidden && preset.ConfigurePreset.empty()) { - return false; - } - return true; + return this->Hidden || !this->ConfigurePreset.empty(); } bool cmCMakePresetsGraph::PackagePreset::VisitPresetInherit( @@ -1092,11 +1111,7 @@ bool cmCMakePresetsGraph::PackagePreset::VisitPresetInherit( bool cmCMakePresetsGraph::PackagePreset::VisitPresetAfterInherit( int /* version */, cmJSONState* /*state*/) { - auto& preset = *this; - if (!preset.Hidden && preset.ConfigurePreset.empty()) { - return false; - } - return true; + return this->Hidden || !this->ConfigurePreset.empty(); } bool cmCMakePresetsGraph::WorkflowPreset::VisitPresetInherit( @@ -1380,109 +1395,49 @@ void cmCMakePresetsGraph::ClearPresets() void cmCMakePresetsGraph::PrintConfigurePresetList() const { - PrintConfigurePresetList([](ConfigurePreset const&) { return true; }); + PrintPresetList(this, + &cmCMakePresetsGraph::ConfigurePresets, + &cmCMakePresetsGraph::ConfigurePresetOrder); } void cmCMakePresetsGraph::PrintConfigurePresetList( std::function const& filter) const { - std::vector presets; - for (auto const& p : this->ConfigurePresetOrder) { - auto const& preset = this->ConfigurePresets.at(p); - if (!preset.Unexpanded.Hidden && preset.Expanded && - preset.Expanded->ConditionResult && filter(preset.Unexpanded)) { - presets.push_back( - static_cast(&preset.Unexpanded)); - } - } - - if (!presets.empty()) { - printPrecedingNewline(); - std::cout << "Available configure presets:\n\n"; - PrintPresets(presets); - } + PrintPresetList( + this, &cmCMakePresetsGraph::ConfigurePresets, + &cmCMakePresetsGraph::ConfigurePresetOrder, filter); } void cmCMakePresetsGraph::PrintBuildPresetList() const { - std::vector presets; - for (auto const& p : this->BuildPresetOrder) { - auto const& preset = this->BuildPresets.at(p); - if (!preset.Unexpanded.Hidden && preset.Expanded && - preset.Expanded->ConditionResult) { - presets.push_back( - static_cast(&preset.Unexpanded)); - } - } - - if (!presets.empty()) { - printPrecedingNewline(); - std::cout << "Available build presets:\n\n"; - PrintPresets(presets); - } + PrintPresetList(this, &cmCMakePresetsGraph::BuildPresets, + &cmCMakePresetsGraph::BuildPresetOrder); } void cmCMakePresetsGraph::PrintTestPresetList() const { - std::vector presets; - for (auto const& p : this->TestPresetOrder) { - auto const& preset = this->TestPresets.at(p); - if (!preset.Unexpanded.Hidden && preset.Expanded && - preset.Expanded->ConditionResult) { - presets.push_back( - static_cast(&preset.Unexpanded)); - } - } - - if (!presets.empty()) { - printPrecedingNewline(); - std::cout << "Available test presets:\n\n"; - PrintPresets(presets); - } + PrintPresetList(this, &cmCMakePresetsGraph::TestPresets, + &cmCMakePresetsGraph::TestPresetOrder); } void cmCMakePresetsGraph::PrintPackagePresetList() const { - this->PrintPackagePresetList([](PackagePreset const&) { return true; }); + PrintPresetList(this, &cmCMakePresetsGraph::PackagePresets, + &cmCMakePresetsGraph::PackagePresetOrder); } void cmCMakePresetsGraph::PrintPackagePresetList( std::function const& filter) const { - std::vector presets; - for (auto const& p : this->PackagePresetOrder) { - auto const& preset = this->PackagePresets.at(p); - if (!preset.Unexpanded.Hidden && preset.Expanded && - preset.Expanded->ConditionResult && filter(preset.Unexpanded)) { - presets.push_back( - static_cast(&preset.Unexpanded)); - } - } - - if (!presets.empty()) { - printPrecedingNewline(); - std::cout << "Available package presets:\n\n"; - PrintPresets(presets); - } + PrintPresetList(this, &cmCMakePresetsGraph::PackagePresets, + &cmCMakePresetsGraph::PackagePresetOrder, + filter); } void cmCMakePresetsGraph::PrintWorkflowPresetList() const { - std::vector presets; - for (auto const& p : this->WorkflowPresetOrder) { - auto const& preset = this->WorkflowPresets.at(p); - if (!preset.Unexpanded.Hidden && preset.Expanded && - preset.Expanded->ConditionResult) { - presets.push_back( - static_cast(&preset.Unexpanded)); - } - } - - if (!presets.empty()) { - printPrecedingNewline(); - std::cout << "Available workflow presets:\n\n"; - PrintPresets(presets); - } + PrintPresetList(this, &cmCMakePresetsGraph::WorkflowPresets, + &cmCMakePresetsGraph::WorkflowPresetOrder); } void cmCMakePresetsGraph::PrintAllPresets() const diff --git a/Source/cmCMakePresetsGraph.h b/Source/cmCMakePresetsGraph.h index bf7451e0f2..779beeff18 100644 --- a/Source/cmCMakePresetsGraph.h +++ b/Source/cmCMakePresetsGraph.h @@ -142,6 +142,8 @@ public: bool VisitPresetInherit(Preset const& parent) override; bool VisitPresetBeforeInherit() override; bool VisitPresetAfterInherit(int version, cmJSONState* state) override; + + static char const* kind() { return "configure"; } }; class BuildPreset : public Preset @@ -174,6 +176,8 @@ public: bool VisitPresetInherit(Preset const& parent) override; bool VisitPresetAfterInherit(int /* version */, cmJSONState* /*state*/) override; + + static char const* kind() { return "build"; } }; class TestPreset : public Preset @@ -309,6 +313,8 @@ public: bool VisitPresetInherit(Preset const& parent) override; bool VisitPresetAfterInherit(int /* version */, cmJSONState* /*state*/) override; + + static char const* kind() { return "test"; } }; class PackagePreset : public Preset @@ -346,6 +352,8 @@ public: bool VisitPresetInherit(Preset const& parent) override; bool VisitPresetAfterInherit(int /* version */, cmJSONState* /*state*/) override; + + static char const* kind() { return "package"; } }; class WorkflowPreset : public Preset @@ -383,6 +391,8 @@ public: bool VisitPresetInherit(Preset const& parent) override; bool VisitPresetAfterInherit(int /* version */, cmJSONState* /* state */) override; + + static char const* kind() { return "workflow"; } }; template