ChainCLI
A modern C++20 command-line interface library
Loading...
Searching...
No Matches
docformatter.h
1/*
2 * Copyright 2025 Dominik Czekai
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17#pragma once
18#include <format>
19#include <sstream>
20
21#include "cli_config.h"
22#include "commands/command.h"
23#include "commands/flag_argument.h"
24#include "commands/option_argument.h"
25#include "commands/positional_argument.h"
26
27namespace cli::commands::docwriting
28{
29
32template <typename T> class AbstractArgDocFormatter
33{
34public:
35 virtual ~AbstractArgDocFormatter() = default;
36
43 virtual std::string generateArgDocString(const T &argument,
44 const cli::CliConfig &configuration) = 0;
45
51 virtual std::string generateOptionsDocString(const T &argument,
52 const cli::CliConfig &configuration) = 0;
53};
54
57{
58public:
59 std::string generateArgDocString(const FlagArgument &argument,
60 const cli::CliConfig &configuration) override;
61 std::string generateOptionsDocString(const FlagArgument &argument,
62 const cli::CliConfig &configuration) override;
63};
64
66class DefaultOptionFormatter : public AbstractArgDocFormatter<OptionArgumentBase>
67{
68public:
69 std::string generateArgDocString(const OptionArgumentBase &argument,
70 const cli::CliConfig &configuration) override;
71 std::string generateOptionsDocString(const OptionArgumentBase &argument,
72 const cli::CliConfig &configuration) override;
73};
74
76class DefaultPositionalFormatter : public AbstractArgDocFormatter<PositionalArgumentBase>
77{
78public:
79 std::string generateArgDocString(const PositionalArgumentBase &argument,
80 const cli::CliConfig &configuration) override;
81 std::string generateOptionsDocString(const PositionalArgumentBase &argument,
82 const cli::CliConfig &configuration) override;
83};
84
87{
88public:
89 virtual ~AbstractCommandFormatter() = default;
90
97 virtual std::string generateLongDocString(const Command &command,
98 std::string_view fullCommandPath,
99 const DocWriter &writer,
100 const cli::CliConfig &configuration) = 0;
101
108 virtual std::string generateShortDocString(const Command &command,
109 std::string_view fullCommandPath,
110 const DocWriter &writer,
111 const cli::CliConfig &configuration) = 0;
112};
113
116{
117public:
118 std::string generateLongDocString(const Command &command, std::string_view fullCommandPath,
119 const DocWriter &writer,
120 const cli::CliConfig &configuration) override;
121
122 std::string generateShortDocString(const Command &command, std::string_view fullCommandPath,
123 const DocWriter &writer,
124 const cli::CliConfig &configuration) override;
125};
126
129{
130public:
131 virtual ~AbstractCliAppDocFormatter() = default;
132
138 virtual std::string generateAppDocString(
139 const cli::CliConfig &configuration,
140 const std::vector<const cli::commands::Command *> &commands) = 0;
141
145 virtual std::string generateAppVersionString(const cli::CliConfig &configuration) = 0;
146
153 virtual std::string generateCommandDocString(const Command &command,
154 const cli::CliConfig &configuration) = 0;
155};
156
159{
160public:
161 std::string generateAppDocString(
162 const cli::CliConfig &configuration,
163 const std::vector<const cli::commands::Command *> &commands) override;
164
165 std::string generateCommandDocString(
166 const Command &command,
167 [[maybe_unused]] const cli::CliConfig &configuration) override;
168
169 std::string generateAppVersionString(const cli::CliConfig &configuration) override;
170};
171
172} // namespace cli::commands::docwriting
Represents a command in the CLI application.
Definition command.h:36
Represents a flag argument in the CLI.
Definition flag_argument.h:31
Untemplated base class for option arguments in the CLI. Used to store all option arguments in a singl...
Definition option_argument.h:33
Untemplated Base class for positional arguments in the CLI. Used to store all positional arguments in...
Definition positional_argument.h:34
Abstract base class for argument documentation formatters.
Definition docformatter.h:33
virtual std::string generateArgDocString(const T &argument, const cli::CliConfig &configuration)=0
Generate the argument documentation string.
virtual std::string generateOptionsDocString(const T &argument, const cli::CliConfig &configuration)=0
Generate the options documentation string.
Abstract base class for CLI application documentation formatters.
Definition docformatter.h:129
virtual std::string generateAppDocString(const cli::CliConfig &configuration, const std::vector< const cli::commands::Command * > &commands)=0
Generate the application documentation string that shows all the available commands.
virtual std::string generateAppVersionString(const cli::CliConfig &configuration)=0
Generate the application version string that is shown with the –version flag.
virtual std::string generateCommandDocString(const Command &command, const cli::CliConfig &configuration)=0
Generate the documentation string for a specific command.
Abstract base class for command documentation formatters.
Definition docformatter.h:87
virtual std::string generateLongDocString(const Command &command, std::string_view fullCommandPath, const DocWriter &writer, const cli::CliConfig &configuration)=0
Generate the command documentation string.
virtual std::string generateShortDocString(const Command &command, std::string_view fullCommandPath, const DocWriter &writer, const cli::CliConfig &configuration)=0
Generate the short documentation string.
Default formatter for CLI application documentation.
Definition docformatter.h:159
std::string generateAppDocString(const cli::CliConfig &configuration, const std::vector< const cli::commands::Command * > &commands) override
Generate the application documentation string that shows all the available commands.
Definition docformatter.cpp:197
std::string generateAppVersionString(const cli::CliConfig &configuration) override
Generate the application version string that is shown with the –version flag.
Definition docformatter.cpp:229
std::string generateCommandDocString(const Command &command, const cli::CliConfig &configuration) override
Generate the documentation string for a specific command.
Definition docformatter.cpp:223
Default formatter for commands.
Definition docformatter.h:116
std::string generateLongDocString(const Command &command, std::string_view fullCommandPath, const DocWriter &writer, const cli::CliConfig &configuration) override
Generate the command documentation string.
Definition docformatter.cpp:156
std::string generateShortDocString(const Command &command, std::string_view fullCommandPath, const DocWriter &writer, const cli::CliConfig &configuration) override
Generate the short documentation string.
Definition docformatter.cpp:181
Default formatter for flag arguments.
Definition docformatter.h:57
std::string generateArgDocString(const FlagArgument &argument, const cli::CliConfig &configuration) override
Generate the argument documentation string.
Definition docformatter.cpp:38
std::string generateOptionsDocString(const FlagArgument &argument, const cli::CliConfig &configuration) override
Generate the options documentation string.
Definition docformatter.cpp:52
Default formatter for option arguments.
Definition docformatter.h:67
std::string generateArgDocString(const OptionArgumentBase &argument, const cli::CliConfig &configuration) override
Generate the argument documentation string.
Definition docformatter.cpp:65
std::string generateOptionsDocString(const OptionArgumentBase &argument, const cli::CliConfig &configuration) override
Generate the options documentation string.
Definition docformatter.cpp:82
Default formatter for positional arguments.
Definition docformatter.h:77
std::string generateOptionsDocString(const PositionalArgumentBase &argument, const cli::CliConfig &configuration) override
Generate the options documentation string.
Definition docformatter.cpp:112
std::string generateArgDocString(const PositionalArgumentBase &argument, const cli::CliConfig &configuration) override
Generate the argument documentation string.
Definition docformatter.cpp:98
Documentation writer for CLI commands. Consists of formatters for commands and arguments.
Definition docwriting.h:34
Holds the configuration for the CLI application.
Definition cli_config.h:24