code: function preTransformRecycleList (
    el,
    options
  ) {
    var exp = getAndRemoveAttr(el, 'for');
    if (!exp) {
      if (options.warn) {
        options.warn("Invalid <recycle-list> syntax: missing \"for\" expression.");
      }
      return
    }
  
    var res = parseFor(exp);
    if (!res) {
      if (options.warn) {
        options.warn(("Invalid <recycle-list> syntax: " + exp + "."));
      }
      return
    }
  
    addRawAttr(el, ':list-data', res.for);
    addRawAttr(el, 'binding-expression', res.for);
    addRawAttr(el, 'alias', res.alias);
    if (res.iterator2) {
      // (item, key, index) for object iteration
      // is this even supported?
      addRawAttr(el, 'index', res.iterator2);
    } else if (res.iterator1) {
      addRawAttr(el, 'index', res.iterator1);
    }
  
    var switchKey = getAndRemoveAttr(el, 'switch');
    if (switchKey) {
      addRawAttr(el, 'switch', switchKey);
    }
  }
docs: /* 
  Map the following syntax to corresponding attrs:
  
  <recycle-list for="(item, i) in longList" switch="cellType">
  <cell-slot case="A"> ... </cell-slot>
  <cell-slot case="B"> ... </cell-slot>
  </recycle-list>