maybeOutputSaveTree(patterns) {
    var _this4 = this;

    return (0, (_asyncToGenerator2 || _load_asyncToGenerator()).default)(function* () {
      // don't limit the shown tree depth
      const opts = {
        reqDepth: 0
      };

      // restore the original patterns
      const merged = [...patterns, ..._this4.addedPatterns];

      var _ref3 = yield (0, (_list || _load_list()).buildTree)(_this4.resolver, _this4.linker, merged, opts, true, true);

      const trees = _ref3.trees,
            count = _ref3.count;


      if (count === 1) {
        _this4.reporter.success(_this4.reporter.lang('savedNewDependency'));
      } else {
        _this4.reporter.success(_this4.reporter.lang('savedNewDependencies', count));
      }

      if (!count) {
        return;
      }

      const resolverPatterns = new Set();
      for (var _iterator3 = patterns, _isArray3 = Array.isArray(_iterator3), _i3 = 0, _iterator3 = _isArray3 ? _iterator3 : _iterator3[Symbol.iterator]();;) {
        var _ref4;

        if (_isArray3) {
          if (_i3 >= _iterator3.length) break;
          _ref4 = _iterator3[_i3++];
        } else {
          _i3 = _iterator3.next();
          if (_i3.done) break;
          _ref4 = _i3.value;
        }

        const pattern = _ref4;

        var _ref5 = _this4.resolver.getResolvedPattern(pattern) || {};

        const version = _ref5.version,
              name = _ref5.name;

        resolverPatterns.add(`${name}@${version}`);
      }
      const directRequireDependencies = trees.filter(function ({ name }) {
        return resolverPatterns.has(name);
      });

      _this4.reporter.info(_this4.reporter.lang('directDependencies'));
      _this4.reporter.tree('newDirectDependencies', directRequireDependencies);
      _this4.reporter.info(_this4.reporter.lang('allDependencies'));
      _this4.reporter.tree('newAllDependencies', trees);
    })();
  }
Output a tree of any newly added dependencies.