/// <summary>
 /// Create a completion item from the default item text
 /// </summary>
 /// <param name="label"></param>
 /// <param name="row"></param>
 /// <param name="startColumn"></param>
 /// <param name="endColumn"></param>
 private static CompletionItem CreateDefaultCompletionItem(
     string label,
     int row,
     int startColumn,
     int endColumn)
 {
     return(SqlCompletionItem.CreateCompletionItem(label, label + " keyword", label, CompletionItemKind.Keyword, row, startColumn, endColumn));
 }
示例#2
0
        private void ValidateDeclarationType(DeclarationType declarationType, CompletionItemKind expectedType)
        {
            string            declarationTitle = "name";
            string            tokenText        = "";
            SqlCompletionItem item             = new SqlCompletionItem(declarationTitle, declarationType, tokenText);
            CompletionItem    completionItem   = item.CreateCompletionItem(0, 1, 2);


            Assert.Equal(completionItem.Kind, expectedType);
        }
        public void GlobalVariableSystemFunctionsShouldNotHaveParenthesesAdded()
        {
            string            declarationTitle = "@@CONNECTIONS";
            string            tokenText        = "";
            SqlCompletionItem item             = new SqlCompletionItem(declarationTitle, DeclarationType.BuiltInFunction, tokenText);
            CompletionItem    completionItem   = item.CreateCompletionItem(0, 1, 2);

            Assert.Equal(declarationTitle, completionItem.Label);
            Assert.Equal($"{declarationTitle}", completionItem.InsertText);
            Assert.Equal(declarationTitle, completionItem.Detail);
        }
示例#4
0
        public void InsertTextShouldIncludeBracketGivenNameWithSpace()
        {
            string declarationTitle = "name with space";
            string expected         = "[" + declarationTitle + "]";

            DeclarationType   declarationType = DeclarationType.Table;
            string            tokenText       = "";
            SqlCompletionItem item            = new SqlCompletionItem(declarationTitle, declarationType, tokenText);
            CompletionItem    completionItem  = item.CreateCompletionItem(0, 1, 2);

            Assert.True(completionItem.InsertText.StartsWith("[") && completionItem.InsertText.EndsWith("]"));
        }
示例#5
0
        public void LabelShouldIncludeBracketGivenSqlObjectNameWithBracket()
        {
            string            declarationTitle = @"Bracket\[";
            string            expected         = "[" + declarationTitle + "]";
            DeclarationType   declarationType  = DeclarationType.Table;
            string            tokenText        = "";
            SqlCompletionItem item             = new SqlCompletionItem(declarationTitle, declarationType, tokenText);
            CompletionItem    completionItem   = item.CreateCompletionItem(0, 1, 2);

            Assert.Equal(completionItem.Label, declarationTitle);
            Assert.Equal(completionItem.InsertText, expected);
            Assert.Equal(completionItem.Detail, declarationTitle);
        }
示例#6
0
        public void TempTablesShouldNotBeEscaped()
        {
            string            declarationTitle = "#TestTable";
            string            expected         = declarationTitle;
            DeclarationType   declarationType  = DeclarationType.Table;
            string            tokenText        = "";
            SqlCompletionItem item             = new SqlCompletionItem(declarationTitle, declarationType, tokenText);
            CompletionItem    completionItem   = item.CreateCompletionItem(0, 1, 2);

            Assert.Equal(completionItem.Label, expected);
            Assert.Equal(completionItem.InsertText, expected);
            Assert.Equal(completionItem.Detail, expected);
        }
示例#7
0
        public void LabelShouldNotIncludeDoubleBracketIfTokenIncludesBracketsGivenReservedName()
        {
            string            declarationTitle = "User";
            string            expected         = "[" + declarationTitle + "]";
            DeclarationType   declarationType  = DeclarationType.Table;
            string            tokenText        = "[";
            SqlCompletionItem item             = new SqlCompletionItem(declarationTitle, declarationType, tokenText);
            CompletionItem    completionItem   = item.CreateCompletionItem(0, 1, 2);

            Assert.Equal(completionItem.Label, expected);
            Assert.Equal(completionItem.InsertText, expected);
            Assert.Equal(completionItem.Detail, expected);
        }
示例#8
0
        public void LabelShouldIncludeQuotedIdentifiersGivenTokenWithQuotedIdentifiers()
        {
            string            declarationTitle = "name";
            string            expected         = "\"" + declarationTitle + "\"";
            DeclarationType   declarationType  = DeclarationType.Table;
            string            tokenText        = "\"\"";
            SqlCompletionItem item             = new SqlCompletionItem(declarationTitle, declarationType, tokenText);
            CompletionItem    completionItem   = item.CreateCompletionItem(0, 1, 2);

            Assert.Equal(completionItem.Label, expected);
            Assert.Equal(completionItem.InsertText, expected);
            Assert.Equal(completionItem.Detail, expected);
        }
