whole_func_string: function generate(context, memory, words, edits) {
    var characters = context.flags.TRY
    var characterLength = characters.length
    var data = context.data
    var flags = context.flags
    var result = []
    var upper
    var length
    var index
    var word
    var position
    var count
    var before
    var after
    var nextAfter
    var nextNextAfter
    var character
    var nextCharacter
    var inject
    var offset
  
    // Check the pre-generated edits.
    length = edits && edits.length
    index = -1
  
    while (++index < length) {
      check(edits[index], true)
    }
  
    // Iterate over given word.
    length = words.length
    index = -1
  
    while (++index < length) {
      word = words[index]
  
      before = ''
      character = ''
      nextAfter = word
      nextNextAfter = word.slice(1)
      nextCharacter = word.charAt(0)
      position = -1
      count = word.length + 1
  
      // Iterate over every character (including the end).
      while (++position < count) {
        before += character
        after = nextAfter
        nextAfter = nextNextAfter
        nextNextAfter = nextAfter.slice(1)
        character = nextCharacter
        nextCharacter = word.charAt(position + 1)
        upper = character.toLowerCase() !== character
  
        // Remove.
        check(before + nextAfter)
  
        // Switch.
        if (nextAfter) {
          check(before + nextCharacter + character + nextNextAfter)
        }
  
        // Iterate over all possible letters.
        offset = -1
  
        while (++offset < characterLength) {
          inject = characters[offset]
  
          // Add and replace.
          check(before + inject + after)
          check(before + inject + nextAfter)
  
          // Try upper-case if the original character was upper-cased.
          if (upper) {
            inject = inject.toUpperCase()
  
            check(before + inject + after)
            check(before + inject + nextAfter)
          }
        }
      }
    }
  
    // Return the list of generated words.
    return result
  
    // Check and handle a generated value.
    function check(value, double) {
      var state = memory.state[value]
      var corrected
  
      if (state !== Boolean(state)) {
        result.push(value)
  
        corrected = form(context, value)
        state = corrected && !flag(flags, noSuggestType, data[corrected])
  
        memory.state[value] = state
  
        if (state) {
          memory.weighted[value] = double ? 10 : 0
          memory.suggestions.push(value)
        }
      }
  
      if (state) {
        memory.weighted[value]++
      }
    }
  }
func_code_string: function generate(context, memory, words, edits) {
    var characters = context.flags.TRY
    var characterLength = characters.length
    var data = context.data
    var flags = context.flags
    var result = []
    var upper
    var length
    var index
    var word
    var position
    var count
    var before
    var after
    var nextAfter
    var nextNextAfter
    var character
    var nextCharacter
    var inject
    var offset
  
    // Check the pre-generated edits.
    length = edits && edits.length
    index = -1
  
    while (++index < length) {
      check(edits[index], true)
    }
  
    // Iterate over given word.
    length = words.length
    index = -1
  
    while (++index < length) {
      word = words[index]
  
      before = ''
      character = ''
      nextAfter = word
      nextNextAfter = word.slice(1)
      nextCharacter = word.charAt(0)
      position = -1
      count = word.length + 1
  
      // Iterate over every character (including the end).
      while (++position < count) {
        before += character
        after = nextAfter
        nextAfter = nextNextAfter
        nextNextAfter = nextAfter.slice(1)
        character = nextCharacter
        nextCharacter = word.charAt(position + 1)
        upper = character.toLowerCase() !== character
  
        // Remove.
        check(before + nextAfter)
  
        // Switch.
        if (nextAfter) {
          check(before + nextCharacter + character + nextNextAfter)
        }
  
        // Iterate over all possible letters.
        offset = -1
  
        while (++offset < characterLength) {
          inject = characters[offset]
  
          // Add and replace.
          check(before + inject + after)
          check(before + inject + nextAfter)
  
          // Try upper-case if the original character was upper-cased.
          if (upper) {
            inject = inject.toUpperCase()
  
            check(before + inject + after)
            check(before + inject + nextAfter)
          }
        }
      }
    }
  
    // Return the list of generated words.
    return result
  
    // Check and handle a generated value.
    function check(value, double) {
      var state = memory.state[value]
      var corrected
  
      if (state !== Boolean(state)) {
        result.push(value)
  
        corrected = form(context, value)
        state = corrected && !flag(flags, noSuggestType, data[corrected])
  
        memory.state[value] = state
  
        if (state) {
          memory.weighted[value] = double ? 10 : 0
          memory.suggestions.push(value)
        }
      }
  
      if (state) {
        memory.weighted[value]++
      }
    }
  }
func_documentation_string: Get a list of values close in edit distance to `words`.