docs: public static String generateHelp(final int columnWidth, final boolean sort, final Object... objs)
              throws IOException
      {
          final List<Arg> allArgs = Colls.list();
          final HashMap<String, Arg> shortArgs = new HashMap<String, Arg>();
          final HashMap<String, Arg> longArgs = new HashMap<String, Arg>();
  
          parseArgs(objs, allArgs, shortArgs, longArgs);
  
          int minArgLen = 0;
  
          for (final Arg a : allArgs)
          {
              int len = a.toString().length();
              if (!a.isSwitch)
              {
                  ++len;
                  len += a.getResolvedType().toString().length();
                  if (a.isCatchAll())
                  {
                      ++len;
                  }
                  else if (a.isList())
                  {
                      len += 6;
                  }
              }
              minArgLen = Math.max(minArgLen, len);
          }
          minArgLen += 2;
          if (sort)
          {
              Collections.sort(allArgs);
          }
  
          final StringBuilder sb = new StringBuilder();
  
          for (final Arg a : allArgs)
          {
              final StringBuilder line = new StringBuilder();
              line.append(' ');
              line.append(a);
              if (!a.isSwitch)
              {
                  line.append(' ');
                  line.append(a.getResolvedType().toString().toLowerCase());
                  if (a.isCatchAll())
                  {
                      line.append('s');
                  }
                  else if (a.isList())
                  {
                      line.append('[');
                      line.append(a.itemSep);
                      line.append("...]");
                  }
              }
              while (line.length() < minArgLen)
              {
                  line.append(' ');
              }
  
              line.append(':');
  
              final StringBuilder desc = new StringBuilder(a.desc.trim());
  
              final String defVal = defaultToString(a.safeFieldGet(), a.type, a);
  
              if (defVal != null)
              {
                  desc.append(" Default is: '");
                  desc.append(defVal);
                  desc.append("'.");
              }
  
              final List<String> toks = Strings.split(desc.toString(), ' ');
  
              for (final String s : toks)
              {
                  if (line.length() + s.length() + 1 > columnWidth)
                  {
                      sb.append(line);
                      sb.append('\n');
                      line.setLength(0);
                      while (line.length() <= minArgLen)
                      {
                          line.append(' ');
                      }
                      line.append(' ');
                  }
                  line.append(' ');
                  line.append(s);
              }
  
              if (line.length() > minArgLen)
              {
                  sb.append(line);
                  sb.append('\n');
              }
          }
  
          return sb.toString();
      }