Lots of improvements

This commit is contained in:
Deukhoofd 2018-12-12 22:29:47 +01:00
parent c7b8ef3463
commit d1c0a61bd1
No known key found for this signature in database
GPG Key ID: B4C087AC81641654
17 changed files with 406 additions and 65 deletions

View File

@ -0,0 +1,23 @@
{
"comments": {
"lineComment": "--"
},
"brackets": [["(", ")"], ["[", "]"], ["{", "}"]],
"autoClosingPairs": [
["(", ")"],
["[", "]"],
["{", "}"],
{ "open": "'", "close": "'", "notIn": ["string", "comment"] },
{ "open": "\"", "close": "\"", "notIn": ["string"] },
{ "open": "`", "close": "`", "notIn": ["string", "comment"] },
{ "open": "/**", "close": " */", "notIn": ["string"] }
],
"surroundingPairs": [
["{", "}"],
["[", "]"],
["(", ")"],
["'", "'"],
["\"", "\""],
["`", "`"]
]
}

View File

@ -8,7 +8,7 @@ const path = require("path");
const fs = require("fs");
// Defines the search path of your language server DLL. (.NET Core)
const languageServerPaths = [
"server/DemoLanguageServer.dll",
"./server/UpsilonLanguageServer.dll",
"../UpsilonLanguageServer/UpsilonLanguageServer/bin/Debug/netcoreapp2.1/UpsilonLanguageServer.dll"
];
function activateLanguageServer(context) {
@ -55,9 +55,9 @@ function activateLanguageServer(context) {
configurationSection: "upsilonLanguageServer",
// Notify the server about file changes to '.clientrc files contain in the workspace
fileEvents: [
vscode.workspace.createFileSystemWatcher("**/.clientrc"),
vscode.workspace.createFileSystemWatcher("**/.yup"),
vscode.workspace.createFileSystemWatcher("**/.lua"),
vscode.workspace.createFileSystemWatcher("**/*.clientrc"),
vscode.workspace.createFileSystemWatcher("**/*.yup"),
vscode.workspace.createFileSystemWatcher("**/*.lua"),
vscode.workspace.createFileSystemWatcher("**/.upsilon/*.json")
]
}

View File

@ -1 +1 @@
{"version":3,"file":"extension.js","sourceRoot":"","sources":["../src/extension.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AACb,6DAA6D;AAC7D,8EAA8E;AAE9E,iCAAiC;AACjC,wDAAwD;AACxD,6BAA6B;AAC7B,yBAAyB;AAEzB,mEAAmE;AACnE,MAAM,mBAAmB,GAAG;IAC1B,+BAA+B;IAC/B,kGAAkG;CACnG,CAAC;AAEF,SAAS,sBAAsB,CAAC,OAAgC;IAC9D,0DAA0D;IAC1D,IAAI,YAAY,GAAW,IAAI,CAAC;IAChC,KAAK,IAAI,CAAC,IAAI,mBAAmB,EAAE;QACjC,CAAC,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;QAC9B,kBAAkB;QAClB,IAAI,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE;YACpB,YAAY,GAAG,CAAC,CAAC;YACjB,MAAM;SACP;KACF;IACD,IAAI,CAAC,YAAY;QACf,MAAM,IAAI,QAAQ,CAAC,yCAAyC,CAAC,CAAC;IAChE,IAAI,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IAC1C,OAAO,CAAC,GAAG,CAAC,OAAO,YAAY,oBAAoB,CAAC,CAAC;IACrD,OAAO,CAAC,GAAG,CAAC,cAAc,QAAQ,GAAG,CAAC,CAAC;IAEvC,oFAAoF;IACpF,qCAAqC;IACrC,IAAI,aAAa,GAAiC;QAChD,GAAG,EAAE;YACH,OAAO,EAAE,QAAQ;YACjB,IAAI,EAAE,CAAC,YAAY,CAAC;YACpB,OAAO,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE;SAC3B;QACD,KAAK,EAAE;YACL,OAAO,EAAE,QAAQ;YACjB,IAAI,EAAE,CAAC,YAAY,EAAE,SAAS,CAAC;YAC/B,OAAO,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE;SAC3B;KACF,CAAC;IACF,yCAAyC;IACzC,IAAI,aAAa,GAAyC;QACxD,+CAA+C;QAC/C,gBAAgB,EAAE;YAChB;gBACE,QAAQ,EAAE,SAAS;gBACnB,MAAM,EAAE,MAAM;aACf;SACF;QACD,WAAW,EAAE;YACX,wEAAwE;YACxE,oBAAoB,EAAE,uBAAuB;YAC7C,oFAAoF;YACpF,UAAU,EAAE;gBACV,MAAM,CAAC,SAAS,CAAC,uBAAuB,CAAC,cAAc,CAAC;gBACxD,MAAM,CAAC,SAAS,CAAC,uBAAuB,CAAC,SAAS,CAAC;gBACnD,MAAM,CAAC,SAAS,CAAC,uBAAuB,CAAC,SAAS,CAAC;gBACnD,MAAM,CAAC,SAAS,CAAC,uBAAuB,CAAC,oBAAoB,CAAC;aAC/D;SACF;KACF,CAAC;IAEF,mDAAmD;IACnD,IAAI,MAAM,GAAG,IAAI,cAAc,CAAC,cAAc,CAC5C,uBAAuB,EACvB,yBAAyB,EACzB,aAAa,EACb,aAAa,CACd,CAAC;IACF,IAAI,UAAU,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC;IAEhC,iEAAiE;IACjE,sDAAsD;IACtD,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AACzC,CAAC;AAED,yDAAyD;AACzD,0EAA0E;AAC1E,SAAgB,QAAQ,CAAC,OAAgC;IACvD,OAAO,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAC;IACnD,sBAAsB,CAAC,OAAO,CAAC,CAAC;AAClC,CAAC;AAHD,4BAGC;AAED,2DAA2D;AAC3D,SAAgB,UAAU,KAAI,CAAC;AAA/B,gCAA+B"}
{"version":3,"file":"extension.js","sourceRoot":"","sources":["../src/extension.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AACb,6DAA6D;AAC7D,8EAA8E;AAE9E,iCAAiC;AACjC,wDAAwD;AACxD,6BAA6B;AAC7B,yBAAyB;AAEzB,mEAAmE;AACnE,MAAM,mBAAmB,GAAG;IAC1B,oCAAoC;IACpC,kGAAkG;CACnG,CAAC;AAEF,SAAS,sBAAsB,CAAC,OAAgC;IAC9D,0DAA0D;IAC1D,IAAI,YAAY,GAAW,IAAI,CAAC;IAChC,KAAK,IAAI,CAAC,IAAI,mBAAmB,EAAE;QACjC,CAAC,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;QAC9B,kBAAkB;QAClB,IAAI,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE;YACpB,YAAY,GAAG,CAAC,CAAC;YACjB,MAAM;SACP;KACF;IACD,IAAI,CAAC,YAAY;QACf,MAAM,IAAI,QAAQ,CAAC,yCAAyC,CAAC,CAAC;IAChE,IAAI,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IAC1C,OAAO,CAAC,GAAG,CAAC,OAAO,YAAY,oBAAoB,CAAC,CAAC;IACrD,OAAO,CAAC,GAAG,CAAC,cAAc,QAAQ,GAAG,CAAC,CAAC;IAEvC,oFAAoF;IACpF,qCAAqC;IACrC,IAAI,aAAa,GAAiC;QAChD,GAAG,EAAE;YACH,OAAO,EAAE,QAAQ;YACjB,IAAI,EAAE,CAAC,YAAY,CAAC;YACpB,OAAO,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE;SAC3B;QACD,KAAK,EAAE;YACL,OAAO,EAAE,QAAQ;YACjB,IAAI,EAAE,CAAC,YAAY,EAAE,SAAS,CAAC;YAC/B,OAAO,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE;SAC3B;KACF,CAAC;IACF,yCAAyC;IACzC,IAAI,aAAa,GAAyC;QACxD,+CAA+C;QAC/C,gBAAgB,EAAE;YAChB;gBACE,QAAQ,EAAE,SAAS;gBACnB,MAAM,EAAE,MAAM;aACf;SACF;QACD,WAAW,EAAE;YACX,wEAAwE;YACxE,oBAAoB,EAAE,uBAAuB;YAC7C,oFAAoF;YACpF,UAAU,EAAE;gBACV,MAAM,CAAC,SAAS,CAAC,uBAAuB,CAAC,eAAe,CAAC;gBACzD,MAAM,CAAC,SAAS,CAAC,uBAAuB,CAAC,UAAU,CAAC;gBACpD,MAAM,CAAC,SAAS,CAAC,uBAAuB,CAAC,UAAU,CAAC;gBACpD,MAAM,CAAC,SAAS,CAAC,uBAAuB,CAAC,oBAAoB,CAAC;aAC/D;SACF;KACF,CAAC;IAEF,mDAAmD;IACnD,IAAI,MAAM,GAAG,IAAI,cAAc,CAAC,cAAc,CAC5C,uBAAuB,EACvB,yBAAyB,EACzB,aAAa,EACb,aAAa,CACd,CAAC;IACF,IAAI,UAAU,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC;IAEhC,iEAAiE;IACjE,sDAAsD;IACtD,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AACzC,CAAC;AAED,yDAAyD;AACzD,0EAA0E;AAC1E,SAAgB,QAAQ,CAAC,OAAgC;IACvD,OAAO,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAC;IACnD,sBAAsB,CAAC,OAAO,CAAC,CAAC;AAClC,CAAC;AAHD,4BAGC;AAED,2DAA2D;AAC3D,SAAgB,UAAU,KAAI,CAAC;AAA/B,gCAA+B"}

View File

@ -1,5 +1,6 @@
{
"name": "upsilon-language-extension",
"publisher": "Deuk",
"version": "1.0.0",
"engines": {
"vscode": "^1.29.1"
@ -15,6 +16,7 @@
"aliases": [
"Upsilon"
],
"configuration": "./language-configuration.json",
"extensions": [
".yup",
".lua"
@ -30,23 +32,12 @@
],
"configuration": {
"type": "object",
"title": "Example configuration",
"title": "Upsilon configuration",
"properties": {
"upsilonLanguageServer.maxNumberOfProblems": {
"type": "number",
"default": 100,
"description": "Controls the maximum number of problems produced by the server."
},
"upsilonLanguageServer.trace.server": {
"scope": "window",
"type": "string",
"enum": [
"off",
"messages",
"verbose"
],
"default": "off",
"description": "Traces the communication between VSCode and the upsilonLanguageServer service."
}
}
}

View File

@ -9,7 +9,7 @@ import * as fs from "fs";
// Defines the search path of your language server DLL. (.NET Core)
const languageServerPaths = [
"server/DemoLanguageServer.dll",
"./server/UpsilonLanguageServer.dll",
"../UpsilonLanguageServer/UpsilonLanguageServer/bin/Debug/netcoreapp2.1/UpsilonLanguageServer.dll"
];
@ -58,9 +58,9 @@ function activateLanguageServer(context: vscode.ExtensionContext) {
configurationSection: "upsilonLanguageServer",
// Notify the server about file changes to '.clientrc files contain in the workspace
fileEvents: [
vscode.workspace.createFileSystemWatcher("**/.clientrc"),
vscode.workspace.createFileSystemWatcher("**/.yup"),
vscode.workspace.createFileSystemWatcher("**/.lua"),
vscode.workspace.createFileSystemWatcher("**/*.clientrc"),
vscode.workspace.createFileSystemWatcher("**/*.yup"),
vscode.workspace.createFileSystemWatcher("**/*.lua"),
vscode.workspace.createFileSystemWatcher("**/.upsilon/*.json")
]
}

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,216 @@
<?xml version="1.0" encoding="utf-8"?><doc>
<assembly>
<name>Microsoft.CSharp</name>
</assembly>
<members>
<member name="T:Microsoft.CSharp.RuntimeBinder.RuntimeBinderException">
<summary>Represents an error that occurs when a dynamic bind in the C# runtime binder is processed.</summary>
</member>
<member name="M:Microsoft.CSharp.RuntimeBinder.RuntimeBinderException.#ctor">
<summary>Initializes a new instance of the <see cref="T:Microsoft.CSharp.RuntimeBinder.RuntimeBinderException"></see> class.</summary>
</member>
<member name="M:Microsoft.CSharp.RuntimeBinder.RuntimeBinderException.#ctor(System.String)">
<summary>Initializes a new instance of the <see cref="T:Microsoft.CSharp.RuntimeBinder.RuntimeBinderException"></see> class that has a specified error message.</summary>
<param name="message">The message that describes the exception. The caller of this constructor is required to ensure that this string has been localized for the current system culture.</param>
</member>
<member name="M:Microsoft.CSharp.RuntimeBinder.RuntimeBinderException.#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)">
<summary>Initializes a new instance of the <see cref="T:Microsoft.CSharp.RuntimeBinder.RuntimeBinderException"></see> class that has serialized data.</summary>
<param name="info">The object that holds the serialized object data about the exception being thrown..</param>
<param name="context">The contextual information about the source or destination.</param>
</member>
<member name="M:Microsoft.CSharp.RuntimeBinder.RuntimeBinderException.#ctor(System.String,System.Exception)">
<summary>Initializes a new instance of the <see cref="T:Microsoft.CSharp.RuntimeBinder.RuntimeBinderException"></see> class that has a specified error message and a reference to the inner exception that is the cause of this exception.</summary>
<param name="message">The error message that explains the reason for the exception.</param>
<param name="innerException">The exception that is the cause of the current exception, or a null reference if no inner exception is specified.</param>
</member>
<member name="T:Microsoft.CSharp.RuntimeBinder.RuntimeBinderInternalCompilerException">
<summary>Represents an error that occurs when a dynamic bind in the C# runtime binder is processed.</summary>
</member>
<member name="M:Microsoft.CSharp.RuntimeBinder.RuntimeBinderInternalCompilerException.#ctor">
<summary>Initializes a new instance of the <see cref="T:Microsoft.CSharp.RuntimeBinder.RuntimeBinderInternalCompilerException"></see> class with a system-supplied message that describes the error.</summary>
</member>
<member name="M:Microsoft.CSharp.RuntimeBinder.RuntimeBinderInternalCompilerException.#ctor(System.String)">
<summary>Initializes a new instance of the <see cref="T:Microsoft.CSharp.RuntimeBinder.RuntimeBinderInternalCompilerException"></see> class with a specified message that describes the error.</summary>
<param name="message">The message that describes the exception. The caller of this constructor is required to ensure that this string has been localized for the current system culture.</param>
</member>
<member name="M:Microsoft.CSharp.RuntimeBinder.RuntimeBinderInternalCompilerException.#ctor(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)">
<summary>Initializes a new instance of the <see cref="T:Microsoft.CSharp.RuntimeBinder.RuntimeBinderInternalCompilerException"></see> class with serialized data.</summary>
<param name="info">The <see cref="T:System.Runtime.Serialization.SerializationInfo"></see> that holds the serialized object data about the exception being thrown.</param>
<param name="context">The <see cref="T:System.Runtime.Serialization.StreamingContext"></see> that contains contextual information about the source or destination.</param>
</member>
<member name="M:Microsoft.CSharp.RuntimeBinder.RuntimeBinderInternalCompilerException.#ctor(System.String,System.Exception)">
<summary>Initializes a new instance of the <see cref="T:Microsoft.CSharp.RuntimeBinder.RuntimeBinderInternalCompilerException"></see> class that has a specified error message and a reference to the inner exception that is the cause of this exception.</summary>
<param name="message">The error message that explains the reason for the exception.</param>
<param name="innerException">The exception that is the cause of the current exception, or a null reference if no inner exception is specified.</param>
</member>
<member name="T:Microsoft.CSharp.RuntimeBinder.Binder">
<summary>Contains factory methods to create dynamic call site binders for CSharp.</summary>
</member>
<member name="M:Microsoft.CSharp.RuntimeBinder.Binder.BinaryOperation(Microsoft.CSharp.RuntimeBinder.CSharpBinderFlags,System.Linq.Expressions.ExpressionType,System.Type,System.Collections.Generic.IEnumerable{Microsoft.CSharp.RuntimeBinder.CSharpArgumentInfo})">
<summary>Initializes a new CSharp binary operation binder.</summary>
<param name="flags">The flags with which to initialize the binder.</param>
<param name="operation">The binary operation kind.</param>
<param name="context">The <see cref="T:System.Type"></see> that indicates where this operation is used.</param>
<param name="argumentInfo">The sequence of <see cref="T:Microsoft.CSharp.RuntimeBinder.CSharpArgumentInfo"></see> instances for the arguments to this operation.</param>
<returns>Returns a new CSharp binary operation binder.</returns>
</member>
<member name="M:Microsoft.CSharp.RuntimeBinder.Binder.Convert(Microsoft.CSharp.RuntimeBinder.CSharpBinderFlags,System.Type,System.Type)">
<summary>Initializes a new CSharp convert binder.</summary>
<param name="flags">The flags with which to initialize the binder.</param>
<param name="type">The type to convert to.</param>
<param name="context">The <see cref="T:System.Type"></see> that indicates where this operation is used.</param>
<returns>Returns a new CSharp convert binder.</returns>
</member>
<member name="M:Microsoft.CSharp.RuntimeBinder.Binder.GetIndex(Microsoft.CSharp.RuntimeBinder.CSharpBinderFlags,System.Type,System.Collections.Generic.IEnumerable{Microsoft.CSharp.RuntimeBinder.CSharpArgumentInfo})">
<summary>Initializes a new CSharp get index binder.</summary>
<param name="flags">The flags with which to initialize the binder.</param>
<param name="context">The <see cref="T:System.Type"></see> that indicates where this operation is used.</param>
<param name="argumentInfo">The sequence of <see cref="T:Microsoft.CSharp.RuntimeBinder.CSharpArgumentInfo"></see> instances for the arguments to this operation.</param>
<returns>Returns a new CSharp get index binder.</returns>
</member>
<member name="M:Microsoft.CSharp.RuntimeBinder.Binder.GetMember(Microsoft.CSharp.RuntimeBinder.CSharpBinderFlags,System.String,System.Type,System.Collections.Generic.IEnumerable{Microsoft.CSharp.RuntimeBinder.CSharpArgumentInfo})">
<summary>Initializes a new CSharp get member binder.</summary>
<param name="flags">The flags with which to initialize the binder.</param>
<param name="name">The name of the member to get.</param>
<param name="context">The <see cref="T:System.Type"></see> that indicates where this operation is used.</param>
<param name="argumentInfo">The sequence of <see cref="T:Microsoft.CSharp.RuntimeBinder.CSharpArgumentInfo"></see> instances for the arguments to this operation.</param>
<returns>Returns a new CSharp get member binder.</returns>
</member>
<member name="M:Microsoft.CSharp.RuntimeBinder.Binder.Invoke(Microsoft.CSharp.RuntimeBinder.CSharpBinderFlags,System.Type,System.Collections.Generic.IEnumerable{Microsoft.CSharp.RuntimeBinder.CSharpArgumentInfo})">
<summary>Initializes a new CSharp invoke binder.</summary>
<param name="flags">The flags with which to initialize the binder.</param>
<param name="context">The <see cref="T:System.Type"></see> that indicates where this operation is used.</param>
<param name="argumentInfo">The sequence of <see cref="T:Microsoft.CSharp.RuntimeBinder.CSharpArgumentInfo"></see> instances for the arguments to this operation.</param>
<returns>Returns a new CSharp invoke binder.</returns>
</member>
<member name="M:Microsoft.CSharp.RuntimeBinder.Binder.InvokeConstructor(Microsoft.CSharp.RuntimeBinder.CSharpBinderFlags,System.Type,System.Collections.Generic.IEnumerable{Microsoft.CSharp.RuntimeBinder.CSharpArgumentInfo})">
<summary>Initializes a new CSharp invoke constructor binder.</summary>
<param name="flags">The flags with which to initialize the binder.</param>
<param name="context">The <see cref="T:System.Type"></see> that indicates where this operation is used.</param>
<param name="argumentInfo">The sequence of <see cref="T:Microsoft.CSharp.RuntimeBinder.CSharpArgumentInfo"></see> instances for the arguments to this operation.</param>
<returns>Returns a new CSharp invoke constructor binder.</returns>
</member>
<member name="M:Microsoft.CSharp.RuntimeBinder.Binder.InvokeMember(Microsoft.CSharp.RuntimeBinder.CSharpBinderFlags,System.String,System.Collections.Generic.IEnumerable{System.Type},System.Type,System.Collections.Generic.IEnumerable{Microsoft.CSharp.RuntimeBinder.CSharpArgumentInfo})">
<summary>Initializes a new CSharp invoke member binder.</summary>
<param name="flags">The flags with which to initialize the binder.</param>
<param name="name">The name of the member to invoke.</param>
<param name="typeArguments">The list of type arguments specified for this invoke.</param>
<param name="context">The <see cref="T:System.Type"></see> that indicates where this operation is used.</param>
<param name="argumentInfo">The sequence of <see cref="T:Microsoft.CSharp.RuntimeBinder.CSharpArgumentInfo"></see> instances for the arguments to this operation.</param>
<returns>Returns a new CSharp invoke member binder.</returns>
</member>
<member name="M:Microsoft.CSharp.RuntimeBinder.Binder.IsEvent(Microsoft.CSharp.RuntimeBinder.CSharpBinderFlags,System.String,System.Type)">
<summary>Initializes a new CSharp is event binder.</summary>
<param name="flags">The flags with which to initialize the binder.</param>
<param name="name">The name of the event to look for.</param>
<param name="context">The <see cref="T:System.Type"></see> that indicates where this operation is used.</param>
<returns>Returns a new CSharp is event binder.</returns>
</member>
<member name="M:Microsoft.CSharp.RuntimeBinder.Binder.SetIndex(Microsoft.CSharp.RuntimeBinder.CSharpBinderFlags,System.Type,System.Collections.Generic.IEnumerable{Microsoft.CSharp.RuntimeBinder.CSharpArgumentInfo})">
<summary>Initializes a new CSharp set index binder.</summary>
<param name="flags">The flags with which to initialize the binder.</param>
<param name="context">The <see cref="T:System.Type"></see> that indicates where this operation is used.</param>
<param name="argumentInfo">The sequence of <see cref="T:Microsoft.CSharp.RuntimeBinder.CSharpArgumentInfo"></see> instances for the arguments to this operation.</param>
<returns>Returns a new CSharp set index binder.</returns>
</member>
<member name="M:Microsoft.CSharp.RuntimeBinder.Binder.SetMember(Microsoft.CSharp.RuntimeBinder.CSharpBinderFlags,System.String,System.Type,System.Collections.Generic.IEnumerable{Microsoft.CSharp.RuntimeBinder.CSharpArgumentInfo})">
<summary>Initializes a new CSharp set member binder.</summary>
<param name="flags">The flags with which to initialize the binder.</param>
<param name="name">The name of the member to set.</param>
<param name="context">The <see cref="T:System.Type"></see> that indicates where this operation is used.</param>
<param name="argumentInfo">The sequence of <see cref="T:Microsoft.CSharp.RuntimeBinder.CSharpArgumentInfo"></see> instances for the arguments to this operation.</param>
<returns>Returns a new CSharp set member binder.</returns>
</member>
<member name="M:Microsoft.CSharp.RuntimeBinder.Binder.UnaryOperation(Microsoft.CSharp.RuntimeBinder.CSharpBinderFlags,System.Linq.Expressions.ExpressionType,System.Type,System.Collections.Generic.IEnumerable{Microsoft.CSharp.RuntimeBinder.CSharpArgumentInfo})">
<summary>Initializes a new CSharp unary operation binder.</summary>
<param name="flags">The flags with which to initialize the binder.</param>
<param name="operation">The unary operation kind.</param>
<param name="context">The <see cref="T:System.Type"></see> that indicates where this operation is used.</param>
<param name="argumentInfo">The sequence of <see cref="T:Microsoft.CSharp.RuntimeBinder.CSharpArgumentInfo"></see> instances for the arguments to this operation.</param>
<returns>Returns a new CSharp unary operation binder.</returns>
</member>
<member name="T:Microsoft.CSharp.RuntimeBinder.CSharpArgumentInfo">
<summary>Represents information about C# dynamic operations that are specific to particular arguments at a call site. Instances of this class are generated by the C# compiler.</summary>
</member>
<member name="M:Microsoft.CSharp.RuntimeBinder.CSharpArgumentInfo.Create(Microsoft.CSharp.RuntimeBinder.CSharpArgumentInfoFlags,System.String)">
<summary>Initializes a new instance of the <see cref="T:Microsoft.CSharp.RuntimeBinder.CSharpArgumentInfo"></see> class.</summary>
<param name="flags">The flags for the argument.</param>
<param name="name">The name of the argument, if named; otherwise null.</param>
<returns>A new instance of the <see cref="Microsoft.CSharp.RuntimeBinder.CSharpArgumentInfo"></see> class.</returns>
</member>
<member name="T:Microsoft.CSharp.RuntimeBinder.CSharpArgumentInfoFlags">
<summary>Represents information about C# dynamic operations that are specific to particular arguments at a call site. Instances of this class are generated by the C# compiler.</summary>
</member>
<member name="F:Microsoft.CSharp.RuntimeBinder.CSharpArgumentInfoFlags.Constant">
<summary>The argument is a constant.</summary>
<returns></returns>
</member>
<member name="F:Microsoft.CSharp.RuntimeBinder.CSharpArgumentInfoFlags.IsOut">
<summary>The argument is passed to an out parameter.</summary>
<returns></returns>
</member>
<member name="F:Microsoft.CSharp.RuntimeBinder.CSharpArgumentInfoFlags.IsRef">
<summary>The argument is passed to a ref parameter.</summary>
<returns></returns>
</member>
<member name="F:Microsoft.CSharp.RuntimeBinder.CSharpArgumentInfoFlags.IsStaticType">
<summary>The argument is a <see cref="T:System.Type"></see> indicating an actual type name used in source. Used only for target objects in static calls.</summary>
<returns></returns>
</member>
<member name="F:Microsoft.CSharp.RuntimeBinder.CSharpArgumentInfoFlags.NamedArgument">
<summary>The argument is a named argument.</summary>
<returns></returns>
</member>
<member name="F:Microsoft.CSharp.RuntimeBinder.CSharpArgumentInfoFlags.None">
<summary>No additional information to represent.</summary>
<returns></returns>
</member>
<member name="F:Microsoft.CSharp.RuntimeBinder.CSharpArgumentInfoFlags.UseCompileTimeType">
<summary>The argument&amp;#39;s compile-time type should be considered during binding.</summary>
<returns></returns>
</member>
<member name="T:Microsoft.CSharp.RuntimeBinder.CSharpBinderFlags">
<summary>Represents information about C# dynamic operations that are not specific to particular arguments at a call site. Instances of this class are generated by the C# compiler.</summary>
</member>
<member name="F:Microsoft.CSharp.RuntimeBinder.CSharpBinderFlags.BinaryOperationLogical">
<summary>The binder represents a logical AND or logical OR that is part of a conditional logical operator evaluation.</summary>
<returns></returns>
</member>
<member name="F:Microsoft.CSharp.RuntimeBinder.CSharpBinderFlags.CheckedContext">
<summary>The evaluation of this binder happens in a checked context.</summary>
<returns></returns>
</member>
<member name="F:Microsoft.CSharp.RuntimeBinder.CSharpBinderFlags.ConvertArrayIndex">
<summary>The binder represents an implicit conversion for use in an array creation expression.</summary>
<returns></returns>
</member>
<member name="F:Microsoft.CSharp.RuntimeBinder.CSharpBinderFlags.ConvertExplicit">
<summary>The binder represents an explicit conversion.</summary>
<returns></returns>
</member>
<member name="F:Microsoft.CSharp.RuntimeBinder.CSharpBinderFlags.InvokeSimpleName">
<summary>The binder represents an invoke on a simple name.</summary>
<returns></returns>
</member>
<member name="F:Microsoft.CSharp.RuntimeBinder.CSharpBinderFlags.InvokeSpecialName">
<summary>The binder represents an invoke on a specialname.</summary>
<returns></returns>
</member>
<member name="F:Microsoft.CSharp.RuntimeBinder.CSharpBinderFlags.None">
<summary>There is no additional information required for this binder.</summary>
<returns></returns>
</member>
<member name="F:Microsoft.CSharp.RuntimeBinder.CSharpBinderFlags.ResultDiscarded">
<summary>The binder is used in a position that does not require a result, and can therefore bind to a void returning method.</summary>
<returns></returns>
</member>
<member name="F:Microsoft.CSharp.RuntimeBinder.CSharpBinderFlags.ResultIndexed">
<summary>The result of any bind is going to be indexed get a set index or get index binder.</summary>
<returns></returns>
</member>
<member name="F:Microsoft.CSharp.RuntimeBinder.CSharpBinderFlags.ValueFromCompoundAssignment">
<summary>The value in this set index or set member comes a compound assignment operator.</summary>
<returns></returns>
</member>
</members>
</doc>

View File

@ -10,7 +10,8 @@
"Upsilon/1.0.0": {
"dependencies": {
"NETStandard.Library": "2.0.3",
"System.Collections.Immutable": "1.5.0"
"System.Collections.Immutable": "1.5.0",
"Microsoft.CSharp": "4.0.0.0"
},
"runtime": {
"Upsilon.dll": {}
@ -29,6 +30,14 @@
"fileVersion": "4.6.26515.6"
}
}
},
"Microsoft.CSharp/4.0.0.0": {
"runtime": {
"Microsoft.CSharp.dll": {
"assemblyVersion": "4.0.0.0",
"fileVersion": "4.6.26515.6"
}
}
}
}
},
@ -58,6 +67,11 @@
"sha512": "sha512-RGxi2aQoXgZ5ge0zxrKqI4PU9LrYYoLC+cnEnWXKsSduCOUhE1GEAAoTexUVT8RZOILQyy1B27HC8Xw/XLGzdQ==",
"path": "system.collections.immutable/1.5.0",
"hashPath": "system.collections.immutable.1.5.0.nupkg.sha512"
},
"Microsoft.CSharp/4.0.0.0": {
"type": "reference",
"serviceable": false,
"sha512": ""
}
}
}

