docs: function parse (selector, opts) {
    opts = opts || {}
  
    // priority: [ important, style, R1, R2, R3, line ]
    let important = opts.important ? 1 : 0
    let line = opts.line || 0
    let priority = [important, 0, 0, 0, 0, line]
  
    selector = selector.replace(/(::?)([\w-]+)/g, (total, left, elem) => {
      if (PSEUDO_ELEMS.indexOf(elem) >= 0) {
        if (left === ':') {
          return '::' + elem
        } else {
          return total
        }
      } else {
        return total
      }
    })
  
    // replace with symbols
    selector = selector
      .replace(TOKEN_ATTR, SYMBOL_C)
      .replace(TOKEN_PSEUDO_ELEM, SYMBOL_D)
      .replace(TOKEN_PSEUDO_CLASS, SYMBOL_C)
      .replace(TOKEN_ID, SYMBOL_B)
      .replace(TOKEN_CLASS, SYMBOL_C)
      .replace(TOKEN_ELEM, SYMBOL_D)
  
    // count
    selector = selector.replace(/[\2\3\4]/g, (symbol) => {
      let idx = symbol.charCodeAt(0)
  
      priority[idx] ++
  
      return '<' + idx + '>'
    })
  
    return priority
  }