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));
        }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
0
        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);
        }
Exemplo n.º 4
0
        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);
        }