/// <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)); }
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); }
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("]")); }
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); }
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); }
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); }
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); }
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); }
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); } }
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); } }
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); }
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()); }