552 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			Haxe
		
	
	
	
	
	
			
		
		
	
	
			552 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			Haxe
		
	
	
	
	
	
/*
 | 
						|
 * Copyright (C)2005-2019 Haxe Foundation
 | 
						|
 *
 | 
						|
 * Permission is hereby granted, free of charge, to any person obtaining a
 | 
						|
 * copy of this software and associated documentation files (the "Software"),
 | 
						|
 * to deal in the Software without restriction, including without limitation
 | 
						|
 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
 | 
						|
 * and/or sell copies of the Software, and to permit persons to whom the
 | 
						|
 * Software is furnished to do so, subject to the following conditions:
 | 
						|
 *
 | 
						|
 * The above copyright notice and this permission notice shall be included in
 | 
						|
 * all copies or substantial portions of the Software.
 | 
						|
 *
 | 
						|
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
						|
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
						|
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 | 
						|
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 | 
						|
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
 | 
						|
 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
 | 
						|
 * DEALINGS IN THE SOFTWARE.
 | 
						|
 */
 | 
						|
 | 
						|
package haxe.display;
 | 
						|
 | 
						|
import haxe.display.JsonModuleTypes;
 | 
						|
import haxe.display.Position;
 | 
						|
import haxe.display.Protocol;
 | 
						|
 | 
						|
/**
 | 
						|
	Methods of the JSON-RPC-based `--display` protocol in Haxe 4.
 | 
						|
	A lot of the methods are *inspired* by the Language Server Protocol, but there is **no** intention to be directly compatible with it.
 | 
						|
**/
 | 
						|
@:publicFields
 | 
						|
class DisplayMethods {
 | 
						|
	/**
 | 
						|
		The completion request is sent from the client to Haxe to request code completion.
 | 
						|
		Haxe automatically determines the type of completion to use based on the passed position, see `CompletionResultKind`.
 | 
						|
	**/
 | 
						|
	static inline var Completion = new HaxeRequestMethod<CompletionParams, CompletionResult>("display/completion");
 | 
						|
 | 
						|
	/**
 | 
						|
		The request is sent from the client to Haxe to resolve additional information for a given completion item.
 | 
						|
	**/
 | 
						|
	static inline var CompletionItemResolve = new HaxeRequestMethod<CompletionItemResolveParams, CompletionItemResolveResult>("display/completionItem/resolve");
 | 
						|
 | 
						|
	/**
 | 
						|
		The find references request is sent from the client to Haxe to find locations that reference the symbol at a given text document position.
 | 
						|
	**/
 | 
						|
	static inline var FindReferences = new HaxeRequestMethod<FindReferencesParams, GotoDefinitionResult>("display/references");
 | 
						|
 | 
						|
	/**
 | 
						|
		The goto definition request is sent from the client to Haxe to resolve the definition location(s) of a symbol at a given text document position.
 | 
						|
	**/
 | 
						|
	static inline var GotoDefinition = new HaxeRequestMethod<PositionParams, GotoDefinitionResult>("display/definition");
 | 
						|
 | 
						|
	/**
 | 
						|
		The goto implementation request is sent from the client to Haxe to resolve the implementation location(s) of a symbol at a given text document position.
 | 
						|
	**/
 | 
						|
	static inline var GotoImplementation = new HaxeRequestMethod<PositionParams, GotoDefinitionResult>("display/implementation");
 | 
						|
 | 
						|
	/**
 | 
						|
		The goto type definition request is sent from the client to Haxe to resolve the type definition location(s) of a symbol at a given text document position.
 | 
						|
	**/
 | 
						|
	static inline var GotoTypeDefinition = new HaxeRequestMethod<PositionParams, GotoTypeDefinitionResult>("display/typeDefinition");
 | 
						|
 | 
						|
	/**
 | 
						|
		The hover request is sent from the client to Haxe to request hover information at a given text document position.
 | 
						|
	**/
 | 
						|
	static inline var Hover = new HaxeRequestMethod<PositionParams, HoverResult>("display/hover");
 | 
						|
 | 
						|
	/**
 | 
						|
		This request is sent from the client to Haxe to determine the package for a given file, based on class paths configuration.
 | 
						|
	**/
 | 
						|
	static inline var DeterminePackage = new HaxeRequestMethod<FileParams, DeterminePackageResult>("display/package");
 | 
						|
 | 
						|
	/**
 | 
						|
		The signature help request is sent from the client to Haxe to request signature information at a given cursor position.
 | 
						|
	**/
 | 
						|
	static inline var SignatureHelp = new HaxeRequestMethod<SignatureHelpParams, SignatureHelpResult>("display/signatureHelp");
 | 
						|
 | 
						|
	/*
 | 
						|
		TODO:
 | 
						|
 | 
						|
		- finish completion
 | 
						|
		- diagnostics
 | 
						|
		- codeLens
 | 
						|
		- workspaceSymbols ("project/symbol"?)
 | 
						|
	 */
 | 
						|
}
 | 
						|
 | 
						|
/** Completion **/
 | 
						|
typedef CompletionParams = PositionParams & {
 | 
						|
	var wasAutoTriggered:Bool;
 | 
						|
 | 
						|
	/** list of metas to include in responses **/
 | 
						|
	var ?meta:Array<String>;
 | 
						|
}
 | 
						|
 | 
						|
typedef FieldResolution = {
 | 
						|
	/**
 | 
						|
		Whether it's valid to use the unqualified name of the field or not.
 | 
						|
		This is `false` if the identifier is shadowed.
 | 
						|
	**/
 | 
						|
	var isQualified:Bool;
 | 
						|
 | 
						|
	/**
 | 
						|
		The qualifier that has to be inserted to use the field if `!isQualified`.
 | 
						|
		Can either be `this` or `super` for instance fields for the type name for `static` fields.
 | 
						|
	**/
 | 
						|
	var qualifier:String;
 | 
						|
}
 | 
						|
 | 
						|
typedef DisplayLocal<T> = {
 | 
						|
	var id:Int;
 | 
						|
	var name:String;
 | 
						|
	var type:JsonType<T>;
 | 
						|
	var origin:LocalOrigin;
 | 
						|
	var capture:Bool;
 | 
						|
	var ?extra:{
 | 
						|
		var params:Array<JsonTypeParameter>;
 | 
						|
		var expr:JsonExpr;
 | 
						|
	};
 | 
						|
	var meta:JsonMetadata;
 | 
						|
	var pos:JsonPos;
 | 
						|
	var isInline:Bool;
 | 
						|
	var isFinal:Bool;
 | 
						|
}
 | 
						|
 | 
						|
enum abstract LocalOrigin(Int) {
 | 
						|
	var LocalVariable;
 | 
						|
	var Argument;
 | 
						|
	var ForVariable;
 | 
						|
	var PatternVariable;
 | 
						|
	var CatchVariable;
 | 
						|
	var LocalFunction;
 | 
						|
}
 | 
						|
 | 
						|
enum abstract ClassFieldOriginKind<T>(Int) {
 | 
						|
	/**
 | 
						|
		The field is declared on the current type itself.
 | 
						|
	**/
 | 
						|
	var Self:ClassFieldOriginKind<JsonModuleType<T>>;
 | 
						|
 | 
						|
	/**
 | 
						|
		The field is a static field brought into context via a static import
 | 
						|
		(`import pack.Module.Type.field`).
 | 
						|
	**/
 | 
						|
	var StaticImport:ClassFieldOriginKind<JsonModuleType<T>>;
 | 
						|
 | 
						|
	/**
 | 
						|
		The field is declared on a parent type, such as:
 | 
						|
		- a super class field that is not overriden
 | 
						|
		- a forwarded abstract field
 | 
						|
	**/
 | 
						|
	var Parent:ClassFieldOriginKind<JsonModuleType<T>>;
 | 
						|
 | 
						|
	/**
 | 
						|
		The field is a static extension method brought
 | 
						|
		into context with the `using` keyword.
 | 
						|
	**/
 | 
						|
	var StaticExtension:ClassFieldOriginKind<JsonModuleType<T>>;
 | 
						|
 | 
						|
	/**
 | 
						|
		This field doesn't belong to any named type, just an anonymous structure.
 | 
						|
	**/
 | 
						|
	var AnonymousStructure:ClassFieldOriginKind<JsonAnon>;
 | 
						|
 | 
						|
	/**
 | 
						|
		Special fields built into the compiler, such as:
 | 
						|
		- `code` on single-character Strings
 | 
						|
		- `bind()` on functions.
 | 
						|
	**/
 | 
						|
	var BuiltIn:ClassFieldOriginKind<NoData>;
 | 
						|
 | 
						|
	/**
 | 
						|
		The origin of this class field is unknown.
 | 
						|
	**/
 | 
						|
	var Unknown:ClassFieldOriginKind<NoData>;
 | 
						|
}
 | 
						|
 | 
						|
