function getCachedVariables()

in plugins/no-unused-vars.js [49:82]


function getCachedVariables(options, log) {
  const key = JSON.stringify(options)
  return cache.tap(key, () => {
    const {files, variablePattern} = options
    const decs = new TapMap()
    const refs = new TapMap()

    log(`Looking for variables in ${files} ...`)
    for (const file of globby.sync(files)) {
      const css = readFileSync(file, 'utf8')
      for (const match of matchAll(css, variablePattern)) {
        const after = css.substr(match.index + match[0].length)
        const name = match[0]
        if (after.startsWith(COLON)) {
          decs.tap(name, set).add(file)
        } else {
          refs.tap(name, set).add(file)
        }
      }
    }
    log(`Found ${decs.size} declarations, ${pluralize(refs.size, 'reference')}.`)

    for (const [name, filesList] of decs.entries()) {
      const fileRefs = refs.get(name)
      if (fileRefs) {
        log(`variable "${name}" declared in ${pluralize(filesList.size, 'file')}, ref'd in ${fileRefs.size}`)
      } else {
        log(`[!] variable "${name}" declared in ${Array.from(filesList)[0]} is not referenced`)
      }
    }

    return {decs, refs}
  })
}