1*5bb742b1SMed Ismail Bennani #include "CommandObjectSession.h"
2*5bb742b1SMed Ismail Bennani #include "lldb/Interpreter/CommandInterpreter.h"
3*5bb742b1SMed Ismail Bennani #include "lldb/Interpreter/CommandReturnObject.h"
4*5bb742b1SMed Ismail Bennani 
5*5bb742b1SMed Ismail Bennani using namespace lldb;
6*5bb742b1SMed Ismail Bennani using namespace lldb_private;
7*5bb742b1SMed Ismail Bennani 
8*5bb742b1SMed Ismail Bennani class CommandObjectSessionSave : public CommandObjectParsed {
9*5bb742b1SMed Ismail Bennani public:
10*5bb742b1SMed Ismail Bennani   CommandObjectSessionSave(CommandInterpreter &interpreter)
11*5bb742b1SMed Ismail Bennani       : CommandObjectParsed(interpreter, "session save",
12*5bb742b1SMed Ismail Bennani                             "Save the current session transcripts to a file.\n"
13*5bb742b1SMed Ismail Bennani                             "If no file if specified, transcripts will be "
14*5bb742b1SMed Ismail Bennani                             "saved to a temporary file.",
15*5bb742b1SMed Ismail Bennani                             "session save [file]") {
16*5bb742b1SMed Ismail Bennani     CommandArgumentEntry arg1;
17*5bb742b1SMed Ismail Bennani     arg1.emplace_back(eArgTypePath, eArgRepeatOptional);
18*5bb742b1SMed Ismail Bennani     m_arguments.push_back(arg1);
19*5bb742b1SMed Ismail Bennani   }
20*5bb742b1SMed Ismail Bennani 
21*5bb742b1SMed Ismail Bennani   ~CommandObjectSessionSave() override = default;
22*5bb742b1SMed Ismail Bennani 
23*5bb742b1SMed Ismail Bennani   void
24*5bb742b1SMed Ismail Bennani   HandleArgumentCompletion(CompletionRequest &request,
25*5bb742b1SMed Ismail Bennani                            OptionElementVector &opt_element_vector) override {
26*5bb742b1SMed Ismail Bennani     CommandCompletions::InvokeCommonCompletionCallbacks(
27*5bb742b1SMed Ismail Bennani         GetCommandInterpreter(), CommandCompletions::eDiskFileCompletion,
28*5bb742b1SMed Ismail Bennani         request, nullptr);
29*5bb742b1SMed Ismail Bennani   }
30*5bb742b1SMed Ismail Bennani 
31*5bb742b1SMed Ismail Bennani protected:
32*5bb742b1SMed Ismail Bennani   bool DoExecute(Args &args, CommandReturnObject &result) override {
33*5bb742b1SMed Ismail Bennani     llvm::StringRef file_path;
34*5bb742b1SMed Ismail Bennani 
35*5bb742b1SMed Ismail Bennani     if (!args.empty())
36*5bb742b1SMed Ismail Bennani       file_path = args[0].ref();
37*5bb742b1SMed Ismail Bennani 
38*5bb742b1SMed Ismail Bennani     if (m_interpreter.SaveTranscript(result, file_path.str()))
39*5bb742b1SMed Ismail Bennani       result.SetStatus(eReturnStatusSuccessFinishNoResult);
40*5bb742b1SMed Ismail Bennani     else
41*5bb742b1SMed Ismail Bennani       result.SetStatus(eReturnStatusFailed);
42*5bb742b1SMed Ismail Bennani     return result.Succeeded();
43*5bb742b1SMed Ismail Bennani   }
44*5bb742b1SMed Ismail Bennani };
45*5bb742b1SMed Ismail Bennani 
46*5bb742b1SMed Ismail Bennani CommandObjectSession::CommandObjectSession(CommandInterpreter &interpreter)
47*5bb742b1SMed Ismail Bennani     : CommandObjectMultiword(interpreter, "session",
48*5bb742b1SMed Ismail Bennani                              "Commands controlling LLDB session.",
49*5bb742b1SMed Ismail Bennani                              "session <subcommand> [<command-options>]") {
50*5bb742b1SMed Ismail Bennani   LoadSubCommand("save",
51*5bb742b1SMed Ismail Bennani                  CommandObjectSP(new CommandObjectSessionSave(interpreter)));
52*5bb742b1SMed Ismail Bennani   //  TODO: Move 'history' subcommand from CommandObjectCommands.
53*5bb742b1SMed Ismail Bennani }
54