typedef ClassFieldOrigin<T> = {
 | 
						|
	var kind:ClassFieldOriginKind<T>;
 | 
						|
	var ?args:T;
 | 
						|
}
 | 
						|
 | 
						|
typedef ClassFieldOccurrence<T> = {
 | 
						|
	var field:JsonClassField;
 | 
						|
	var resolution:FieldResolution;
 | 
						|
	var ?origin:ClassFieldOrigin<T>;
 | 
						|
}
 | 
						|
 | 
						|
enum abstract EnumFieldOriginKind<T>(Int) {
 | 
						|
	/**
 | 
						|
		The enum value is declared on the current type itself.
 | 
						|
	**/
 | 
						|
	var Self:EnumFieldOriginKind<JsonModuleType<T>>;
 | 
						|
 | 
						|
	/**
 | 
						|
		The enum value is brought into context via a static import
 | 
						|
		(`import pack.Module.Enum.Value`).
 | 
						|
	**/
 | 
						|
	var StaticImport:EnumFieldOriginKind<JsonModuleType<T>>;
 | 
						|
}
 | 
						|
 | 
						|
typedef EnumFieldOrigin<T> = {
 | 
						|
	var kind:EnumFieldOriginKind<T>;
 | 
						|
	var ?args:T;
 | 
						|
}
 | 
						|
 | 
						|
typedef EnumFieldOccurrence<T> = {
 | 
						|
	var field:JsonEnumField;
 | 
						|
	var resolution:FieldResolution;
 | 
						|
	var ?origin:EnumFieldOrigin<T>;
 | 
						|
}
 | 
						|
 | 
						|
enum abstract Literal(String) {
 | 
						|
	var Null = "null";
 | 
						|
	var True = "true";
 | 
						|
	var False = "false";
 | 
						|
	var This = "this";
 | 
						|
	var Trace = "trace";
 | 
						|
}
 | 
						|
 | 
						|
enum abstract DisplayModuleTypeKind(Int) {
 | 
						|
	var Class;
 | 
						|
	var Interface;
 | 
						|
	var Enum;
 | 
						|
	var Abstract;
 | 
						|
	var EnumAbstract;
 | 
						|
 | 
						|
	/** A `typedef` that is just an alias for another type. **/
 | 
						|
	var TypeAlias;
 | 
						|
 | 
						|
	/** A `typedef` that is an alias for an anonymous structure. **/
 | 
						|
	var Struct;
 | 
						|
 | 
						|
	/** A type name introduced by `import as` / `import in` **/
 | 
						|
	// var ImportAlias;
 | 
						|
}
 | 
						|
 | 
						|
typedef DisplayModuleType = {
 | 
						|
	var path:JsonTypePath;
 | 
						|
	var pos:JsonPos;
 | 
						|
	var isPrivate:Bool;
 | 
						|
	var params:Array<DisplayModuleTypeParameter>;
 | 
						|
	var meta:JsonMetadata;
 | 
						|
	var doc:JsonDoc;
 | 
						|
	var isExtern:Bool;
 | 
						|
	var isFinal:Bool;
 | 
						|
	var isAbstract:Bool;
 | 
						|
	var kind:DisplayModuleTypeKind;
 | 
						|
}
 | 
						|
 | 
						|
typedef DisplayModuleTypeParameter = {
 | 
						|
	var name:String;
 | 
						|
	var meta:JsonMetadata;
 | 
						|
	var constraints:Array<JsonType<Dynamic>>;
 | 
						|
}
 | 
						|
 | 
						|
typedef DisplayLiteral<T> = {
 | 
						|
	var name:String;
 | 
						|
}
 | 
						|
 | 
						|
enum abstract MetadataTarget(String) {
 | 
						|
	var Class = "TClass";
 | 
						|
	var ClassField = "TClassField";
 | 
						|
	var Abstract = "TAbstract";
 | 
						|
	var AbstractField = "TAbstractField";
 | 
						|
	var Enum = "TEnum";
 | 
						|
	var Typedef = "TTypedef";
 | 
						|
	var AnyField = "TAnyField";
 | 
						|
	var Expr = "TExpr";
 | 
						|
	var TypeParameter = "TTypeParameter";
 | 
						|
}
 | 
						|
 | 
						|
