mirror of
https://github.com/fish-shell/fish-shell
synced 2025-01-04 17:18:45 +00:00
14d2a6d8ff
Let's hope this doesn't causes build failures for e.g. musl: I just know it's good on macOS and our Linux CI. It's been a long time. One fix this brings, is I discovered we #include assert.h or cassert in a lot of places. If those ever happen to be in a file that doesn't include common.h, or we are before common.h gets included, we're unawaringly working with the system 'assert' macro again, which may get disabled for debug builds or at least has different behavior on crash. We undef 'assert' and redefine it in common.h. Those were all eliminated, except in one catch-22 spot for maybe.h: it can't include common.h. A fix might be to make a fish_assert.h that *usually* common.h exports.
109 lines
4.4 KiB
C++
109 lines
4.4 KiB
C++
// Prototypes for functions for executing builtin functions.
|
|
#ifndef FISH_BUILTIN_H
|
|
#define FISH_BUILTIN_H
|
|
|
|
#include <vector>
|
|
|
|
#include "common.h"
|
|
#include "complete.h"
|
|
#include "maybe.h"
|
|
|
|
class parser_t;
|
|
class proc_status_t;
|
|
class output_stream_t;
|
|
struct io_streams_t;
|
|
using completion_list_t = std::vector<completion_t>;
|
|
|
|
/// Data structure to describe a builtin.
|
|
struct builtin_data_t {
|
|
// Name of the builtin.
|
|
const wchar_t *name;
|
|
// Function pointer to the builtin implementation.
|
|
maybe_t<int> (*func)(parser_t &parser, io_streams_t &streams, const wchar_t **argv);
|
|
// Description of what the builtin does.
|
|
const wchar_t *desc;
|
|
};
|
|
|
|
/// The default prompt for the read command.
|
|
#define DEFAULT_READ_PROMPT L"set_color green; echo -n read; set_color normal; echo -n \"> \""
|
|
|
|
/// Error message on missing argument.
|
|
#define BUILTIN_ERR_MISSING _(L"%ls: %ls: option requires an argument\n")
|
|
|
|
/// Error message on missing man page.
|
|
#define BUILTIN_ERR_MISSING_HELP \
|
|
_(L"fish: %ls: missing man page\nDocumentation may not be installed.\n`help %ls` will " \
|
|
L"show an online version\n")
|
|
|
|
/// Error message on invalid combination of options.
|
|
#define BUILTIN_ERR_COMBO _(L"%ls: invalid option combination\n")
|
|
|
|
/// Error message on invalid combination of options.
|
|
#define BUILTIN_ERR_COMBO2 _(L"%ls: invalid option combination, %ls\n")
|
|
#define BUILTIN_ERR_COMBO2_EXCLUSIVE _(L"%ls: %ls %ls: options cannot be used together\n")
|
|
|
|
/// Error message on multiple scope levels for variables.
|
|
#define BUILTIN_ERR_GLOCAL _(L"%ls: scope can be only one of: universal function global local\n")
|
|
|
|
/// Error message for specifying both export and unexport to set/read.
|
|
#define BUILTIN_ERR_EXPUNEXP _(L"%ls: cannot both export and unexport\n")
|
|
|
|
/// Error message for unknown switch.
|
|
#define BUILTIN_ERR_UNKNOWN _(L"%ls: %ls: unknown option\n")
|
|
|
|
/// Error message for unexpected args.
|
|
#define BUILTIN_ERR_ARG_COUNT0 _(L"%ls: missing argument\n")
|
|
#define BUILTIN_ERR_ARG_COUNT1 _(L"%ls: expected %d arguments; got %d\n")
|
|
#define BUILTIN_ERR_ARG_COUNT2 _(L"%ls: %ls: expected %d arguments; got %d\n")
|
|
#define BUILTIN_ERR_MIN_ARG_COUNT1 _(L"%ls: expected >= %d arguments; got %d\n")
|
|
#define BUILTIN_ERR_MAX_ARG_COUNT1 _(L"%ls: expected <= %d arguments; got %d\n")
|
|
|
|
/// Error message for invalid variable name.
|
|
#define BUILTIN_ERR_VARNAME _(L"%ls: %ls: invalid variable name. See `help identifiers`\n")
|
|
|
|
/// Error message for invalid bind mode name.
|
|
#define BUILTIN_ERR_BIND_MODE _(L"%ls: %ls: invalid mode name. See `help identifiers`\n")
|
|
|
|
/// Error message when too many arguments are supplied to a builtin.
|
|
#define BUILTIN_ERR_TOO_MANY_ARGUMENTS _(L"%ls: too many arguments\n")
|
|
|
|
/// Error message when integer expected
|
|
#define BUILTIN_ERR_NOT_NUMBER _(L"%ls: %ls: invalid integer\n")
|
|
|
|
/// Command that requires a subcommand was invoked without a recognized subcommand.
|
|
#define BUILTIN_ERR_MISSING_SUBCMD _(L"%ls: missing subcommand\n")
|
|
#define BUILTIN_ERR_INVALID_SUBCMD _(L"%ls: %ls: invalid subcommand\n")
|
|
|
|
/// The send stuff to foreground message.
|
|
#define FG_MSG _(L"Send job %d (%ls) to foreground\n")
|
|
|
|
bool builtin_exists(const wcstring &cmd);
|
|
|
|
proc_status_t builtin_run(parser_t &parser, const wcstring_list_t &argv, io_streams_t &streams);
|
|
|
|
wcstring_list_t builtin_get_names();
|
|
void builtin_get_names(completion_list_t *list);
|
|
const wchar_t *builtin_get_desc(const wcstring &name);
|
|
|
|
wcstring builtin_help_get(parser_t &parser, const wchar_t *cmd);
|
|
|
|
void builtin_print_help(parser_t &parser, const io_streams_t &streams, const wchar_t *name,
|
|
wcstring *error_message = nullptr);
|
|
int builtin_count_args(const wchar_t *const *argv);
|
|
|
|
void builtin_unknown_option(parser_t &parser, io_streams_t &streams, const wchar_t *cmd,
|
|
const wchar_t *opt, bool print_hints = true);
|
|
|
|
void builtin_missing_argument(parser_t &parser, io_streams_t &streams, const wchar_t *cmd,
|
|
const wchar_t *opt, bool print_hints = true);
|
|
|
|
void builtin_print_error_trailer(parser_t &parser, output_stream_t &b, const wchar_t *cmd);
|
|
|
|
void builtin_wperror(const wchar_t *program_name, io_streams_t &streams);
|
|
|
|
struct help_only_cmd_opts_t {
|
|
bool print_help = false;
|
|
};
|
|
int parse_help_only_cmd_opts(help_only_cmd_opts_t &opts, int *optind, int argc,
|
|
const wchar_t **argv, parser_t &parser, io_streams_t &streams);
|
|
#endif
|