text: /**
   * Copyright 2018 Shape Security, Inc.
   *
   * Licensed under the Apache License, Version 2.0 (the "License")
   * you may not use this file except in compliance with the License.
   * You may obtain a copy of the License at
   *
   *     http://www.apache.org/licenses/LICENSE-2.0
   *
   * Unless required by applicable law or agreed to in writing, software
   * distributed under the License is distributed on an "AS IS" BASIS,
   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   * See the License for the specific language governing permissions and
   * limitations under the License.
   */
  
  'use strict';
  
  const spec = require('shift-spec');
  const { makeHeader } = require('../lib/utilities.js');
  
  let content = `${makeHeader(__filename)}
  const Shift = require('shift-ast');
  
  module.exports = (fn, reducer) => ({
    __proto__: reducer,
  ${Object.keys(spec).map(typeName => `
    reduce${typeName}(node, data) {
      return fn(super.reduce${typeName}(node, data), node);
    },`).join('\n')}
  });
  `;
  
  require('fs').writeFileSync('gen/adapt.js', content, 'utf-8');
  