Actualizacion maquina principal
[dotfiles/.git] / .config / coc / extensions / node_modules / coc-prettier / node_modules / yargs / lib / completion.js
diff --git a/.config/coc/extensions/node_modules/coc-prettier/node_modules/yargs/lib/completion.js b/.config/coc/extensions/node_modules/coc-prettier/node_modules/yargs/lib/completion.js
new file mode 100644 (file)
index 0000000..ad6969a
--- /dev/null
@@ -0,0 +1,105 @@
+'use strict'
+const fs = require('fs')
+const path = require('path')
+
+// add bash completions to your
+//  yargs-powered applications.
+module.exports = function completion (yargs, usage, command) {
+  const self = {
+    completionKey: 'get-yargs-completions'
+  }
+
+  // get a list of completion commands.
+  // 'args' is the array of strings from the line to be completed
+  self.getCompletion = function getCompletion (args, done) {
+    const completions = []
+    const current = args.length ? args[args.length - 1] : ''
+    const argv = yargs.parse(args, true)
+    const aliases = yargs.parsed.aliases
+
+    // a custom completion function can be provided
+    // to completion().
+    if (completionFunction) {
+      if (completionFunction.length < 3) {
+        const result = completionFunction(current, argv)
+
+        // promise based completion function.
+        if (typeof result.then === 'function') {
+          return result.then((list) => {
+            process.nextTick(() => { done(list) })
+          }).catch((err) => {
+            process.nextTick(() => { throw err })
+          })
+        }
+
+        // synchronous completion function.
+        return done(result)
+      } else {
+        // asynchronous completion function
+        return completionFunction(current, argv, (completions) => {
+          done(completions)
+        })
+      }
+    }
+
+    const handlers = command.getCommandHandlers()
+    for (let i = 0, ii = args.length; i < ii; ++i) {
+      if (handlers[args[i]] && handlers[args[i]].builder) {
+        const builder = handlers[args[i]].builder
+        if (typeof builder === 'function') {
+          const y = yargs.reset()
+          builder(y)
+          return y.argv
+        }
+      }
+    }
+
+    if (!current.match(/^-/)) {
+      usage.getCommands().forEach((usageCommand) => {
+        const commandName = command.parseCommand(usageCommand[0]).cmd
+        if (args.indexOf(commandName) === -1) {
+          completions.push(commandName)
+        }
+      })
+    }
+
+    if (current.match(/^-/)) {
+      Object.keys(yargs.getOptions().key).forEach((key) => {
+        // If the key and its aliases aren't in 'args', add the key to 'completions'
+        const keyAndAliases = [key].concat(aliases[key] || [])
+        const notInArgs = keyAndAliases.every(val => args.indexOf(`--${val}`) === -1)
+        if (notInArgs) {
+          completions.push(`--${key}`)
+        }
+      })
+    }
+
+    done(completions)
+  }
+
+  // generate the completion script to add to your .bashrc.
+  self.generateCompletionScript = function generateCompletionScript ($0, cmd) {
+    let script = fs.readFileSync(
+      path.resolve(__dirname, '../completion.sh.hbs'),
+      'utf-8'
+    )
+    const name = path.basename($0)
+
+    // add ./to applications not yet installed as bin.
+    if ($0.match(/\.js$/)) $0 = `./${$0}`
+
+    script = script.replace(/{{app_name}}/g, name)
+    script = script.replace(/{{completion_command}}/g, cmd)
+    return script.replace(/{{app_path}}/g, $0)
+  }
+
+  // register a function to perform your own custom
+  // completions., this function can be either
+  // synchrnous or asynchronous.
+  let completionFunction = null
+  self.registerFunction = (fn) => {
+    completionFunction = fn
+  }
+
+  return self
+}