format static method

String format(
  1. String s, {
  2. JsonAnalyzer? analyzer,
})

Implementation

static String format(String s, {JsonAnalyzer? analyzer}) {
  analyzer ??= JsonAnalyzer();
  var result = s;
  var err = analyzer.analyze(s);
  if (err == null) {
    var tokens = Lexer().scan(s);
    var reformatText = '';
    var lastLineIndentNumber = 0;
    while (!tokens.isEof) {
      if (tokens.precedingComments != null) {
        var commentText =
            '${tokens.precedingComments!.toString()}\n${_createIndentSpace(lastLineIndentNumber)}';
        var nextComment = tokens.precedingComments?.next;
        while (nextComment is CommentToken) {
          commentText +=
              '${nextComment.toString()}\n${_createIndentSpace(lastLineIndentNumber)}';
          nextComment = nextComment.next;
        }
        reformatText += commentText;
      }
      reformatText += tokens.lexeme;
      if (tokens.lexeme == '{' || tokens.lexeme == '[') {
        lastLineIndentNumber++;
        reformatText += '\n${_createIndentSpace(lastLineIndentNumber)}';
      } else if (tokens.lexeme == ':') {
        reformatText += '  ';
      }
      if (tokens.next?.lexeme == '}' ||
          tokens.next?.lexeme == ']' ||
          tokens.next?.isEof == true) {
        lastLineIndentNumber =
            lastLineIndentNumber > 0 ? --lastLineIndentNumber : 0;
        reformatText += '\n${_createIndentSpace(lastLineIndentNumber)}';
      } else if (tokens.lexeme == ',') {
        reformatText += '\n${_createIndentSpace(lastLineIndentNumber)}';
      }

      tokens = tokens.next!;
    }
    result = reformatText;
  } else {
    error(tag: 'JsonElement', message: 'format error', err: err);
  }
  return result;
}