Actualizacion maquina principal
[dotfiles/.git] / .config / coc / extensions / node_modules / coc-prettier / node_modules / argparse / lib / action / subparsers.js
diff --git a/.config/coc/extensions/node_modules/coc-prettier/node_modules/argparse/lib/action/subparsers.js b/.config/coc/extensions/node_modules/coc-prettier/node_modules/argparse/lib/action/subparsers.js
new file mode 100644 (file)
index 0000000..99dfedd
--- /dev/null
@@ -0,0 +1,149 @@
+/** internal
+ * class ActionSubparsers
+ *
+ * Support the creation of such sub-commands with the addSubparsers()
+ *
+ * This class inherited from [[Action]]
+ **/
+'use strict';
+
+var util    = require('util');
+var format  = require('util').format;
+
+
+var Action = require('../action');
+
+// Constants
+var c = require('../const');
+
+// Errors
+var argumentErrorHelper = require('../argument/error');
+
+
+/*:nodoc:*
+ * new ChoicesPseudoAction(name, help)
+ *
+ * Create pseudo action for correct help text
+ *
+ **/
+function ChoicesPseudoAction(name, help) {
+  var options = {
+    optionStrings: [],
+    dest: name,
+    help: help
+  };
+
+  Action.call(this, options);
+}
+
+util.inherits(ChoicesPseudoAction, Action);
+
+/**
+ * new ActionSubparsers(options)
+ * - options (object): options hash see [[Action.new]]
+ *
+ **/
+function ActionSubparsers(options) {
+  options = options || {};
+  options.dest = options.dest || c.SUPPRESS;
+  options.nargs = c.PARSER;
+
+  this.debug = (options.debug === true);
+
+  this._progPrefix = options.prog;
+  this._parserClass = options.parserClass;
+  this._nameParserMap = {};
+  this._choicesActions = [];
+
+  options.choices = this._nameParserMap;
+  Action.call(this, options);
+}
+
+util.inherits(ActionSubparsers, Action);
+
+/*:nodoc:*
+ * ActionSubparsers#addParser(name, options) -> ArgumentParser
+ * - name (string): sub-command name
+ * - options (object): see [[ArgumentParser.new]]
+ *
+ *  Note:
+ *  addParser supports an additional aliases option,
+ *  which allows multiple strings to refer to the same subparser.
+ *  This example, like svn, aliases co as a shorthand for checkout
+ *
+ **/
+ActionSubparsers.prototype.addParser = function (name, options) {
+  var parser;
+
+  var self = this;
+
+  options = options || {};
+
+  options.debug = (this.debug === true);
+
+  // set program from the existing prefix
+  if (!options.prog) {
+    options.prog = this._progPrefix + ' ' + name;
+  }
+
+  var aliases = options.aliases || [];
+
+  // create a pseudo-action to hold the choice help
+  if (!!options.help || typeof options.help === 'string') {
+    var help = options.help;
+    delete options.help;
+
+    var choiceAction = new ChoicesPseudoAction(name, help);
+    this._choicesActions.push(choiceAction);
+  }
+
+  // create the parser and add it to the map
+  parser = new this._parserClass(options);
+  this._nameParserMap[name] = parser;
+
+  // make parser available under aliases also
+  aliases.forEach(function (alias) {
+    self._nameParserMap[alias] = parser;
+  });
+
+  return parser;
+};
+
+ActionSubparsers.prototype._getSubactions = function () {
+  return this._choicesActions;
+};
+
+/*:nodoc:*
+ * ActionSubparsers#call(parser, namespace, values, optionString) -> Void
+ * - parser (ArgumentParser): current parser
+ * - namespace (Namespace): namespace for output data
+ * - values (Array): parsed values
+ * - optionString (Array): input option string(not parsed)
+ *
+ * Call the action. Parse input aguments
+ **/
+ActionSubparsers.prototype.call = function (parser, namespace, values) {
+  var parserName = values[0];
+  var argStrings = values.slice(1);
+
+  // set the parser name if requested
+  if (this.dest !== c.SUPPRESS) {
+    namespace[this.dest] = parserName;
+  }
+
+  // select the parser
+  if (this._nameParserMap[parserName]) {
+    parser = this._nameParserMap[parserName];
+  } else {
+    throw argumentErrorHelper(format(
+      'Unknown parser "%s" (choices: [%s]).',
+        parserName,
+        Object.keys(this._nameParserMap).join(', ')
+    ));
+  }
+
+  // parse all the remaining options into the namespace
+  parser.parseArgs(argStrings, namespace);
+};
+
+module.exports = ActionSubparsers;