code: function extraNewLineBetween(previous, current) {
      // no new line before the first element of the block
      if (!previous) {
          return false;}
  
  
      /**
       * always have newline before return, unless it's the only statement
       */
      if (previous && current.type === 'ReturnStatement') {
          return true;}
  
  
      // group var declarations together
      // Example
      //  var a = 5;
      //  var b = 5;
      //  var l;
      if (previous.type === 'VariableDeclaration' && 
      current.type === 'VariableDeclaration') {
          return false;}
  
  
      if (NEED_NEWLINE_BEFORE[current.type]) {
          return true;}
  
  
      if (NEED_EXTRA_NEWLINE_AFTER[previous.type]) {
          return true;}
  
  
      if (previous.type === 'ImportDeclaration' && 
      current.type !== 'ImportDeclaration') {
          return true;}
  
  
      if (newLineAfterCompositeExpressions(previous)) {
          return true;}
  
  
      return false;}
docs: Some elements of the body of the block (Programm, BlockStatement)
  need to know whether they need to prepend a newline before them.
  
  Example can be
  1. Any element after imports declaration
  import A from 'a';
  import B from 'b';
  
  A.b() + B.c();
  
  2. anything after if else block
  if (a) {
  return b;
  }
  
  a + b;
  
  
  @param {Object} previous node
  @param {Object} current node