From 3dd96c3912d971bb8622dc96d8c05100e5cbebed Mon Sep 17 00:00:00 2001 From: Francesco Zappa Nardelli Date: Thu, 24 Feb 2022 11:59:34 -0800 Subject: [PATCH] disable diamond trait inclusion relaxed checks Summary: This diff makes Hack ignore the `<<__EnableDiamondTraitInclusion>>` attribute, disabling the diamond trait inclusion relaxed checks. Reviewed By: madgen Differential Revision: D34449474 fbshipit-source-id: cb6e9c9b13a6d42f3801919dd584b15c1433995b --- hphp/hack/src/typing/nast_check/trait_reuse_check.ml | 15 +++------------ .../typecheck/trait_reuse/trait_diamond_1.good.php.exp | 11 ++++++++++- .../trait_reuse/trait_diamond_final_1.good.php.exp | 13 ++++++++++++- .../trait_diamond_final_1.good.php.legacy_decl.exp | 12 ++++++++++++ .../trait_reuse/trait_diamond_no_attr_2.bad.php.exp | 10 ++++++++++ .../trait_reuse/trait_diamond_static_1.good.php.exp | 11 ++++++++++- 6 files changed, 57 insertions(+), 15 deletions(-) rewrite hphp/hack/test/typecheck/trait_reuse/trait_diamond_1.good.php.exp (100%) rewrite hphp/hack/test/typecheck/trait_reuse/trait_diamond_final_1.good.php.exp (100%) create mode 100644 hphp/hack/test/typecheck/trait_reuse/trait_diamond_final_1.good.php.legacy_decl.exp rewrite hphp/hack/test/typecheck/trait_reuse/trait_diamond_static_1.good.php.exp (100%) diff --git a/hphp/hack/src/typing/nast_check/trait_reuse_check.ml b/hphp/hack/src/typing/nast_check/trait_reuse_check.ml index 9e3d39ffbdf..8823c48bf19 100644 --- a/hphp/hack/src/typing/nast_check/trait_reuse_check.ml +++ b/hphp/hack/src/typing/nast_check/trait_reuse_check.ml @@ -12,7 +12,6 @@ open Hh_prelude open Aast open Typing_defs module Cls = Decl_provider.Class -module SN = Naming_special_names type tgenv = { ctx: Provider_context.t; @@ -346,7 +345,7 @@ let check_reuse_final_method tgenv (c : Nast.class_) : unit = () (* Check reuse of trait with a final method ignoring diamond inclusion via use chains *) -let check_reuse_final_method_allow_diamond tgenv (c : Nast.class_) : unit = +let _check_reuse_final_method_allow_diamond tgenv (c : Nast.class_) : unit = match parent_class c with | Some (_, pstring) -> let traits_with_final_methods_via_parent = @@ -531,14 +530,6 @@ let handler = in check_diamond_import_property tgenv c; - if - Naming_attributes.mem - SN.UserAttributes.uaEnableMethodTraitDiamond - c.c_user_attributes - then - check_reuse_final_method_allow_diamond tgenv c - else begin - check_reuse_final_method tgenv c; - check_reuse_method_without_override tgenv c - end + check_reuse_final_method tgenv c; + check_reuse_method_without_override tgenv c end diff --git a/hphp/hack/test/typecheck/trait_reuse/trait_diamond_1.good.php.exp b/hphp/hack/test/typecheck/trait_reuse/trait_diamond_1.good.php.exp dissimilarity index 100% index 4269126fceb..f6dd8552111 100644 --- a/hphp/hack/test/typecheck/trait_reuse/trait_diamond_1.good.php.exp +++ b/hphp/hack/test/typecheck/trait_reuse/trait_diamond_1.good.php.exp @@ -1 +1,10 @@ -No errors +File "trait_diamond_1.good.php", line 16, characters 7-13: +Class `MyClass` inherits trait method `testFun` via multiple traits. Remove the multiple paths or override the method (Typing[4439]) + File "trait_diamond_1.good.php", line 9, characters 19-25: + Trait method is defined here + File "trait_diamond_1.good.php", line 18, characters 7-14: + `MyClass` uses `MyTrait2` + File "trait_diamond_1.good.php", line 12, characters 7-14: + `MyTrait2` uses `MyTrait1` + File "trait_diamond_1.good.php", line 17, characters 7-14: + `MyClass` uses `MyTrait1` diff --git a/hphp/hack/test/typecheck/trait_reuse/trait_diamond_final_1.good.php.exp b/hphp/hack/test/typecheck/trait_reuse/trait_diamond_final_1.good.php.exp dissimilarity index 100% index 4269126fceb..21e0819253c 100644 --- a/hphp/hack/test/typecheck/trait_reuse/trait_diamond_final_1.good.php.exp +++ b/hphp/hack/test/typecheck/trait_reuse/trait_diamond_final_1.good.php.exp @@ -1 +1,12 @@ -No errors +File "trait_diamond_final_1.good.php", line 15, characters 11-12: +Traits with final methods cannot be reused, and `T` is already used by `C`. (Typing[4186]) + File "trait_diamond_final_1.good.php", line 11, characters 16-16: + `T2` uses `T` + File "trait_diamond_final_1.good.php", line 14, characters 7-7: + `C` is defined here + File "trait_diamond_final_1.good.php", line 15, characters 7-8: + `C` uses `T1` + File "trait_diamond_final_1.good.php", line 10, characters 16-16: + `T1` uses `T` + File "trait_diamond_final_1.good.php", line 7, characters 25-25: + `T` has a final method `f` diff --git a/hphp/hack/test/typecheck/trait_reuse/trait_diamond_final_1.good.php.legacy_decl.exp b/hphp/hack/test/typecheck/trait_reuse/trait_diamond_final_1.good.php.legacy_decl.exp new file mode 100644 index 00000000000..65ef5323af0 --- /dev/null +++ b/hphp/hack/test/typecheck/trait_reuse/trait_diamond_final_1.good.php.legacy_decl.exp @@ -0,0 +1,12 @@ +File "trait_diamond_final_1.good.php", line 15, characters 11-12: +Traits with final methods cannot be reused, and `T` is already used by `C`. (Typing[4186]) + File "trait_diamond_final_1.good.php", line 11, characters 16-16: + `T2` uses `T` + File "trait_diamond_final_1.good.php", line 14, characters 7-7: + `C` is defined here + File "trait_diamond_final_1.good.php", line 15, characters 11-12: + `C` uses `T2` + File "trait_diamond_final_1.good.php", line 11, characters 16-16: + `T2` uses `T` + File "trait_diamond_final_1.good.php", line 7, characters 25-25: + `T` has a final method `f` diff --git a/hphp/hack/test/typecheck/trait_reuse/trait_diamond_no_attr_2.bad.php.exp b/hphp/hack/test/typecheck/trait_reuse/trait_diamond_no_attr_2.bad.php.exp index 4f67a554630..b8dcdc71db8 100644 --- a/hphp/hack/test/typecheck/trait_reuse/trait_diamond_no_attr_2.bad.php.exp +++ b/hphp/hack/test/typecheck/trait_reuse/trait_diamond_no_attr_2.bad.php.exp @@ -1,2 +1,12 @@ File "trait_diamond_no_attr_2.bad.php", line 13, characters 1-30: Cannot use unstable feature: `method_trait_diamond` (Parsing[1002]) +File "trait_diamond_no_attr_2.bad.php", line 14, characters 7-13: +Class `MyClass` inherits trait method `testFun` via multiple traits. Remove the multiple paths or override the method (Typing[4439]) + File "trait_diamond_no_attr_2.bad.php", line 7, characters 19-25: + Trait method is defined here + File "trait_diamond_no_attr_2.bad.php", line 16, characters 7-14: + `MyClass` uses `MyTrait2` + File "trait_diamond_no_attr_2.bad.php", line 10, characters 7-14: + `MyTrait2` uses `MyTrait1` + File "trait_diamond_no_attr_2.bad.php", line 15, characters 7-14: + `MyClass` uses `MyTrait1` diff --git a/hphp/hack/test/typecheck/trait_reuse/trait_diamond_static_1.good.php.exp b/hphp/hack/test/typecheck/trait_reuse/trait_diamond_static_1.good.php.exp dissimilarity index 100% index 4269126fceb..7469bdd2472 100644 --- a/hphp/hack/test/typecheck/trait_reuse/trait_diamond_static_1.good.php.exp +++ b/hphp/hack/test/typecheck/trait_reuse/trait_diamond_static_1.good.php.exp @@ -1 +1,10 @@ -No errors +File "trait_diamond_static_1.good.php", line 14, characters 7-13: +Class `MyClass` inherits trait method `testFun` via multiple traits. Remove the multiple paths or override the method (Typing[4439]) + File "trait_diamond_static_1.good.php", line 7, characters 26-32: + Trait method is defined here + File "trait_diamond_static_1.good.php", line 16, characters 7-14: + `MyClass` uses `MyTrait2` + File "trait_diamond_static_1.good.php", line 10, characters 7-14: + `MyTrait2` uses `MyTrait1` + File "trait_diamond_static_1.good.php", line 15, characters 7-14: + `MyClass` uses `MyTrait1` -- 2.11.4.GIT