10#include <nlohmann/json_fwd.hpp>
18enum struct HashAlgorithm :
char;
37 virtual bool forceImpureByDefault() {
return false; }
42 virtual std::string
doc() {
return ""; }
61 static const size_t ArityAny = std::numeric_limits<size_t>::max();
73 std::function<void(std::vector<std::string>)> fun;
78 Handler(std::function<
void(std::vector<std::string>)> && fun)
83 Handler(std::function<
void()> && handler)
84 : fun([handler{std::move(handler)}](std::vector<std::string>) { handler(); })
88 Handler(std::function<
void(std::string)> && handler)
89 : fun([handler{std::move(handler)}](std::vector<std::string> ss) {
90 handler(std::move(ss[0]));
95 Handler(std::function<
void(std::string, std::string)> && handler)
96 : fun([handler{std::move(handler)}](std::vector<std::string> ss) {
97 handler(std::move(ss[0]), std::move(ss[1]));
102 Handler(std::vector<std::string> * dest)
103 : fun([dest](std::vector<std::string> ss) { *dest = ss; })
107 Handler(std::string * dest)
108 : fun([dest](std::vector<std::string> ss) { *dest = ss[0]; })
112 Handler(std::optional<std::string> * dest)
113 : fun([dest](std::vector<std::string> ss) { *dest = ss[0]; })
117 Handler(std::filesystem::path * dest)
118 : fun([dest](std::vector<std::string> ss) { *dest = ss[0]; })
122 Handler(std::optional<std::filesystem::path> * dest)
123 : fun([dest](std::vector<std::string> ss) { *dest = ss[0]; })
128 Handler(T * dest,
const T & val)
129 : fun([dest, val](std::vector<std::string> ss) { *dest = val; })
135 : fun([dest](std::vector<std::string> ss) {
142 Handler(std::optional<I> * dest)
143 : fun([dest](std::vector<std::string> ss) {
179 using ptr = std::shared_ptr<Flag>;
181 std::string longName;
182 std::set<std::string> aliases;
184 std::string description;
185 std::string category;
190 std::optional<ExperimentalFeature> experimentalFeature;
211 virtual bool processFlag(Strings::iterator & pos, Strings::iterator
end);
224 bool optional =
false;
263 virtual Strings::iterator rewriteArgs(Strings &
args, Strings::iterator pos)
266 std::set<std::string> hiddenCategories;
276 void addFlag(Flag && flag);
278 void removeFlag(
const std::string & longName);
280 void expectArgs(ExpectedArg && arg)
288 void expectArg(
const std::string & label, std::string * dest,
bool optional =
false)
292 .optional = optional,
300 void expectArg(
const std::string & label, std::filesystem::path * dest,
bool optional =
false)
304 .optional = optional,
312 void expectArgs(
const std::string & label, std::vector<std::string> * dest)
324 virtual nlohmann::json
toJSON();
352 friend class MultiCommand;
361 using Category =
int;
363 static constexpr Category catDefault = 0;
367 virtual Category category() {
return catDefault; }
370using Commands = std::map<std::string, std::function<ref<Command>()>>;
376class MultiCommand :
virtual public Args
381 std::map<Command::Category, std::string> categories;
386 std::optional<std::pair<std::string, ref<Command>>>
command;
388 MultiCommand(std::string_view commandName,
const Commands & commands);
390 bool processFlag(Strings::iterator & pos, Strings::iterator
end)
override;
394 nlohmann::json toJSON()
override;
397 std::string commandName =
"";
400Strings argvToStrings(
int argc,
char * * argv);
403 std::string completion;
404 std::string description;
406 auto operator<=>(
const Completion & other)
const noexcept;
441 virtual void add(std::string completion, std::string description =
"") = 0;
444Strings parseShebangContent(std::string_view
s);
virtual void setType(Type type)=0
virtual void add(std::string completion, std::string description="")=0
Type
Definition args.hh:425
virtual Path getCommandBaseDir() const
Get the base directory for the command.
Definition args.cc:355
MultiCommand * parent
Definition args.hh:337
virtual bool processFlag(Strings::iterator &pos, Strings::iterator end)
Definition args.cc:366
std::list< ExpectedArg > expectedArgs
Definition args.hh:240
std::function< CompleterFun > CompleterClosure
Definition args.hh:167
std::list< ExpectedArg > processedArgs
Definition args.hh:252
virtual std::string description()
Definition args.hh:35
RootArgs & getRoot()
Definition args.cc:64
void expectArgs(const std::string &label, std::vector< std::string > *dest)
Definition args.hh:312
virtual std::string doc()
Definition args.hh:42
void expectArg(const std::string &label, std::filesystem::path *dest, bool optional=false)
Definition args.hh:300
void(AddCompletions &, size_t, std::string_view) CompleterFun
Definition args.hh:159
virtual void initialFlagsProcessed()
Definition args.hh:272
std::map< char, Flag::ptr > shortFlags
Definition args.hh:205
virtual bool processArgs(const Strings &args, bool finish)
Definition args.cc:441
std::map< std::string, Flag::ptr > longFlags
Definition args.hh:199
void expectArg(const std::string &label, std::string *dest, bool optional=false)
Definition args.hh:288
static const size_t ArityAny
Definition args.hh:61
bool processFlag(Strings::iterator &pos, Strings::iterator end) override
Definition args.cc:615
std::optional< std::pair< std::string, ref< Command > > > command
Definition args.hh:386
bool processArgs(const Strings &args, bool finish) override
Definition args.cc:622
PosIdx end
Definition lexer.l:5814
char
Definition lexer.l:3739
return s
Definition lexer.l:459
int
Definition lexer.l:2928
ValueType type
Definition lexer.l:7098
virtual nlohmann::json toJSON()=0
std::optional< ExperimentalFeature > experimentalFeature
Definition lexer.l:1937
std::vector< Expr * > args
Definition lexer.l:6126
HashFormat
Enumeration representing the hash formats.
Definition hash.hh:29
std::string Path
Definition types.hh:22
N string2IntWithUnitPrefix(std::string_view s)
Definition util.hh:88