code: function gatherDependencies (root, options, callback) {
    if (typeof options === 'function') {
      callback = options
      options = {}
    }
  
    options = extend(defaultOptions, options)
  
    /**
     * read-package-tree callback
     * @param  {error}  err  read-package-tree error
     * @param  {object} data read-package-tree blob (contains cyclical refrences)
     */
    var rpt_cb = function rpt_cb (err, data) {
      if (err) return logger.error(err)
      if (data.error) return logger.error(data.error)
      if (!data.package) {
        logger.warn('`data.package` not defined. Initializing placeholder.')
        data.package = {}
      }
  
      var dependencyReport = {}
  
      if (!data.package || !data.package.name) logger.warn('`data.package.name` missing')
      dependencyReport.name = data.package.name
  
      if (!data.package || !data.package.version) logger.warn('`data.package.version` missing')
      dependencyReport.version = data.package.version
  
      if (options.meta) {
        dependencyReport.meta = {
          nodeVersions: process.versions,
          date: Date.now()
        }
      }
  
      buildDependencyReport(dependencyReport, data, options, 0)
  
      // Finally, return gatherDependencies callback
      callback(null, dependencyReport)
    }
  
    fs.stat(path.resolve(root, 'node_modules'), function (err, stats) {
      if (err && err.code === 'ENOENT') {
        fs.stat(path.resolve(root, 'package.json'), function (er, sta) {
          if (er && er.code === 'ENOENT') {
            return callback(new Error('No module found'))
          }
          return callback(new Error('Need to run \`npm install\` first.'))
        })
      }
    })
  
    readPackageTree(root, options.filter, rpt_cb)
  }
docs: gatherDependencies
  @param  {string}   root     Base directory where dependencies are gathered
  @param  {object}   options  Options
  @param  {function} callback callback