Browse Source

[json] change path representation

closes #7152
Simon Krajewski 7 years ago
parent
commit
ab2151f1b8

+ 13 - 14
src/context/display/displayEmitter.ml

@@ -56,12 +56,11 @@ let completion_type_of_type ctx ?(values=PMap.empty) t =
 		with _ ->
 			Unimported
 	in
-	let ctpath path = {
-		ct_dot_path = path;
-		ct_import_status = get_import_status path;
-	} in
-	let rec ppath path tl = {
-		ct_path = ctpath path;
+	let rec ppath mpath tpath tl = {
+		ct_pack = fst tpath;
+		ct_module_name = snd mpath;
+		ct_type_name = snd tpath;
+		ct_import_status = get_import_status tpath;
 		ct_params = List.map (from_type PMap.empty) tl;
 	}
 	and funarg value (name,opt,t) = {
@@ -80,20 +79,20 @@ let completion_type_of_type ctx ?(values=PMap.empty) t =
 			from_type values (lazy_type r)
 		| TInst({cl_kind = KTypeParameter _} as c,_) ->
 			CTInst ({
-				ct_path = {
-					ct_dot_path = c.cl_path;
-					ct_import_status = Imported;
-				};
+				ct_pack = fst c.cl_path;
+				ct_module_name = snd c.cl_module.m_path;
+				ct_type_name = snd c.cl_path;
+				ct_import_status = Imported;
 				ct_params = [];
 			})
 		| TInst(c,tl) ->
-			CTInst (ppath c.cl_path tl)
+			CTInst (ppath c.cl_module.m_path c.cl_path tl)
 		| TEnum(en,tl) ->
-			CTEnum (ppath en.e_path tl)
+			CTEnum (ppath en.e_module.m_path en.e_path tl)
 		| TType(td,tl) ->
-			CTTypedef (ppath td.t_path tl)
+			CTTypedef (ppath td.t_module.m_path td.t_path tl)
 		| TAbstract(a,tl) ->
-			CTAbstract (ppath a.a_path tl)
+			CTAbstract (ppath a.a_module.m_path a.a_path tl)
 		| TFun(tl,t) when not (PMap.is_empty values) ->
 			let get_arg n = try Some (PMap.find n values) with Not_found -> None in
 			CTFunction {

+ 12 - 11
src/core/display/completionItem.ml

@@ -262,14 +262,13 @@ module PackageContentKind = struct
 end
 
 module CompletionType = struct
-	type ct_path = {
-		ct_dot_path : path;
-		ct_import_status : ImportStatus.t;
-	}
 
-	and ct_path_with_params = {
-		ct_path : ct_path;
+	type ct_path_with_params = {
+		ct_pack : string list;
+		ct_type_name : string;
+		ct_module_name : string;
 		ct_params : t list;
+		ct_import_status : ImportStatus.t;
 	}
 
 	and ct_function_argument = {
@@ -303,16 +302,18 @@ module CompletionType = struct
 		| CTFunction of ct_function
 		| CTAnonymous of ct_anonymous
 		| CTDynamic of t option
-
+(*
 	let generate_path path =
 		jobject [
 			"pack",jarray (List.map jstring (fst path.ct_dot_path));
 			"name",jstring (snd path.ct_dot_path);
 			"importStatus",jint (ImportStatus.to_int path.ct_import_status);
-		]
+		] *)
 
 	let rec generate_path_with_params ctx pwp = jobject [
-		"path",generate_path pwp.ct_path;
+		"pack",jlist jstring pwp.ct_pack;
+		"moduleName",jstring pwp.ct_module_name;
+		"typeName",jstring pwp.ct_type_name;
 		"params",jlist (generate_type ctx) pwp.ct_params;
 	]
 
@@ -562,11 +563,11 @@ let to_json ctx item =
 				"kind",jint (PackageContentKind.to_int kind);
 			] in
 			"Package",jobject [
-				"path",generate_path path;
+				"path",generate_package_path (fst path @ [snd path]);
 				"contents",jlist generate_package_content contents;
 			]
 		| ITModule path -> "Module",jobject [
-			"path",generate_path path;
+			"path",generate_module_path path;
 		]
 		| ITLiteral s -> "Literal",jobject [
 			"name",jstring s;

+ 32 - 20
src/core/json/genjson.ml

@@ -25,11 +25,23 @@ let jtodo = Json.JNull
 let jopt f o = Option.map_default f Json.JNull o
 let jlist f o = jarray (List.map f o)
 
-let generate_path path =
-	jobject [
-		"pack",jarray (List.map jstring (fst path));
-		"name",jstring (snd path)
-	]
+let generate_package_path' pack = [
+	("pack",jarray (List.map jstring pack))
+]
+
+let generate_package_path pack = jobject (generate_package_path' pack)
+
+let generate_module_path' mpath =
+	("moduleName",jstring (snd mpath)) ::
+	generate_package_path' (fst mpath)
+
+let generate_module_path mpath = jobject (generate_module_path' mpath)
+
+let generate_type_path' mpath tpath =
+	("typeName",jstring (snd tpath)) ::
+	generate_module_path' mpath
+
+let generate_type_path mpath tpath = jobject (generate_type_path' mpath tpath)
 
 let generate_adt ctx tpath name args =
 	let field = ("kind",jstring name) in
@@ -39,11 +51,11 @@ let generate_adt ctx tpath name args =
 	in
 	jobject fields
 
-let class_ref ctx c = generate_path c.cl_path
-let enum_ref ctx en = generate_path en.e_path
-let typedef_ref ctx td = generate_path td.t_path
-let abstract_ref ctx a = generate_path a.a_path
-let moduletype_ref ctx mt = generate_path (t_path mt)
+let class_ref ctx c = generate_type_path c.cl_module.m_path c.cl_path
+let enum_ref ctx en = generate_type_path en.e_module.m_path  en.e_path
+let typedef_ref ctx td = generate_type_path td.t_module.m_path td.t_path
+let abstract_ref ctx a = generate_type_path a.a_module.m_path a.a_path
+let moduletype_ref ctx mt = generate_module_path (t_path mt)
 let classfield_ref ctx cf = jstring cf.cf_name
 let enumfield_ref ctx ef = jstring ef.ef_name
 let local_ref ctx v = jint v.v_id
@@ -171,10 +183,10 @@ let rec generate_type ctx t =
 			(* return_partial_type := false; *)
 			loop t
 		| TDynamic t -> "TDynamic",Some (if t == t_dynamic then jnull else generate_type ctx t)
-		| TInst(c,tl) -> "TInst",Some (generate_path_with_params ctx c.cl_path tl)
-		| TEnum(en,tl) -> "TEnum",Some (generate_path_with_params ctx en.e_path tl)
-		| TType(td,tl) -> "TType",Some (generate_path_with_params ctx td.t_path tl)
-		| TAbstract(a,tl) -> "TAbstract",Some (generate_path_with_params ctx a.a_path tl)
+		| TInst(c,tl) -> "TInst",Some (generate_type_path_with_params ctx c.cl_module.m_path c.cl_path tl)
+		| TEnum(en,tl) -> "TEnum",Some (generate_type_path_with_params ctx en.e_module.m_path en.e_path tl)
+		| TType(td,tl) -> "TType",Some (generate_type_path_with_params ctx td.t_module.m_path td.t_path tl)
+		| TAbstract(a,tl) -> "TAbstract",Some (generate_type_path_with_params ctx a.a_module.m_path a.a_path tl)
 		| TAnon an -> "TAnonymous", Some(generate_anon ctx an)
 		| TFun(tl,tr) -> "TFun", Some (jobject (generate_function_signature ctx tl tr))
 	in
@@ -219,9 +231,9 @@ and generate_function_signature ctx tl tr =
 and generate_types ctx tl =
 	jlist (generate_type ctx) tl
 
-and generate_path_with_params ctx path tl =
+and generate_type_path_with_params ctx mpath tpath tl =
 	jobject [
-		"path",generate_path path;
+		"path",generate_type_path mpath tpath;
 		"params",generate_types ctx tl;
 	]
 
@@ -348,7 +360,7 @@ and generate_texpr ctx e =
 	| TNew(c,tl,el) ->
 		let args = List.map (generate_texpr ctx) el in
 		"TNew",Some (jobject [
-			"path",generate_path_with_params ctx c.cl_path tl;
+			"path",generate_type_path_with_params ctx c.cl_path tl;
 			"args",jarray args;
 		]);
 	| TUnop(op,flag,e1) ->
@@ -540,7 +552,7 @@ let generate_class ctx c =
 		| KTypeParameter tl -> "KTypeParameter",Some (generate_types ctx tl)
 		| KExpr e -> "KExpr",Some (generate_expr ctx e)
 		| KGeneric -> "KGeneric",None
-		| KGenericInstance(c,tl) -> "KGenericInstance",Some (generate_path_with_params ctx c.cl_path tl)
+		| KGenericInstance(c,tl) -> "KGenericInstance",Some (generate_type_path_with_params ctx c.cl_module.m_path c.cl_path tl)
 		| KMacroType -> "KMacroType",None
 		| KGenericBuild _ -> "KGenericBuild",None
 		| KAbstractImpl a -> "KAbstractImpl",Some (abstract_ref ctx a)
@@ -641,8 +653,8 @@ let generate_module_type ctx mt =
 let generate_module ctx m =
 	jobject [
 		"id",jint m.m_id;
-		"path",generate_path m.m_path;
-		"types",jlist (fun mt -> generate_path (t_infos mt).mt_path) m.m_types;
+		"path",generate_module_path m.m_path;
+		"types",jlist (fun mt -> generate_type_path m.m_path (t_infos mt).mt_path) m.m_types;
 		"file",jstring m.m_extra.m_file;
 		"sign",jstring (Digest.to_hex m.m_extra.m_sign);
 	]

+ 28 - 17
std/haxe/display/JsonModuleTypes.hx

@@ -55,14 +55,25 @@ enum abstract ImportStatus(Int) {
 
 /* Type instance */
 
-typedef JsonPath = {
-	var pack: Array<String>;
-	var name: String;
+typedef JsonPackagePath = {
+	var pack:Array<String>;
+}
+
+typedef JsonModulePath = JsonPackagePath & {
+	var moduleName:String;
 	var ?importStatus:ImportStatus;
 }
 
-typedef JsonPathWithParams = {
-	var path: JsonPath;
+typedef JsonTypePath = JsonModulePath & {
+	var typeName:String;
+}
+
+typedef JsonStaticFieldPath = JsonTypePath & {
+	var fieldName:String;
+}
+
+typedef JsonTypePathWithParams = {
+	var path: JsonTypePath;
 	var params: JsonTypes;
 }
 
@@ -85,9 +96,9 @@ enum abstract JsonAnonStatusKind<T>(String) {
 	var AOpened;
 	var AConst;
 	var AExtend:JsonAnonStatusKind<JsonTypes>;
-	var AClassStatics:JsonAnonStatusKind<JsonPath>;
-	var AEnumStatics:JsonAnonStatusKind<JsonPath>;
-	var AAbstractStatics:JsonAnonStatusKind<JsonPath>;
+	var AClassStatics:JsonAnonStatusKind<JsonTypePath>;
+	var AEnumStatics:JsonAnonStatusKind<JsonTypePath>;
+	var AAbstractStatics:JsonAnonStatusKind<JsonTypePath>;
 }
 
 typedef JsonAnonStatus<T> = {
@@ -102,10 +113,10 @@ typedef JsonAnon = {
 
 enum abstract JsonTypeKind<T>(String) {
 	var TMono;
-	var TInst:JsonTypeKind<JsonPathWithParams>;
-	var TEnum:JsonTypeKind<JsonPathWithParams>;
-	var TType:JsonTypeKind<JsonPathWithParams>;
-	var TAbstract:JsonTypeKind<JsonPathWithParams>;
+	var TInst:JsonTypeKind<JsonTypePathWithParams>;
+	var TEnum:JsonTypeKind<JsonTypePathWithParams>;
+	var TType:JsonTypeKind<JsonTypePathWithParams>;
+	var TAbstract:JsonTypeKind<JsonTypePathWithParams>;
 	var TFun:JsonTypeKind<JsonFunctionSignature>;
 	var TAnonymous:JsonTypeKind<JsonAnon>;
 	var TDynamic:JsonTypeKind<Null<JsonType<Dynamic>>>;
@@ -274,12 +285,12 @@ typedef JsonEnumFields = Array<JsonEnumField>;
 enum abstract JsonClassKindKind<T>(String) {
 	var KNormal ;
 	var KTypeParameter:JsonClassKindKind<JsonTypes>;
-	var KExtension:JsonClassKindKind<JsonPathWithParams>;
+	var KExtension:JsonClassKindKind<JsonTypePathWithParams>;
 	var KExpr:JsonClassKindKind<JsonExpr>;
 	var KGeneric;
-	var KGenericInstance:JsonClassKindKind<JsonPathWithParams>;
+	var KGenericInstance:JsonClassKindKind<JsonTypePathWithParams>;
 	var KMacroType;
-	var KAbstractImpl:JsonClassKindKind<JsonPath>;
+	var KAbstractImpl:JsonClassKindKind<JsonTypePath>;
 	var KGenericBuild;
 }
 
@@ -292,8 +303,8 @@ typedef JsonClass = {
 	var kind: JsonClassKind<Dynamic>;
 	var isInterface: Bool;
 	var isExtern: Bool;
-	var superClass: Null<JsonPathWithParams>;
-	var interfaces: Array<JsonPathWithParams>;
+	var superClass: Null<JsonTypePathWithParams>;
+	var interfaces: Array<JsonTypePathWithParams>;
 	var fields: JsonClassFields;
 	var statics: JsonClassFields;
 	var constructor: Null<JsonClassField>;