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; | ||
|  | } |