enum abstract Platform(String) {
 | 
						|
	var Cross = "cross";
 | 
						|
	var Js = "js";
 | 
						|
	var Lua = "lua";
 | 
						|
	var Neko = "neko";
 | 
						|
	var Flash = "flash";
 | 
						|
	var Php = "php";
 | 
						|
	var Cpp = "cpp";
 | 
						|
	var Cs = "cs";
 | 
						|
	var Java = "java";
 | 
						|
	var Python = "python";
 | 
						|
	var Hl = "hl";
 | 
						|
	var Eval = "eval";
 | 
						|
}
 | 
						|
 | 
						|
typedef Metadata = {
 | 
						|
	var name:String;
 | 
						|
	var doc:JsonDoc;
 | 
						|
	var parameters:Array<String>;
 | 
						|
	var platforms:Array<Platform>;
 | 
						|
	var targets:Array<MetadataTarget>;
 | 
						|
	var internal:Bool;
 | 
						|
	var ?links:Array<String>;
 | 
						|
}
 | 
						|
 | 
						|
typedef Define = {
 | 
						|
	var name:String;
 | 
						|
	var value:Null<String>;
 | 
						|
	var doc:JsonDoc;
 | 
						|
	var parameters:Array<String>;
 | 
						|
	var platforms:Array<Platform>;
 | 
						|
	var links:Array<String>;
 | 
						|
}
 | 
						|
 | 
						|
typedef Keyword = {
 | 
						|
	var name:KeywordKind;
 | 
						|
}
 | 
						|
 | 
						|
enum abstract KeywordKind(String) to String {
 | 
						|
	var Implements = "implements";
 | 
						|
	var Extends = "extends";
 | 
						|
	var Function = "function";
 | 
						|
	var Var = "var";
 | 
						|
	var If = "if";
 | 
						|
	var Else = "else";
 | 
						|
	var While = "while";
 | 
						|
	var Do = "do";
 | 
						|
	var For = "for";
 | 
						|
	var Break = "break";
 | 
						|
	var Return = "return";
 | 
						|
	var Continue = "continue";
 | 
						|
	var Switch = "switch";
 | 
						|
	var Case = "case";
 | 
						|
	var Default = "default";
 | 
						|
	var Try = "try";
 | 
						|
	var Catch = "catch";
 | 
						|
	var New = "new";
 | 
						|
	var Throw = "throw";
 | 
						|
	var Untyped = "untyped";
 | 
						|
	var Cast = "cast";
 | 
						|
	var Macro = "macro";
 | 
						|
	var Package = "package";
 | 
						|
	var Import = "import";
 | 
						|
	var Using = "using";
 | 
						|
	var Public = "public";
 | 
						|
	var Private = "private";
 | 
						|
	var Static = "static";
 | 
						|
	var Extern = "extern";
 | 
						|
	var Dynamic = "dynamic";
 | 
						|
	var Override = "override";
 | 
						|
	var Overload = "overload";
 | 
						|
	var Class = "class";
 | 
						|
	var Interface = "interface";
 | 
						|
	var Enum = "enum";
 | 
						|
	var Abstract = "abstract";
 | 
						|
	var Typedef = "typedef";
 | 
						|
	var Final = "final";
 | 
						|
	var Inline = "inline";
 | 
						|
}
 | 
						|
 | 
						|
/* enum abstract PackageContentKind(Int) {
 | 
						|
	var Module;
 | 
						|
	var Package;
 | 
						|
}*/
 | 
						|
typedef Package = {
 | 
						|
	var path:JsonPackagePath;
 | 
						|
	// var ?contents:Array<{name:String, kind:PackageContentKind}>;
 | 
						|
}
 | 
						|
 | 
						|
typedef Module = {
 | 
						|
	var path:JsonModulePath;
 | 
						|
	// var ?contents:Array<ModuleType>;
 | 
						|
}
 | 
						|
 | 
						|
