Initial Completion support
This commit is contained in:
parent
238c2daa70
commit
682e784c20
Binary file not shown.
Binary file not shown.
|
@ -13,7 +13,7 @@ namespace UpsilonLanguageServer.Services
|
||||||
{
|
{
|
||||||
var item = RequestContext.Request.Parameters.ToObject<CompletionItem>(Utility.CamelCaseJsonSerializer);
|
var item = RequestContext.Request.Parameters.ToObject<CompletionItem>(Utility.CamelCaseJsonSerializer);
|
||||||
// Add a pair of square brackets around the inserted text.
|
// Add a pair of square brackets around the inserted text.
|
||||||
item.InsertText = $"[{item.Label}]";
|
item.InsertText = item.Label;
|
||||||
return item;
|
return item;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
@ -108,25 +109,35 @@ namespace UpsilonLanguageServer.Services
|
||||||
Session.Documents.TryRemove(textDocument.Uri, out _);
|
Session.Documents.TryRemove(textDocument.Uri, out _);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static readonly CompletionItem[] PredefinedCompletionItems =
|
|
||||||
{
|
|
||||||
new CompletionItem(".NET", CompletionItemKind.Keyword,
|
|
||||||
"Keyword1",
|
|
||||||
"Short for **.NET Framework**, a software framework by Microsoft (possibly its subsets) or later open source .NET Core.",
|
|
||||||
null),
|
|
||||||
new CompletionItem(".NET Standard", CompletionItemKind.Keyword,
|
|
||||||
"Keyword2",
|
|
||||||
"The .NET Standard is a formal specification of .NET APIs that are intended to be available on all .NET runtimes.",
|
|
||||||
null),
|
|
||||||
new CompletionItem(".NET Framework", CompletionItemKind.Keyword,
|
|
||||||
"Keyword3",
|
|
||||||
".NET Framework (pronounced dot net) is a software framework developed by Microsoft that runs primarily on Microsoft Windows.", null),
|
|
||||||
};
|
|
||||||
|
|
||||||
[JsonRpcMethod]
|
[JsonRpcMethod]
|
||||||
public async Task<CompletionList> Completion(TextDocumentIdentifier textDocument, Position position, CompletionContext context)
|
public async Task<CompletionList> Completion(TextDocumentIdentifier textDocument, Position position, CompletionContext context)
|
||||||
{
|
{
|
||||||
return new CompletionList(PredefinedCompletionItems, false);
|
if (Session.Documents.TryGetValue(textDocument.Uri, out var doc) && doc.Bound != null)
|
||||||
|
{
|
||||||
|
if (context.TriggerCharacter == '.')
|
||||||
|
{
|
||||||
|
var linePos = doc.SourceText.GetLineStartPos(position.Line);
|
||||||
|
var findNode = doc.Bound.GetNodeAtPosition(linePos + position.Character - 2);
|
||||||
|
if (findNode is BoundVariableSymbol variableSymbol)
|
||||||
|
{
|
||||||
|
if (variableSymbol.VariableSymbol is TableVariableSymbol tableSymbol)
|
||||||
|
{
|
||||||
|
return new CompletionList(
|
||||||
|
tableSymbol.Variables.Select(x => new CompletionItem(x.Name,
|
||||||
|
CompletionItemKind.Variable, x.Type.ToString(),
|
||||||
|
$"\n\n{string.Join(" \n", x.CommentValue)}")));
|
||||||
|
}
|
||||||
|
return new CompletionList(
|
||||||
|
new[]
|
||||||
|
{
|
||||||
|
new CompletionItem(findNode.Kind.ToString(), CompletionItemKind.Variable,
|
||||||
|
variableSymbol.VariableSymbol.Name, ""),
|
||||||
|
},
|
||||||
|
false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return new CompletionList(new CompletionItem[0], false);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue