Fixes and tweaks for completion

This commit is contained in:
Deukhoofd 2018-12-13 19:05:17 +01:00
parent 55c5f58b47
commit 37b3fe3680
No known key found for this signature in database
GPG Key ID: B4C087AC81641654
4 changed files with 70 additions and 16 deletions

View File

@ -1,5 +1,7 @@
using System;
using JsonRpc.Standard.Contracts; using JsonRpc.Standard.Contracts;
using LanguageServer.VsCode.Contracts; using LanguageServer.VsCode.Contracts;
using Newtonsoft.Json.Linq;
namespace UpsilonLanguageServer.Services namespace UpsilonLanguageServer.Services
{ {
@ -12,8 +14,22 @@ namespace UpsilonLanguageServer.Services
public CompletionItem Resolve() public CompletionItem Resolve()
{ {
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.
item.InsertText = item.Label; item.InsertText = item.Label;
if (item.Kind == CompletionItemKind.Function)
{
var data = (JObject)item.Data;
var varcount = data.GetValue("varcount", StringComparison.InvariantCultureIgnoreCase)?.ToObject<int>();
item.InsertText += "(";
for (var i = varcount - 1; i >= 0; i--)
{
if (i != varcount - 1)
item.InsertText += ", ";
item.InsertText += $"${i}";
}
item.InsertText += ")";
}
item.InsertTextFormat = InsertTextFormat.Snippet;
return item; return item;
} }
} }

View File

@ -1,4 +1,3 @@
using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
@ -7,6 +6,7 @@ using System.Threading.Tasks;
using JsonRpc.Standard.Contracts; using JsonRpc.Standard.Contracts;
using LanguageServer.VsCode; using LanguageServer.VsCode;
using LanguageServer.VsCode.Contracts; using LanguageServer.VsCode.Contracts;
using Newtonsoft.Json.Linq;
using Upsilon.Binder; using Upsilon.Binder;
using Upsilon.Binder.VariableSymbols; using Upsilon.Binder.VariableSymbols;
using Upsilon.BoundTypes; using Upsilon.BoundTypes;
@ -197,11 +197,7 @@ namespace UpsilonLanguageServer.Services
variables.Select(x => variables.Select(x =>
{ {
var (_, value) = x; var (_, value) = x;
return new CompletionItem(value.Name, return BuildItem(value);
CompletionItemKind.Variable, value.Type.ToString(),
x.Value.CommentValue == null
? ""
: $"\n\n{string.Join(" \n", value.CommentValue)}");
})); }));
} }
@ -216,9 +212,8 @@ namespace UpsilonLanguageServer.Services
return new CompletionList( return new CompletionList(
udBoundDef.Properties.Select(x => udBoundDef.Properties.Select(x =>
{ {
var (key, value) = x; var (_, value) = x;
return new CompletionItem(key, CompletionItemKind.Variable, return BuildItem(value);
$"{value.ActualType}({value.Type})", $"{value.Comment}", null);
})); }));
} }
if (variableSymbol is TableVariableSymbol tableSymbol) if (variableSymbol is TableVariableSymbol tableSymbol)
@ -226,16 +221,59 @@ namespace UpsilonLanguageServer.Services
return new CompletionList( return new CompletionList(
tableSymbol.Variables.Select(x => tableSymbol.Variables.Select(x =>
{ {
var (key, value) = x; var (_, value) = x;
return new CompletionItem(key, return BuildItem(value);
CompletionItemKind.Variable, value.Type.ToString(),
x.Value.CommentValue == null
? ""
: $"{string.Join(" \n", value.CommentValue)}", null);
})); }));
} }
return null; return null;
} }
private static CompletionItem BuildItem(VariableSymbol symbol)
{
var kind = CompletionItemKind.Variable;
var data = new JObject();
if (symbol is FunctionVariableSymbol fun)
{
kind = CompletionItemKind.Function;
switch (fun)
{
case InternalFunctionVariableSymbol internalFunctionVariableSymbol:
data.Add("varCount", internalFunctionVariableSymbol.FunctionParameters.Length);
break;
case ScriptFunctionVariableSymbol scriptFunctionVariableSymbol:
data.Add("varCount", scriptFunctionVariableSymbol.Parameters.Length);
break;
}
}
else if (symbol is UserDataVariableSymbol boundVar)
{
if (boundVar.Type == Type.Function)
{
}
}
var documentation = symbol.CommentValue == null
? ""
: $"{string.Join(" \n", symbol.CommentValue)}";
return new CompletionItem(symbol.Name, kind, symbol.Type.ToString(), documentation, data);
}
private static CompletionItem BuildItem(UserDataBoundProperty property)
{
var kind = CompletionItemKind.Variable;
var data = new JObject();
if (property.Type == Type.Function)
{
var fun = (UserDataBoundMethod)property;
kind = CompletionItemKind.Function;
data.Add("varCount", fun.Parameters.Length);
}
const string documentation = "";
return new CompletionItem(property.Name, kind, property.Type.ToString(), documentation, data);
}
} }
} }