docs: function findCTagsFile(searchPath, tagFilePattern = '{.,}tags') {
      const ctagsFinder = function ctagsFinder(tagPath) {
          console.error(`ctagz: Searching ${tagPath}`)
          return fs.readdirAsync(tagPath).then(files => {
              const matched = files.filter(minimatch.filter(tagFilePattern)).sort()
              const ret = !matched ? Promise.resolve(null) :
                  Promise.reduce(matched, (acc, match) => {
                      if (acc) {
                          return acc
                      }
                      const matchPath = path.join(tagPath, match)
                      return fs.statAsync(matchPath).then(stats => {
                          if (!stats.isFile()) {
                              return null
                          }
  
                          return fs.openAsync(matchPath, 'r').then(fd => new CTags(matchPath, fd))
                              .catch(() => null)
                      })
                  }, null)
  
              return ret.then(result => {
                  const newTagPath = path.dirname(tagPath)
                  if (!result && newTagPath !== tagPath) {
                      return ctagsFinder(newTagPath)
                  }
                  return result
              })
          })
      }
  
      let tagPath = path.resolve(searchPath)
      return fs.statAsync(tagPath).then(stats => {
          if (stats.isFile()) {
              tagPath = path.dirname(tagPath)
          }
          return ctagsFinder(tagPath)
      })
  }