|
@@ -70,6 +70,7 @@ module CompletionModuleType = struct
|
|
|
doc : documentation;
|
|
|
is_extern : bool;
|
|
|
is_final : bool;
|
|
|
+ is_abstract : bool;
|
|
|
kind : CompletionModuleKind.t;
|
|
|
has_constructor : not_bool;
|
|
|
source : module_type_source;
|
|
@@ -97,6 +98,7 @@ module CompletionModuleType = struct
|
|
|
doc = d.d_doc;
|
|
|
is_extern = List.mem HExtern d.d_flags;
|
|
|
is_final = List.mem HFinal d.d_flags;
|
|
|
+ is_abstract = List.mem HAbstract d.d_flags;
|
|
|
kind = if List.mem HInterface d.d_flags then Interface else Class;
|
|
|
has_constructor = ctor;
|
|
|
source = Syntax td;
|
|
@@ -112,6 +114,7 @@ module CompletionModuleType = struct
|
|
|
doc = d.d_doc;
|
|
|
is_extern = List.mem EExtern d.d_flags;
|
|
|
is_final = false;
|
|
|
+ is_abstract = false;
|
|
|
kind = Enum;
|
|
|
has_constructor = No;
|
|
|
source = Syntax td;
|
|
@@ -129,6 +132,7 @@ module CompletionModuleType = struct
|
|
|
doc = d.d_doc;
|
|
|
is_extern = List.mem EExtern d.d_flags;
|
|
|
is_final = false;
|
|
|
+ is_abstract = false;
|
|
|
kind = kind;
|
|
|
has_constructor = if kind = Struct then No else Maybe;
|
|
|
source = Syntax td;
|
|
@@ -152,6 +156,7 @@ module CompletionModuleType = struct
|
|
|
doc = d.d_doc;
|
|
|
is_extern = List.mem AbExtern d.d_flags;
|
|
|
is_final = false;
|
|
|
+ is_abstract = false;
|
|
|
kind = if List.mem AbEnum d.d_flags then EnumAbstract else Abstract;
|
|
|
has_constructor = ctor;
|
|
|
source = Syntax td;
|
|
@@ -168,6 +173,7 @@ module CompletionModuleType = struct
|
|
|
doc = d.d_doc;
|
|
|
is_extern = List.exists (fun (f,_) -> f = AExtern) d.d_flags;
|
|
|
is_final = true;
|
|
|
+ is_abstract = false;
|
|
|
kind = Static;
|
|
|
has_constructor = No;
|
|
|
source = Syntax td;
|
|
@@ -195,27 +201,27 @@ module CompletionModuleType = struct
|
|
|
in
|
|
|
let rec ctor_info = function
|
|
|
| TClassDecl c ->
|
|
|
- (has_class_flag c CExtern),has_class_flag c CFinal,(if (has_class_flag c CInterface) then Interface else Class),ctor c
|
|
|
+ (has_class_flag c CExtern),has_class_flag c CFinal,has_class_flag c CAbstract,(if (has_class_flag c CInterface) then Interface else Class),ctor c
|
|
|
| TEnumDecl en ->
|
|
|
- en.e_extern,false,Enum,No
|
|
|
+ en.e_extern,false,false,Enum,No
|
|
|
| TTypeDecl td ->
|
|
|
let kind,ctor = match follow td.t_type with
|
|
|
| TAnon _ -> Struct,No
|
|
|
| TInst(c,_) -> TypeAlias,ctor c
|
|
|
- | TAbstract(a,_) -> let _,_,_,ctor = ctor_info (TAbstractDecl a) in TypeAlias,ctor
|
|
|
+ | TAbstract(a,_) -> let _,_,_,_,ctor = ctor_info (TAbstractDecl a) in TypeAlias,ctor
|
|
|
| _ -> TypeAlias,No
|
|
|
in
|
|
|
- false,false,kind,ctor
|
|
|
+ false,false,false,kind,ctor
|
|
|
| TAbstractDecl a ->
|
|
|
let kind = if a.a_enum then EnumAbstract else Abstract in
|
|
|
- let is_extern,is_final,ctor = match Abstract.follow_with_forward_ctor (TAbstract(a,List.map snd a.a_params)) with
|
|
|
- | TInst(c,_) -> let is_extern,is_final,_,ctor = ctor_info (TClassDecl c) in is_extern,is_final,ctor
|
|
|
- | TAbstract(a,_) -> false,false,actor a
|
|
|
- | _ -> false,false,No
|
|
|
+ let is_extern,is_final,is_abstract,ctor = match Abstract.follow_with_forward_ctor (TAbstract(a,List.map snd a.a_params)) with
|
|
|
+ | TInst(c,_) -> let is_extern,is_final,is_abstract,_,ctor = ctor_info (TClassDecl c) in is_extern,is_final,is_abstract,ctor
|
|
|
+ | TAbstract(a,_) -> false,false,false,actor a
|
|
|
+ | _ -> false,false,false,No
|
|
|
in
|
|
|
- is_extern,is_final,kind,ctor
|
|
|
+ is_extern,is_final,is_abstract,kind,ctor
|
|
|
in
|
|
|
- let is_extern,is_final,kind,ctor = ctor_info mt in
|
|
|
+ let is_extern,is_final,is_abstract,kind,ctor = ctor_info mt in
|
|
|
let infos = t_infos mt in
|
|
|
let convert_type_param (s,t) = match follow t with
|
|
|
| TInst(c,_) -> {
|
|
@@ -238,6 +244,7 @@ module CompletionModuleType = struct
|
|
|
doc = infos.mt_doc;
|
|
|
is_extern = is_extern;
|
|
|
is_final = is_final;
|
|
|
+ is_abstract = is_abstract;
|
|
|
kind = kind;
|
|
|
has_constructor = ctor;
|
|
|
source = Typed mt;
|
|
@@ -261,6 +268,7 @@ module CompletionModuleType = struct
|
|
|
("params",jlist (generate_ast_type_param ctx) cm.params) ::
|
|
|
("isExtern",jbool cm.is_extern) ::
|
|
|
("isFinal",jbool cm.is_final) ::
|
|
|
+ ("isAbstract",jbool cm.is_abstract) ::
|
|
|
(if ctx.generation_mode = GMFull then ["doc",jopt jstring (gen_doc_text_opt cm.doc)] else [])
|
|
|
| GMMinimum ->
|
|
|
match generate_minimum_metadata ctx cm.meta with
|