View File

@ -1,8 +1,9 @@
using System;
using System.Collections.Generic;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using Upsilon.Binder.VariableSymbols;
using Upsilon.BoundTypes;
using Upsilon.StandardLibraries;
using Type = Upsilon.BaseTypes.Type;
namespace UpsilonLanguageServer
@ -24,18 +25,123 @@ namespace UpsilonLanguageServer
var value = (JObject)innerProperty.Value;
var type = value.GetValue("type", StringComparison.InvariantCultureIgnoreCase)?.ToString();
var comment = value.GetValue("comment", StringComparison.InvariantCultureIgnoreCase)?.ToString();
dic.Add(propertyName, new UserDataBoundProperty()
if (string.Equals("function", type, StringComparison.InvariantCultureIgnoreCase))
{
Name = propertyName,
ActualType = type,
Comment = comment,
Type = ParseType(type)
});
ParseMethod(value, dic, propertyName, type, comment);
}
else
{
dic.Add(propertyName.ToLowerInvariant(), new UserDataBoundProperty()
{
Name = propertyName,
ActualType = type,
Comment = comment,
Type = ParseType(type)
});
}
}
BoundTypeHandler.LoadUserDataTypeDefinition(new UserDataBoundTypeDefinition(typeName, dic));
}
}
private static void ParseMethod(JObject value, IDictionary<string, UserDataBoundProperty> dic, string propertyName, string type, string comment)
{
var returnType = value.GetValue("returns", StringComparison.InvariantCultureIgnoreCase)?.ToString();
var parameters = new List<UserDataBoundFunctionParameter>();
if (value.GetValue("Parameters", StringComparison.InvariantCultureIgnoreCase) is JObject parameterJson)
{
var properties = parameterJson.Properties();
foreach (var property in properties)
{
var parameterName = property.Name;
var parameterValue = (JObject) property.Value;
var parType = parameterValue.GetValue("type", StringComparison.InvariantCultureIgnoreCase)
?.ToString();
var parComment = parameterValue.GetValue("comment", StringComparison.InvariantCultureIgnoreCase)
?.ToString();
var isOptional = parameterValue.GetValue("IsOptional", StringComparison.InvariantCultureIgnoreCase)
?.ToObject<bool>();
parameters.Add(new UserDataBoundFunctionParameter()
{
Name = parameterName,
Type = ParseType(parType),
Comment = parComment,
IsOptional = isOptional.HasValue && isOptional.Value
});
}
}
dic.Add(propertyName.ToLowerInvariant(), new UserDataBoundMethod()
{
Name = propertyName,
ActualType = type,
Comment = comment,
Type = ParseType(type),
ResultType = ParseType(returnType),
Parameters = parameters.ToArray()
});
}
public static void LoadStaticVariables(string fileContent)
{
StaticScope.BoundScope = StaticScope.CreateStandardLibrary().Item2;
var json = JObject.Parse(fileContent);
foreach (var property in json.Properties())
{
var name = property.Name;
var obj = (JObject)property.Value;
var stringType = obj.GetValue("type", StringComparison.InvariantCultureIgnoreCase).ToString().ToLowerInvariant();
var comments = obj.GetValue("comment", StringComparison.InvariantCultureIgnoreCase)?.ToString()
.Split('\n');
var type = ParseType(stringType);
if (type == Type.UserData)
{
var boundType = BoundTypeHandler.GetTypeDefinition(stringType);
if (boundType != null)
{
StaticScope.BoundScope.AssignToNearest(new UserDataVariableSymbol(name, boundType){CommentValue = comments});
}
else
{
StaticScope.BoundScope.AssignToNearest(new UserDataVariableSymbol(name, Type.Unknown){CommentValue = comments});
}
}
else if (type == Type.Function)
{
var returnType = obj.GetValue("returns", StringComparison.InvariantCultureIgnoreCase).ToString().ToLowerInvariant();
var parameters = new List<InternalFunctionVariableSymbol.InternalFunctionParameter>();
if (obj.GetValue("Parameters", StringComparison.InvariantCultureIgnoreCase) is JObject parameterJson)
{
var properties = parameterJson.Properties();
foreach (var prop in properties)
{
var parameterValue = (JObject) prop.Value;
var parType = parameterValue.GetValue("type", StringComparison.InvariantCultureIgnoreCase)
?.ToString();
var parsedType = ParseType(parType);
var isOptional = parameterValue.GetValue("IsOptional", StringComparison.InvariantCultureIgnoreCase)
?.ToObject<bool>();
parameters.Add(new InternalFunctionVariableSymbol.InternalFunctionParameter(parsedType,
isOptional.HasValue && isOptional.Value));
}
}
var parsedReturnType = ParseType(returnType);
StaticScope.BoundScope.AssignToNearest(new InternalFunctionVariableSymbol(name, false,
parsedReturnType, parameters.ToArray())
{
CommentValue = comments
});
}
else
{
StaticScope.BoundScope.AssignToNearest(new VariableSymbol(property.Name,
type, false)
{
CommentValue = comments
});
}
}
}
private static Type ParseType(string input)

