Browse Source

[display] add moduleTypeFollowed (if != moduleType)

Jens Fischer 6 years ago
parent
commit
0d1e02a8b1
1 changed files with 9 additions and 2 deletions
  1. 9 2
      src/core/displayTypes.ml

+ 9 - 2
src/core/displayTypes.ml

@@ -108,17 +108,20 @@ module CompletionResultKind = struct
 		let i,args = match kind with
 		let i,args = match kind with
 			| CRField(item,p,iterator,keyValueIterator) ->
 			| CRField(item,p,iterator,keyValueIterator) ->
 				let t = CompletionItem.get_type item in
 				let t = CompletionItem.get_type item in
-				let t = match t with
+				let get_type t should_follow = match t with
 					| None ->
 					| None ->
 						None
 						None
 					| Some (t,ct) ->
 					| Some (t,ct) ->
 						try
 						try
+							let t = if should_follow then follow t else t in
 							let mt = module_type_of_type t in
 							let mt = module_type_of_type t in
 							let ctx = {ctx with generate_abstract_impl = true} in
 							let ctx = {ctx with generate_abstract_impl = true} in
 							Some (generate_module_type ctx mt,CompletionItem.CompletionType.to_json ctx ct)
 							Some (generate_module_type ctx mt,CompletionItem.CompletionType.to_json ctx ct)
 						with _ ->
 						with _ ->
 							None
 							None
 				in
 				in
+				let regular_type = get_type t false in
+				let followed_type = get_type t true in
 				let fields =
 				let fields =
 					("item",CompletionItem.to_json ctx item) ::
 					("item",CompletionItem.to_json ctx item) ::
 					("range",generate_pos_as_range p) ::
 					("range",generate_pos_as_range p) ::
@@ -133,11 +136,15 @@ module CompletionResultKind = struct
 							"value",generate_type ctx value
 							"value",generate_type ctx value
 						]
 						]
 					) ::
 					) ::
-					(match t with
+					(match regular_type with
 						| None -> []
 						| None -> []
 						| Some (mt,ct) -> ["type",ct;"moduleType",mt]
 						| Some (mt,ct) -> ["type",ct;"moduleType",mt]
 					)
 					)
 				in
 				in
+				let fields = if regular_type = followed_type then fields else fields @ (match followed_type with
+					| None -> []
+					| Some (mt,_) -> ["moduleTypeFollowed",mt])
+				in
 				0,Some (jobject fields)
 				0,Some (jobject fields)
 			| CRStructureField -> 1,None
 			| CRStructureField -> 1,None
 			| CRToplevel t -> 2,Some (jobject (expected_type_fields t))
 			| CRToplevel t -> 2,Some (jobject (expected_type_fields t))