@@ -22,18 +22,16 @@ and record_field = {
2222}
2323
2424type type_ = { tname : string ; tdiff : (type_declaration , type_modification ) t }
25- type class_modification = Unsupported
2625
2726type class_ = {
2827 cname : string ;
29- cdiff : (class_declaration , class_modification ) t ;
28+ cdiff : (class_declaration , class_declaration atomic_modification ) t ;
3029}
3130
32- type class_type_modification = Unsupported
33-
3431type cltype = {
3532 ctname : string ;
36- ctdiff : (class_type_declaration , class_type_modification ) t ;
33+ ctdiff :
34+ (class_type_declaration , class_type_declaration atomic_modification ) t ;
3735}
3836
3937type module_ = {
@@ -185,23 +183,51 @@ let value_item ~typing_env ~name ~reference ~current =
185183 Some (Value { vname = name; vdiff = Modified { reference; current } })
186184 )
187185
188- let class_item ~name ~(reference : class_declaration option )
186+ let class_item ~typing_env ~ name ~(reference : class_declaration option )
189187 ~(current : class_declaration option ) =
190188 match (reference, current) with
191189 | None , None -> None
192190 | None , Some curr_cls -> Some (Class { cname = name; cdiff = Added curr_cls })
193191 | Some ref_cls , None -> Some (Class { cname = name; cdiff = Removed ref_cls })
194- | Some _ , Some _ -> None
192+ | Some ref_cls , Some curr_cls -> (
193+ let cls_mismatch_lst =
194+ Includeclass. class_declarations typing_env ref_cls curr_cls
195+ in
196+ match cls_mismatch_lst with
197+ | [] -> None
198+ | _ ->
199+ Some
200+ (Class
201+ {
202+ cname = name;
203+ cdiff = Modified { reference = ref_cls; current = curr_cls };
204+ }))
195205
196- let class_type_item ~name ~(reference : class_type_declaration option )
206+ let class_type_item ~typing_env ~name
207+ ~(reference : class_type_declaration option )
197208 ~(current : class_type_declaration option ) =
198209 match (reference, current) with
199210 | None , None -> None
200211 | None , Some curr_class_type ->
201212 Some (Classtype { ctname = name; ctdiff = Added curr_class_type })
202213 | Some ref_class_type , None ->
203214 Some (Classtype { ctname = name; ctdiff = Removed ref_class_type })
204- | Some _ , Some _ -> None
215+ | Some ref_class_type , Some curr_class_type -> (
216+ let cls_type_mismatch_lst =
217+ Includeclass. class_type_declarations ~loc: ref_class_type.clty_loc
218+ typing_env ref_class_type curr_class_type
219+ in
220+ match cls_type_mismatch_lst with
221+ | [] -> None
222+ | _ ->
223+ Some
224+ (Classtype
225+ {
226+ ctname = name;
227+ ctdiff =
228+ Modified
229+ { reference = ref_class_type; current = curr_class_type };
230+ }))
205231
206232let rec items ~reference ~current =
207233 let env = Typing_env. for_diff ~reference ~current in
@@ -214,8 +240,8 @@ let rec items ~reference ~current =
214240 | Module -> module_item ~typing_env: env ~name ~reference ~current
215241 | Modtype -> module_type_item ~typing_env: env ~name ~reference ~current
216242 | Type -> type_item ~typing_env: env ~name ~reference ~current
217- | Class -> class_item ~name ~reference ~current
218- | Classtype -> class_type_item ~name ~reference ~current
243+ | Class -> class_item ~typing_env: env ~ name ~reference ~current
244+ | Classtype -> class_type_item ~typing_env: env ~ name ~reference ~current
219245 in
220246 Sig_item_map. diff ~diff_item: { diff_item } ref_items curr_items
221247
0 commit comments