#include #include #include #include #include #include #include #include #include void Clippy::Run(const std::vector& args) { if (auto result = TryExecuteClippyCommand(args); result) { result->Execute(); return; } if (auto result = GetScriptTarget(args); result) { result->Execute(); return; } std::cout << rang::bg::red << rang::style::bold << "Unsupported parameters { "; for (size_t i = 1; i < args.size(); ++i) { std::cout << args[i] << (i + 1 == args.size() ? "" : ",") << " "; } std::cout << "}" << rang::bg::reset << rang::style::reset << std::endl; } Clippy::TargetPtr Clippy::TryExecuteClippyCommand( const std::vector& args) { using namespace utils::parametres; using namespace clippy::targets; if (CheckPatternParametres(args, Parameter::Skip, "help", Parameter::Anything)) { std::cout << "Hello I'm clippy" << std::endl; std::cout << "Parametres: { "; for (size_t i = 0; i < args.size(); ++i) { std::cout << args[i] << (i + 1 == args.size() ? "" : ",") << " "; } std::cout << "}" << std::endl; return std::make_unique(); } if (CheckPatternParametres(args, Parameter::Skip, "cfg", Parameter::Anything)) { LoadProjects(); auto p = projects_->GetCurrentProject(); if (p.has_value()) { return std::make_unique(p->GetConfig()); } else { return std::make_unique(projects_.value()); } } if (CheckPatternParametres(args, Parameter::Skip, "crt", Parameter::Anything)) { LoadProjects(); return std::make_unique(projects_.value()); } return nullptr; } Clippy::TargetPtr Clippy::GetScriptTarget( const std::vector& args) { LoadProjects(); auto p = projects_->GetCurrentProject(); if (!p.has_value() || args.size() < 2) { return nullptr; } auto cfg = p->GetConfig(); auto result = cfg.GetTarget(args[1]); if (result && enable_aliases_) { result->PushFront("shopt -s expand_aliases"); } return result; } void Clippy::LoadProjects() { if (!projects_.has_value()) { projects_.emplace(utils::GetProjectDirectory() / "projects"); } }