From 535cbd192f5257c80c06d1a66e8cb9aac6610dda Mon Sep 17 00:00:00 2001 From: Mark Carrington <31017244+MarkMpn@users.noreply.github.com> Date: Thu, 5 Dec 2024 20:22:16 +0000 Subject: [PATCH] Fixed autocomplete of functions that have a defined lookup type parameter --- .../Autocomplete/Autocomplete.cs | 15 +++++++++------ MarkMpn.Sql4Cds.XTB/Autocomplete.cs | 15 +++++++++------ 2 files changed, 18 insertions(+), 12 deletions(-) diff --git a/MarkMpn.Sql4Cds.LanguageServer/Autocomplete/Autocomplete.cs b/MarkMpn.Sql4Cds.LanguageServer/Autocomplete/Autocomplete.cs index 830d58ea..9857cf12 100644 --- a/MarkMpn.Sql4Cds.LanguageServer/Autocomplete/Autocomplete.cs +++ b/MarkMpn.Sql4Cds.LanguageServer/Autocomplete/Autocomplete.cs @@ -540,7 +540,7 @@ public IEnumerable GetSuggestions(string text, int pos) message.IsValidAsTableValuedFunction()) { if (!Guid.TryParse(table.Key, out _)) - items.Add(new TVFAutocompleteItem(message, table.Key, currentLength)); + items.Add(new TVFAutocompleteItem(message, instance, table.Key, currentLength)); attributes.AddRange(GetMessageOutputAttributes(message, instance)); } @@ -786,7 +786,7 @@ private IEnumerable AutocompleteTableName(string currentWor // Show TVF list if (fromClause && ds.Metadata != null) - list.AddRange(ds.MessageCache.GetAllMessages().Where(x => x.IsValidAsTableValuedFunction()).Select(x => new TVFAutocompleteItem(x, _columnOrdering, currentLength))); + list.AddRange(ds.MessageCache.GetAllMessages().Where(x => x.IsValidAsTableValuedFunction()).Select(x => new TVFAutocompleteItem(x, _columnOrdering, ds, currentLength))); } } else if (TryParseTableName(currentWord, out var instanceName, out var schemaName, out var tableName, out var parts, out var lastPartLength)) @@ -856,7 +856,7 @@ private IEnumerable AutocompleteTableName(string currentWor if (fromClause) { messages = messages.Where(e => e.IsValidAsTableValuedFunction() && e.Name.StartsWith(lastPart, StringComparison.OrdinalIgnoreCase)); - list.AddRange(messages.Select(e => new TVFAutocompleteItem(e, _columnOrdering, lastPartLength))); + list.AddRange(messages.Select(e => new TVFAutocompleteItem(e, _columnOrdering, instance, lastPartLength))); } } } @@ -1552,16 +1552,19 @@ class TVFAutocompleteItem : SqlAutocompleteItem { private readonly Message _message; private readonly ColumnOrdering _columnOrdering; + private readonly DataSource _dataSource; - public TVFAutocompleteItem(Message message, ColumnOrdering columnOrdering, int replaceLength) : base(message.Name, replaceLength, CompletionItemKind.Function) + public TVFAutocompleteItem(Message message, ColumnOrdering columnOrdering, DataSource dataSource, int replaceLength) : base(message.Name, replaceLength, CompletionItemKind.Function) { _message = message; _columnOrdering = columnOrdering; + _dataSource = dataSource; } - public TVFAutocompleteItem(Message message, string alias, int replaceLength) : base(alias, replaceLength, CompletionItemKind.Function) + public TVFAutocompleteItem(Message message, DataSource dataSource, string alias, int replaceLength) : base(alias, replaceLength, CompletionItemKind.Function) { _message = message; + _dataSource = dataSource; } public override string ToolTipTitle @@ -1582,7 +1585,7 @@ public override string ToolTipText else parameters = parameters.OrderBy(p => p.Position); - return _message.Name + "(" + String.Join(", ", parameters.Select(p => p.Name + " " + p.GetSqlDataType(null).ToSql())) + ")"; + return _message.Name + "(" + String.Join(", ", parameters.Select(p => p.Name + " " + p.GetSqlDataType(_dataSource).ToSql())) + ")"; } set => base.ToolTipText = value; } diff --git a/MarkMpn.Sql4Cds.XTB/Autocomplete.cs b/MarkMpn.Sql4Cds.XTB/Autocomplete.cs index 930eb269..575c4bb7 100644 --- a/MarkMpn.Sql4Cds.XTB/Autocomplete.cs +++ b/MarkMpn.Sql4Cds.XTB/Autocomplete.cs @@ -539,7 +539,7 @@ public IEnumerable GetSuggestions(string text, int pos) message.IsValidAsTableValuedFunction()) { if (!Guid.TryParse(table.Key, out _)) - items.Add(new TVFAutocompleteItem(message, table.Key, currentLength)); + items.Add(new TVFAutocompleteItem(message, instance, table.Key, currentLength)); attributes.AddRange(GetMessageOutputAttributes(message, instance)); } @@ -785,7 +785,7 @@ private IEnumerable AutocompleteTableName(string currentWor // Show TVF list if (fromClause && ds.MessageCache != null) - list.AddRange(ds.MessageCache.GetAllMessages().Where(x => x.IsValidAsTableValuedFunction()).Select(x => new TVFAutocompleteItem(x, _columnOrdering, currentLength))); + list.AddRange(ds.MessageCache.GetAllMessages().Where(x => x.IsValidAsTableValuedFunction()).Select(x => new TVFAutocompleteItem(x, _columnOrdering, ds, currentLength))); } } else if (TryParseTableName(currentWord, out var instanceName, out var schemaName, out var tableName, out var parts, out var lastPartLength)) @@ -855,7 +855,7 @@ private IEnumerable AutocompleteTableName(string currentWor if (fromClause) { messages = messages.Where(e => e.IsValidAsTableValuedFunction() && e.Name.StartsWith(lastPart, StringComparison.OrdinalIgnoreCase)); - list.AddRange(messages.Select(e => new TVFAutocompleteItem(e, _columnOrdering, lastPartLength))); + list.AddRange(messages.Select(e => new TVFAutocompleteItem(e, _columnOrdering, instance, lastPartLength))); } } } @@ -1534,16 +1534,19 @@ class TVFAutocompleteItem : SqlAutocompleteItem { private readonly Message _message; private readonly ColumnOrdering _columnOrdering; + private readonly DataSource _dataSource; - public TVFAutocompleteItem(Message message, ColumnOrdering columnOrdering, int replaceLength) : base(message.Name, replaceLength, 25) + public TVFAutocompleteItem(Message message, ColumnOrdering columnOrdering, DataSource dataSource, int replaceLength) : base(message.Name, replaceLength, 25) { _message = message; _columnOrdering = columnOrdering; + _dataSource = dataSource; } - public TVFAutocompleteItem(Message message, string alias, int replaceLength) : base(alias, replaceLength, 25) + public TVFAutocompleteItem(Message message, DataSource dataSource, string alias, int replaceLength) : base(alias, replaceLength, 25) { _message = message; + _dataSource = dataSource; } public override string ToolTipTitle @@ -1564,7 +1567,7 @@ public override string ToolTipText else parameters = parameters.OrderBy(p => p.Position); - return _message.Name + "(" + String.Join(", ", parameters.Select(p => p.Name + " " + p.GetSqlDataType(null).ToSql())) + ")"; + return _message.Name + "(" + String.Join(", ", parameters.Select(p => p.Name + " " + p.GetSqlDataType(_dataSource).ToSql())) + ")"; } set => base.ToolTipText = value; }