code: private void visitBlockScopedFunctionDeclaration(NodeTraversal t, Node n, Node parent) {
      // Prepare a spot for the function.
      Node oldNameNode = n.getFirstChild();
      Node fnNameNode = oldNameNode.cloneNode();
      Node let = IR.declaration(fnNameNode, Token.LET).srcref(n);
      NodeUtil.addFeatureToScript(t.getCurrentScript(), Feature.LET_DECLARATIONS);
  
      // Prepare the function.
      oldNameNode.setString("");
      compiler.reportChangeToEnclosingScope(oldNameNode);
  
      // Move the function to the front of the parent.
      parent.removeChild(n);
      parent.addChildToFront(let);
      compiler.reportChangeToEnclosingScope(let);
      fnNameNode.addChildToFront(n);
    }
docs: Rewrite the function declaration from:
  
  <pre>
  function f() {}
  FUNCTION
  NAME x
  PARAM_LIST
  BLOCK
  </pre>
  
  to
  
  <pre>
  let f = function() {};
  LET
  NAME f
  FUNCTION
  NAME (w/ empty string)
  PARAM_LIST
  BLOCK
  </pre>
  
  This is similar to {@link Normalize.NormalizeStatements#rewriteFunctionDeclaration} but
  rewrites to "let" instead of "var".