enum abstract DisplayItemKind<T>(String) {
 | 
						|
	var Local:DisplayItemKind<DisplayLocal<Dynamic>>;
 | 
						|
	var ClassField:DisplayItemKind<ClassFieldOccurrence<Dynamic>>;
 | 
						|
	var EnumField:DisplayItemKind<EnumFieldOccurrence<Dynamic>>;
 | 
						|
 | 
						|
	/** Only for the enum values in enum abstracts, other fields use `ClassField`. **/
 | 
						|
	var EnumAbstractField:DisplayItemKind<ClassFieldOccurrence<Dynamic>>;
 | 
						|
 | 
						|
	var Type:DisplayItemKind<DisplayModuleType>;
 | 
						|
	var Package:DisplayItemKind<Package>;
 | 
						|
	var Module:DisplayItemKind<Module>;
 | 
						|
	var Literal:DisplayItemKind<DisplayLiteral<Dynamic>>;
 | 
						|
	var Metadata:DisplayItemKind<Metadata>;
 | 
						|
	var Keyword:DisplayItemKind<Keyword>;
 | 
						|
	var AnonymousStructure:DisplayItemKind<JsonAnon>;
 | 
						|
	var Expression:DisplayItemKind<JsonTExpr>;
 | 
						|
	var TypeParameter:DisplayItemKind<DisplayModuleTypeParameter>;
 | 
						|
	var Define:DisplayItemKind<Define>;
 | 
						|
}
 | 
						|
 | 
						|
typedef DisplayItem<T> = {
 | 
						|
	var kind:DisplayItemKind<T>;
 | 
						|
	var args:T;
 | 
						|
	var ?type:JsonType<Dynamic>;
 | 
						|
	var ?index:Int;
 | 
						|
}
 | 
						|
 | 
						|
typedef DisplayItemOccurrence<T> = {
 | 
						|
	var range:Range;
 | 
						|
	var item:DisplayItem<T>;
 | 
						|
	var ?moduleType:JsonModuleType<Dynamic>;
 | 
						|
	var ?moduleTypeFollowed:JsonModuleType<Dynamic>;
 | 
						|
}
 | 
						|
 | 
						|
typedef FieldCompletionSubject<T> = DisplayItemOccurrence<T> & {
 | 
						|
	var ?iterator:{
 | 
						|
		var type:JsonType<Dynamic>;
 | 
						|
	};
 | 
						|
	var ?keyValueIterator:{
 | 
						|
		var key:JsonType<Dynamic>;
 | 
						|
		var value:JsonType<Dynamic>;
 | 
						|
	};
 | 
						|
}
 | 
						|
 | 
						|
typedef ToplevelCompletion<T> = {
 | 
						|
	var ?expectedType:JsonType<T>;
 | 
						|
	var ?expectedTypeFollowed:JsonType<T>;
 | 
						|
	var ?compatibleTypes:Array<JsonType<Dynamic>>;
 | 
						|
}
 | 
						|
 | 
						|
typedef StructExtensionCompletion = {
 | 
						|
	var isIntersectionType:Bool;
 | 
						|
}
 | 
						|
 | 
						|
typedef PatternCompletion<T> = ToplevelCompletion<T> & {
 | 
						|
	var isOutermostPattern:Bool;
 | 
						|
}
 | 
						|
 | 
						|
enum abstract CompletionModeKind<T>(Int) {
 | 
						|
	var Field:CompletionModeKind<FieldCompletionSubject<Dynamic>>;
 | 
						|
	var StructureField;
 | 
						|
	var Toplevel:CompletionModeKind<ToplevelCompletion<Dynamic>>;
 | 
						|
	var Metadata;
 | 
						|
	var TypeHint;
 | 
						|
	var Extends;
 | 
						|
	var Implements;
 | 
						|
	var StructExtension:CompletionModeKind<StructExtensionCompletion>;
 | 
						|
	var Import;
 | 
						|
	var Using;
 | 
						|
	var New;
 | 
						|
	var Pattern:CompletionModeKind<PatternCompletion<Dynamic>>;
 | 
						|
	var Override;
 | 
						|
	var TypeRelation;
 | 
						|
	var TypeDeclaration;
 | 
						|
}
 | 
						|
 | 
						|
typedef CompletionMode<T> = {
 | 
						|
	var kind:CompletionModeKind<T>;
 | 
						|
	var ?args:T;
 | 
						|
}
 | 
						|
 | 
						|
