public string BeautifyQuery(string queryText) { var cleanedQueries = new List <string>(); try { var jsonTokenizer = new JsonTokenizer(); var commentTokenizer = new CommentTokenizer(); var preCleanString = queryText; preCleanString = commentTokenizer.TokenizeComments(preCleanString); if (preCleanString.EndsWith(";")) { preCleanString = preCleanString.Remove(preCleanString.Length - 1, 1); } //splits on semi-colon var pattern = $@"\s*;\s*[{Constants.NEWLINE}](?!\s*\*\/)"; var queries = Regex.Split(preCleanString, pattern, RegexOptions.IgnoreCase | RegexOptions.Compiled); //this removes empty lines var filteredQueries = queries.Where(w => !string.IsNullOrEmpty(w.Trim().Replace(Constants.NEWLINE, ""))); var startMatchesAt = 0; var commentedQueries = new List <string>(); foreach (var q in filteredQueries) { var commentedQuery = q; while (commentedQuery.IndexOf(commentTokenizer.TOKEN) > -1) { commentedQuery = commentTokenizer.DetokenizeCommentsAt(commentedQuery, startMatchesAt); startMatchesAt++; } commentedQueries.Add(commentedQuery); } foreach (var query in commentedQueries) { var trimmedQuery = query; trimmedQuery = _queryParser.CleanAndFormatQueryText(trimmedQuery, true, true, true); var formattedQuery = trimmedQuery.Replace(Constants.NEWLINE, Environment.NewLine); if (queries.Count() > 1) { formattedQuery += ";"; } cleanedQueries.Add(formattedQuery); } } catch (Exception) { return(queryText); } return(string.Join($"{Environment.NewLine}{Environment.NewLine}", cleanedQueries)); }
public void CommentScannerSlash() { var source = "/"; var scanner = new StringScanner(source); Assert.IsTrue(scanner.MoveNext()); var tokenizer = new CommentTokenizer(); var result = tokenizer.Next(scanner); Assert.AreEqual(TokenType.RightDivide, result.Type); }
public void CommentScannerBlockCommentMultiple() { var content = "This\nis\nmy\nblock"; var source = "/*" + content + "*/\n..."; var scanner = new StringScanner(source); Assert.IsTrue(scanner.MoveNext()); var tokenizer = new CommentTokenizer(); var result = tokenizer.Next(scanner); Assert.AreEqual(TokenType.Comment, result.Type); Assert.AreEqual(content, result.Payload); }
public void CommentScannerLineCommentMultiple() { var content = "This is my line"; var source = "//" + content + "\n..."; var scanner = new StringScanner(source); Assert.IsTrue(scanner.MoveNext()); var tokenizer = new CommentTokenizer(); var result = tokenizer.Next(scanner); Assert.AreEqual(TokenType.Comment, result.Type); Assert.AreEqual(content, result.Payload); }