示例#9
0
        public void LabelShouldNotIncludeBracketGivenNameWithBrackets()
        {
            string            declarationTitle = "[name]";
            string            expected         = declarationTitle;
            DeclarationType   declarationType  = DeclarationType.Table;
            string            tokenText        = "[]";
            SqlCompletionItem item             = new SqlCompletionItem(declarationTitle, declarationType, tokenText);
            CompletionItem    completionItem   = item.CreateCompletionItem(0, 1, 2);

            Assert.Equal(completionItem.Label, expected);
            Assert.Equal(completionItem.InsertText, expected);
            Assert.Equal(completionItem.Detail, expected);
        }
示例#10
0
        public void FunctionsShouldHaveParenthesesAdded(DeclarationType declarationType)
        {
            foreach (string word in AutoCompleteHelper.DefaultCompletionText)
            {
                string            declarationTitle = word;
                string            tokenText        = "";
                SqlCompletionItem item             = new SqlCompletionItem(declarationTitle, declarationType, tokenText);
                CompletionItem    completionItem   = item.CreateCompletionItem(0, 1, 2);

                Assert.Equal(declarationTitle, completionItem.Label);
                Assert.Equal($"{declarationTitle}()", completionItem.InsertText);
                Assert.Equal(declarationTitle, completionItem.Detail);
            }
        }
示例#11
0
        public void InsertTextShouldNotIncludeBracketGivenReservedName()
        {
            foreach (string word in AutoCompleteHelper.DefaultCompletionText)
            {
                string            declarationTitle = word;
                DeclarationType   declarationType  = DeclarationType.ApplicationRole;
                string            tokenText        = "";
                SqlCompletionItem item             = new SqlCompletionItem(declarationTitle, declarationType, tokenText);
                CompletionItem    completionItem   = item.CreateCompletionItem(0, 1, 2);

                Assert.Equal(completionItem.Label, word);
                Assert.Equal(completionItem.InsertText, word);
                Assert.Equal(completionItem.Detail, word);
            }
        }
示例#12
0
        public void NamedIdentifiersShouldBeBracketQuoted(DeclarationType declarationType)
        {
            string declarationTitle = declarationType.ToString();

            // All words - both reserved and not - should be bracket quoted for these types
            foreach (string word in AutoCompleteHelper.DefaultCompletionText.ToList().Append("NonReservedWord"))
            {
                string            tokenText      = "";
                SqlCompletionItem item           = new SqlCompletionItem(declarationTitle, declarationType, tokenText);
                CompletionItem    completionItem = item.CreateCompletionItem(0, 1, 2);

                Assert.Equal(declarationTitle, completionItem.Label);
                Assert.Equal($"[{declarationTitle}]", completionItem.InsertText);
                Assert.Equal(declarationTitle, completionItem.Detail);
            }
        }
 internal static CompletionItem[] AddTokenToItems(CompletionItem[] currentList, Token token, int row,
                                                  int startColumn,
                                                  int endColumn)
 {
     if (currentList != null &&
         token != null && !string.IsNullOrWhiteSpace(token.Text) &&
         token.Text.All(ch => char.IsLetter(ch)) &&
         currentList.All(x => string.Compare(x.Label, token.Text, true) != 0
                         ))
     {
         var list = currentList.ToList();
         list.Insert(0, SqlCompletionItem.CreateCompletionItem(token.Text, token.Text, token.Text, CompletionItemKind.Text, row, startColumn, endColumn));
         return(list.ToArray());
     }
     return(currentList);
 }
示例#14
0
        public void InsertTextShouldIncludeBracketGivenReservedName()
        {
            foreach (string word in ReservedWords)
            {
                string            declarationTitle = word;
                string            expected         = "[" + declarationTitle + "]";
                DeclarationType   declarationType  = DeclarationType.Table;
                string            tokenText        = "";
                SqlCompletionItem item             = new SqlCompletionItem(declarationTitle, declarationType, tokenText);
                CompletionItem    completionItem   = item.CreateCompletionItem(0, 1, 2);

                Assert.Equal(completionItem.Label, word);
                Assert.Equal(completionItem.InsertText, expected);
                Assert.Equal(completionItem.Detail, word);
            }
        }
        /// <summary>
        /// Converts a list of Declaration objects to CompletionItem objects
        /// since VS Code expects CompletionItems but SQL Parser works with Declarations
        /// </summary>
        /// <param name="suggestions"></param>
        /// <param name="cursorRow"></param>
        /// <param name="cursorColumn"></param>
        /// <returns></returns>
        internal static CompletionItem[] ConvertDeclarationsToCompletionItems(
            IEnumerable <Declaration> suggestions,
            int row,
            int startColumn,
            int endColumn,
            string tokenText = null)
        {
            List <CompletionItem> completions = new List <CompletionItem>();

            foreach (var autoCompleteItem in suggestions)
            {
                SqlCompletionItem sqlCompletionItem = new SqlCompletionItem(autoCompleteItem, tokenText);

                // convert the completion item candidates into CompletionItems
                completions.Add(sqlCompletionItem.CreateCompletionItem(row, startColumn, endColumn));
            }

            return(completions.ToArray());
        }