typedef CompletionResponse<T1, T2> = {
 | 
						|
	var items:Array<DisplayItem<T1>>;
 | 
						|
	var mode:CompletionMode<T2>;
 | 
						|
	var ?replaceRange:Range;
 | 
						|
	var ?isIncomplete:Bool;
 | 
						|
	var ?filterString:String;
 | 
						|
}
 | 
						|
 | 
						|
typedef CompletionResult = Response<Null<CompletionResponse<Dynamic, Dynamic>>>;
 | 
						|
 | 
						|
/** CompletionItem Resolve **/
 | 
						|
typedef CompletionItemResolveParams = {
 | 
						|
	var index:Int;
 | 
						|
};
 | 
						|
 | 
						|
typedef CompletionItemResolveResult = Response<{
 | 
						|
	var item:DisplayItem<Dynamic>;
 | 
						|
}>;
 | 
						|
 | 
						|
/** FindReferences **/
 | 
						|
typedef FindReferencesParams = PositionParams & {
 | 
						|
	var ?kind:FindReferencesKind;
 | 
						|
}
 | 
						|
 | 
						|
enum abstract FindReferencesKind(String) to String {
 | 
						|
	/**
 | 
						|
		Find only direct references to the requested symbol.
 | 
						|
		Does not look for references to parent or overriding methods.
 | 
						|
	**/
 | 
						|
	var Direct = "direct";
 | 
						|
 | 
						|
	/**
 | 
						|
		Find references to the base field and all the overidding fields in the inheritance chain.
 | 
						|
	**/
 | 
						|
	var WithBaseAndDescendants = "withBaseAndDescendants";
 | 
						|
 | 
						|
	/**
 | 
						|
		Find references to the requested field and references to all
 | 
						|
		descendants of the requested field.
 | 
						|
	**/
 | 
						|
	var WithDescendants = "withDescendants";
 | 
						|
}
 | 
						|
 | 
						|
/** GotoDefinition **/
 | 
						|
typedef GotoDefinitionResult = Response<Array<Location>>;
 | 
						|
 | 
						|
/** GotoTypeDefinition **/
 | 
						|
typedef GotoTypeDefinitionResult = Response<Array<Location>>;
 | 
						|
 | 
						|
/** Hover **/
 | 
						|
typedef HoverResult = Response<Null<HoverDisplayItemOccurence<Dynamic>>>;
 | 
						|
 | 
						|
typedef HoverDisplayItemOccurence<T> = DisplayItemOccurrence<T> & {
 | 
						|
	var ?expected:{
 | 
						|
		var ?type:JsonType<Dynamic>;
 | 
						|
		var ?name:{
 | 
						|
			var name:String;
 | 
						|
			var kind:HoverExpectedNameKind;
 | 
						|
			var ?doc:String;
 | 
						|
		};
 | 
						|
	};
 | 
						|
}
 | 
						|
 | 
						|
enum abstract HoverExpectedNameKind(Int) {
 | 
						|
	var FunctionArgument;
 | 
						|
	var StructureField;
 | 
						|
}
 | 
						|
 | 
						|
/** DeterminePackage **/
 | 
						|
typedef DeterminePackageResult = Response<Array<String>>;
 | 
						|
 | 
						|
/** SignatureHelp **/
 | 
						|
typedef SignatureHelpParams = PositionParams & {
 | 
						|
	var wasAutoTriggered:Bool;
 | 
						|
}
 | 
						|
 | 
						|
typedef SignatureInformation = JsonFunctionSignature & {
 | 
						|
	var ?documentation:String;
 | 
						|
}
 | 
						|
 | 
						|
enum abstract SignatureItemKind(Int) {
 | 
						|
	var Call;
 | 
						|
	var ArrayAccess;
 | 
						|
}
 | 
						|
 | 
						|
typedef SignatureItem = {
 | 
						|
	var signatures:Array<SignatureInformation>;
 | 
						|
	var activeSignature:Int;
 | 
						|
	var activeParameter:Int;
 | 
						|
	var kind:SignatureItemKind;
 | 
						|
}
 | 
						|
 | 
						|
typedef SignatureHelpResult = Response<Null<SignatureItem>>;
 | 
						|
 | 
						|
/** General types **/
 | 
						|
typedef PositionParams = FileParams & {
 | 
						|
	/** Unicode character offset in the file. **/
 | 
						|
	var offset:Int;
 | 
						|
 | 
						|
	var ?contents:String;
 | 
						|
}
 |