View File

@ -39,7 +39,8 @@ namespace UpsilonLanguageServer
private static readonly ScriptOptions Options = new ScriptOptions()
{
ThrowExceptionOnError = false,
SaveDataComments = true
SaveDataComments = true,
};
private static async Task RealLint(TextDocument document, int maxNumberOfProblems, SessionDocument session,

View File

@ -16,9 +16,9 @@ using Microsoft.Extensions.Logging.Debug;
namespace UpsilonLanguageServer
{
static class Program
internal static class Program
{
static void Main(string[] args)
private static void Main(string[] args)
{
var debugMode = args.Any(a => a.Equals("--debug", StringComparison.OrdinalIgnoreCase));
#if WAIT_FOR_DEBUGGER

View File

@ -25,6 +25,11 @@ namespace UpsilonLanguageServer.Services
{
BoundTypeParser.LoadBoundTypes(File.ReadAllText(typesConfigFile));
}
var staticConfigFile = configPath + "/static.json";
if (File.Exists(staticConfigFile))
{
BoundTypeParser.LoadStaticVariables(File.ReadAllText(staticConfigFile));
}
}
return new InitializeResult(new ServerCapabilities
{

View File

@ -8,6 +8,7 @@ using JsonRpc.Standard.Contracts;
using LanguageServer.VsCode;
using LanguageServer.VsCode.Contracts;
using Upsilon.Binder;
using Upsilon.Binder.VariableSymbols;
using Upsilon.BoundTypes;
using Upsilon.Utilities;
using Type = Upsilon.BaseTypes.Type;
@ -148,7 +149,7 @@ namespace UpsilonLanguageServer.Services
if (node is BoundFullStopIndexExpression indexExpression)
{
var expression = indexExpression.Expression;
var variableSymbol = ResolveVariable(expression);
var variableSymbol = Binder.ResolveVariable(expression, null);
var result = await GetListFromVariableSymbol(variableSymbol);
if (result != null)
{
@ -166,7 +167,7 @@ namespace UpsilonLanguageServer.Services
variables.Select(x =>
{
var (key, value) = x;
return new CompletionItem(key,
return new CompletionItem(value.Name,
CompletionItemKind.Variable, value.Type.ToString(),
x.Value.CommentValue == null
? ""
@ -179,7 +180,7 @@ namespace UpsilonLanguageServer.Services
private static async Task<CompletionList> GetListFromVariableSymbol(VariableSymbol variableSymbol)
{
if (variableSymbol is FunctionParameterSymbol parameterSymbol &&
if (variableSymbol is UserDataVariableSymbol parameterSymbol &&
parameterSymbol.BoundTypeDefinition is UserDataBoundTypeDefinition udBoundDef)
{
return new CompletionList(
@ -206,34 +207,5 @@ namespace UpsilonLanguageServer.Services
return null;
}
private VariableSymbol ResolveVariable(BoundExpression expression)
{
if (expression.Kind == BoundKind.VariableExpression)
{
var variableExpression = (BoundVariableExpression) expression;
return variableExpression.Variable.VariableSymbol;
}
if (expression.Kind == BoundKind.BoundFullstopIndexExpression)
{
var fullStopIndexExpression = (BoundFullStopIndexExpression) expression;
var indexerExpression = fullStopIndexExpression.Expression;
var indexerVariable = ResolveVariable(indexerExpression);
if (indexerVariable.Type == Type.Table)
{
return ((TableVariableSymbol)indexerVariable).Variables[fullStopIndexExpression.Index];
}
if (indexerVariable.Type == Type.UserData)
{
var bDefProperty = ((UserDataBoundTypeDefinition) ((FunctionParameterSymbol) indexerVariable)
.BoundTypeDefinition).Properties[fullStopIndexExpression.Index];
var boundDef = BoundTypeHandler.GetTypeDefinition(bDefProperty.ActualType);
return new FunctionParameterSymbol(fullStopIndexExpression.Index, boundDef);
}
}
return null;
}
}
}

View File

@ -51,7 +51,7 @@ namespace UpsilonLanguageServer.Services
StringComparison.InvariantCultureIgnoreCase))
{
var name = Path.GetFileName(localPath);
if (string.Equals(Path.GetFileName(localPath), "types.json",
if (string.Equals(name, "types.json",
StringComparison.InvariantCultureIgnoreCase))
{
if (change.Type == FileChangeType.Created || change.Type == FileChangeType.Changed)
@ -64,6 +64,19 @@ namespace UpsilonLanguageServer.Services
}
}
}
else if (string.Equals(name, "static.json",
StringComparison.InvariantCultureIgnoreCase))
{
if (change.Type == FileChangeType.Created || change.Type == FileChangeType.Changed)
{
BoundTypeParser.LoadStaticVariables(File.ReadAllText(localPath));
foreach (var doc in Session.Documents.Values)
{
var diag = await DiagnosticProvider.LintDocument(doc.Document, doc, Session.Settings.MaxNumberOfProblems);
await Client.Document.PublishDiagnostics(doc.Document.Uri, diag);
}
}
}
}
}
}