1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
|
#pragma once
#include "completer.h"
#include "formatted_output.h"
#include "last_getopt_opts.h"
#include "modchooser.h"
#include <util/generic/variant.h>
#include <util/string/builder.h>
namespace NLastGetopt {
class TCompletionGenerator {
public:
explicit TCompletionGenerator(const TModChooser* modChooser);
explicit TCompletionGenerator(const TOpts* opts);
virtual ~TCompletionGenerator() = default;
public:
virtual void Generate(TStringBuf command, IOutputStream& stream) = 0;
protected:
std::variant<const TModChooser*, const TOpts*> Options_;
};
class TZshCompletionGenerator: public TCompletionGenerator {
public:
using TCompletionGenerator::TCompletionGenerator;
public:
void Generate(TStringBuf command, IOutputStream& stream) override;
private:
static void GenerateModesCompletion(TFormattedOutput& out, const TModChooser& chooser, NComp::TCompleterManager& manager);
static void GenerateOptsCompletion(TFormattedOutput& out, const TOpts& opts, NComp::TCompleterManager& manager);
static void GenerateDefaultOptsCompletion(TFormattedOutput& out, NComp::TCompleterManager& manager);
static void GenerateOptCompletion(TFormattedOutput& out, const TOpts& opts, const TOpt& opt, NComp::TCompleterManager& manager);
};
class TBashCompletionGenerator: public TCompletionGenerator {
public:
using TCompletionGenerator::TCompletionGenerator;
public:
void Generate(TStringBuf command, IOutputStream& stream) override;
private:
static void GenerateModesCompletion(TFormattedOutput& out, const TModChooser& chooser, NComp::TCompleterManager& manager, size_t level);
static void GenerateOptsCompletion(TFormattedOutput& out, const TOpts& opts, NComp::TCompleterManager& manager, size_t level);
static void GenerateDefaultOptsCompletion(TFormattedOutput& out, NComp::TCompleterManager& manager);
};
namespace NEscaping {
/// Escape ':', '-', '=', '[', ']' for use in zsh _arguments
TString Q(TStringBuf string);
TString QQ(TStringBuf string);
/// Escape colons for use in zsh _alternative and _arguments
TString C(TStringBuf string);
TString CC(TStringBuf string);
/// Simple escape for use in zsh single-quoted strings
TString S(TStringBuf string);
TString SS(TStringBuf string);
/// Simple escape for use in bash single-quoted strings
TString B(TStringBuf string);
TString BB(TStringBuf string);
}
}
|