whole_func_string: function(ast) {
        let value = this.value;
  
        ast.traverseByType('declarationDelimiter', (delimiter, i, parent) => {
          // Grom user's point of view "declaration" includes semicolons
          // and comments placed on the same line.
          // So group those things together:
          var declarationEnd = getDeclarationEnd(parent, i);
          if (!declarationEnd) {
            return;
          } else {
            i = declarationEnd;
          }
  
          var nextNode = parent.get(i + 1);
          if (nextNode && nextNode.is('space')) {
            nextNode.content = value;
          } else {
            var space = gonzales.createNode({
              type: 'space',
              content: value
            });
            parent.insert(i + 1, space);
          }
        });
      }
func_code_string: function(ast) {
        let value = this.value;
  
        ast.traverseByType('declarationDelimiter', (delimiter, i, parent) => {
          // Grom user's point of view "declaration" includes semicolons
          // and comments placed on the same line.
          // So group those things together:
          var declarationEnd = getDeclarationEnd(parent, i);
          if (!declarationEnd) {
            return;
          } else {
            i = declarationEnd;
          }
  
          var nextNode = parent.get(i + 1);
          if (nextNode && nextNode.is('space')) {
            nextNode.content = value;
          } else {
            var space = gonzales.createNode({
              type: 'space',
              content: value
            });
            parent.insert(i + 1, space);
          }
        });
      }
func_documentation_string: Processes tree node.
  
  @param {node} ast