blob: 073c75688d2daf52cd9c5d5dff0bfc0898185306 [file] [log] [blame]
// Copyright 2019 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "src/developer/shell/josh/console/command_line_options.h"
#include <lib/cmdline/args_parser.h>
namespace shell {
const char* const kHelpIntro = R"(josh [ <options> ]
josh is a JavaScript shell for Fuchsia.
Options:
)";
const char kCommandStringHelp[] = R"( --command-string=<command-string>
-c <command string>
Execute the given command string instead of reading commands
interactively.)";
const char kFidlIrPathHelp[] = R"( --fidl-ir-path=<path>
-f <path>
Look in the given path for FIDL IR. Defaults to
/pkgfs/packages/josh/0/data/fidling, and only takes a single path
element. This should be fixed, which requires turning the shell
into a component.)";
const char kLineEditorHelp[] = R"( --fuchsia-line-editor
-l
Use Fuchsia line_input line editor.)";
const char kBootJsLibPathHelp[] = R"( --boot-js-lib-path=<path>
-j <path>
Automatically load builtin JS files from the given path. Defaults to
/pkgfs/packages/josh/0/data/lib, and only takes a single path
element. This should be fixed, which requires turning the shell
into a component.)";
const char* const kHelpHelp = R"( --help
-h
Prints all command-line switches.)";
cmdline::Status ParseCommandLine(int argc, const char** argv, CommandLineOptions* options,
std::vector<std::string>* params) {
cmdline::ArgsParser<CommandLineOptions> parser;
parser.AddSwitch("command-string", 'c', kCommandStringHelp, &CommandLineOptions::command_string);
parser.AddSwitch("fidl-ir-path", 'f', kFidlIrPathHelp, &CommandLineOptions::fidl_ir_path);
parser.AddSwitch("boot-js-lib-path", 'j', kBootJsLibPathHelp,
&CommandLineOptions::boot_js_lib_path);
parser.AddSwitch("fuchsia-line-editor", 'l', kLineEditorHelp, &CommandLineOptions::line_editor);
bool requested_help = false;
parser.AddGeneralSwitch("help", 'h', kHelpHelp, [&requested_help]() { requested_help = true; });
cmdline::Status status = parser.Parse(argc, argv, options, params);
if (status.has_error()) {
return status;
}
if (requested_help) {
return cmdline::Status::Error(kHelpIntro + parser.GetHelp());
}
// TODO(jeremymanson): This is a bad default.
if (options->fidl_ir_path.empty()) {
options->fidl_ir_path.push_back("/pkgfs/packages/josh/0/data/fidling");
}
if (options->boot_js_lib_path.empty()) {
options->boot_js_lib_path.push_back("/pkgfs/packages/josh/0/data/lib");
}
return cmdline::Status::Ok();
}
} // namespace shell