Skip to content

Commit

Permalink
deactivate recursive type alias check for case types under recursive_…
Browse files Browse the repository at this point in the history
…case_types flag

Summary: Under `recursive_case_types`, do not check whether case types are recursive.

Differential Revision: D63026669

fbshipit-source-id: b81923f55b2d5847e14e63cb00f4fa20ff1642a5
  • Loading branch information
Catherine Gasnier authored and facebook-github-bot committed Sep 20, 2024
1 parent 6090314 commit 781cdb1
Show file tree
Hide file tree
Showing 37 changed files with 33 additions and 147 deletions.
1 change: 1 addition & 0 deletions hphp/hack/src/client_and_server/serverConfig.ml
Original file line number Diff line number Diff line change
Expand Up @@ -492,6 +492,7 @@ let load_config config options =
|> Option.map ~f:(function
| true -> GlobalOptions.All_except []
| false -> GlobalOptions.NNone))
?recursive_case_types:(bool_opt "recursive_case_types" config)
options

let load
Expand Down
5 changes: 5 additions & 0 deletions hphp/hack/src/options/globalOptions.ml
Original file line number Diff line number Diff line change
Expand Up @@ -191,6 +191,7 @@ type t = {
hh_distc_should_disable_trace_store: bool;
hh_distc_exponential_backoff_num_retries: int;
tco_enable_abstract_method_optional_parameters: bool;
recursive_case_types: bool;
}
[@@deriving eq, show]

Expand Down Expand Up @@ -300,6 +301,7 @@ let default =
hh_distc_should_disable_trace_store = false;
hh_distc_exponential_backoff_num_retries = 10;
tco_enable_abstract_method_optional_parameters = false;
recursive_case_types = false;
}

let set
Expand Down Expand Up @@ -407,6 +409,7 @@ let set
?hh_distc_should_disable_trace_store
?hh_distc_exponential_backoff_num_retries
?tco_enable_abstract_method_optional_parameters
?recursive_case_types
options =
let setting setting option =
match setting with
Expand Down Expand Up @@ -687,6 +690,8 @@ let set
setting
tco_enable_abstract_method_optional_parameters
options.tco_enable_abstract_method_optional_parameters;
recursive_case_types =
setting recursive_case_types options.recursive_case_types;
}

let so_naming_sqlite_path t = t.so_naming_sqlite_path
Expand Down
2 changes: 2 additions & 0 deletions hphp/hack/src/options/globalOptions.mli
Original file line number Diff line number Diff line change
Expand Up @@ -278,6 +278,7 @@ type t = {
(** Number of retries when uploading/download/executing with hh_distc *)
tco_enable_abstract_method_optional_parameters: bool;
(** Enable use of optional on parameters in abstract methods *)
recursive_case_types: bool; (** Enable recursive case types *)
}
[@@deriving eq, show]

Expand Down Expand Up @@ -386,6 +387,7 @@ val set :
?hh_distc_should_disable_trace_store:bool ->
?hh_distc_exponential_backoff_num_retries:int ->
?tco_enable_abstract_method_optional_parameters:bool ->
?recursive_case_types:bool ->
t ->
t

Expand Down
3 changes: 2 additions & 1 deletion hphp/hack/src/oxidized/gen/global_options.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
// This source code is licensed under the MIT license found in the
// LICENSE file in the "hack" directory of this source tree.
//
// @generated SignedSource<<642754a417b3593b8bcb4cfa09c0f06c>>
// @generated SignedSource<<77f6a8adb4a83aec208ba4b5d6133861>>
//
// To regenerate this file, run:
// hphp/hack/src/oxidized_regen.sh
Expand Down Expand Up @@ -254,4 +254,5 @@ pub struct GlobalOptions {
pub hh_distc_should_disable_trace_store: bool,
pub hh_distc_exponential_backoff_num_retries: isize,
pub tco_enable_abstract_method_optional_parameters: bool,
pub recursive_case_types: bool,
}
1 change: 1 addition & 0 deletions hphp/hack/src/oxidized/manual/global_options_impl.rs
Original file line number Diff line number Diff line change
Expand Up @@ -144,6 +144,7 @@ impl Default for GlobalOptions {
hh_distc_should_disable_trace_store: false,
hh_distc_exponential_backoff_num_retries: 10,
tco_enable_abstract_method_optional_parameters: false,
recursive_case_types: false,
}
}
}
17 changes: 15 additions & 2 deletions hphp/hack/src/typing/typing_typedef.ml
Original file line number Diff line number Diff line change
Expand Up @@ -100,6 +100,18 @@ let casetype_def env typedef =
env
| _ -> env

let do_report_cycles env (vis : typedef_visibility) =
match vis with
| Transparent
| Opaque
| OpaqueModule ->
true
| CaseType ->
let recursive_case_types env =
(Env.get_tcopt env).GlobalOptions.recursive_case_types
in
not (recursive_case_types env)

let typedef_def ctx typedef =
let env = EnvFromDef.typedef_env ~origin:Decl_counters.TopLevel ctx typedef in
let {
Expand Down Expand Up @@ -152,8 +164,9 @@ let typedef_def ctx typedef =
~report_cycle:(t_pos, Type_expansions.Expandable.Type_alias t_name_)
t_kind
in
Type_expansions.report cycles
|> Option.iter ~f:(Typing_error_utils.add_typing_error ~env);
if do_report_cycles env t_vis then
Type_expansions.report cycles
|> Option.iter ~f:(Typing_error_utils.add_typing_error ~env);
let env = casetype_def env typedef in
Option.iter ~f:(Typing_error_utils.add_typing_error ~env) ty_err_opt2;

Expand Down
1 change: 1 addition & 0 deletions hphp/hack/src/utils/hh_config/hh_config.rs
Original file line number Diff line number Diff line change
Expand Up @@ -452,6 +452,7 @@ impl HhConfig {
hh_distc_exponential_backoff_num_retries: hhconfig.get_int_or(
"hh_distc_exponential_backoff_num_retries", default.hh_distc_exponential_backoff_num_retries)?,
tco_enable_abstract_method_optional_parameters: hhconfig.get_bool_or("enable_abstract_method_optional_parameters", default.tco_enable_abstract_method_optional_parameters)?,
recursive_case_types: hhconfig.get_bool_or("recursive_case_types", default.recursive_case_types)?,
};
let mut c = Self {
local_config,
Expand Down
1 change: 1 addition & 0 deletions hphp/hack/test/typecheck/case_type/recursive/HH_FLAGS
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
--config recursive_case_types=true
8 changes: 0 additions & 8 deletions hphp/hack/test/typecheck/case_type/recursive/forest.php.exp
Original file line number Diff line number Diff line change
@@ -1,11 +1,3 @@
ERROR: File "forest.php", line 4, characters 11-16:
Cyclic type definition (Typing[4014])
File "forest.php", line 4, characters 33-41:
Cyclic use is here
ERROR: File "forest.php", line 16, characters 11-13:
Cyclic type definition (Typing[4014])
File "forest.php", line 16, characters 24-29:
Cyclic use is here
ERROR: File "forest.php", line 10, characters 10-18:
Invalid return type (Typing[4336])
File "forest.php", line 10, characters 39-39:
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1 @@
ERROR: File "forest_w_type_alias.php", line 4, characters 11-13:
Cyclic type definition (Typing[4014])
File "forest_w_type_alias.php", line 4, characters 24-29:
Cyclic use is here
ERROR: File "forest_w_type_alias.php", line 32, characters 11-16:
Cyclic type definition (Typing[4014])
File "forest_w_type_alias.php", line 35, characters 15-23:
Cyclic use is here
No errors
Original file line number Diff line number Diff line change
@@ -1,4 +1 @@
ERROR: File "int_tree.php", line 4, characters 11-11:
Cyclic type definition (Typing[4014])
File "int_tree.php", line 4, characters 19-19:
Cyclic use is here
No errors
Original file line number Diff line number Diff line change
@@ -1,4 +1 @@
ERROR: File "list_w_type_alias.php", line 4, characters 11-13:
Cyclic type definition (Typing[4014])
File "list_w_type_alias.php", line 5, characters 20-25:
Cyclic use is here
No errors
Original file line number Diff line number Diff line change
@@ -1,7 +1,3 @@
ERROR: File "non_termination_bug_inter1.php", line 4, characters 11-13:
Cyclic type definition (Typing[4014])
File "non_termination_bug_inter1.php", line 4, characters 27-32:
Cyclic use is here
ERROR: File "non_termination_bug_inter1.php", line 9, characters 13-29:
Invalid `is` expression hint (Typing[4195])
File "non_termination_bug_inter1.php", line 9, characters 20-28:
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,3 @@
ERROR: File "non_termination_bug_inter2.php", line 4, characters 11-13:
Cyclic type definition (Typing[4014])
File "non_termination_bug_inter2.php", line 5, characters 23-28:
Cyclic use is here
ERROR: File "non_termination_bug_inter2.php", line 10, characters 13-22:
Invalid `is` expression hint (Typing[4195])
File "non_termination_bug_inter2.php", line 10, characters 13-22:
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,3 @@
ERROR: File "subtyping_mutual3b.php", line 4, characters 11-11:
Cyclic type definition (Typing[4014])
File "subtyping_mutual3b.php", line 6, characters 16-16:
Cyclic use is here
ERROR: File "subtyping_mutual3b.php", line 6, characters 11-11:
Cyclic type definition (Typing[4014])
File "subtyping_mutual3b.php", line 4, characters 16-16:
Cyclic use is here
ERROR: File "subtyping_mutual3b.php", line 29, characters 5-6:
Invalid argument (Typing[4110])
File "subtyping_mutual3b.php", line 10, characters 22-27:
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,3 @@
ERROR: File "subtyping_mutual3c.php", line 4, characters 11-11:
Cyclic type definition (Typing[4014])
File "subtyping_mutual3c.php", line 6, characters 20-20:
Cyclic use is here
ERROR: File "subtyping_mutual3c.php", line 6, characters 11-11:
Cyclic type definition (Typing[4014])
File "subtyping_mutual3c.php", line 4, characters 16-16:
Cyclic use is here
ERROR: File "subtyping_mutual3c.php", line 29, characters 5-6:
Invalid argument (Typing[4110])
File "subtyping_mutual3c.php", line 10, characters 26-26:
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,3 @@
ERROR: File "subtyping_mutual3d.php", line 6, characters 11-11:
Cyclic type definition (Typing[4014])
File "subtyping_mutual3d.php", line 4, characters 16-16:
Cyclic use is here
ERROR: File "subtyping_mutual3d.php", line 26, characters 15-16:
Invalid argument (Typing[4110])
File "subtyping_mutual3d.php", line 10, characters 22-27:
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,3 @@
ERROR: File "subtyping_mutual3d.php", line 6, characters 11-11:
Cyclic type definition (Typing[4014])
File "subtyping_mutual3d.php", line 4, characters 16-16:
Cyclic use is here
ERROR: File "subtyping_mutual3d.php", line 26, characters 15-16:
Invalid argument (Typing[4110])
File "subtyping_mutual3d.php", line 10, characters 22-27:
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,3 @@
ERROR: File "subtyping_mutual5b.php", line 4, characters 11-11:
Cyclic type definition (Typing[4014])
File "subtyping_mutual5b.php", line 6, characters 16-16:
Cyclic use is here
ERROR: File "subtyping_mutual5b.php", line 26, characters 12-13:
Invalid argument (Typing[4110])
File "subtyping_mutual5b.php", line 9, characters 19-19:
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,3 @@
ERROR: File "subtyping_mutual5b.php", line 4, characters 11-11:
Cyclic type definition (Typing[4014])
File "subtyping_mutual5b.php", line 6, characters 16-16:
Cyclic use is here
ERROR: File "subtyping_mutual5b.php", line 26, characters 12-13:
Invalid argument (Typing[4110])
File "subtyping_mutual5b.php", line 9, characters 19-19:
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,3 @@
ERROR: File "subtyping_mutual5c.php", line 4, characters 11-11:
Cyclic type definition (Typing[4014])
File "subtyping_mutual5c.php", line 6, characters 20-20:
Cyclic use is here
ERROR: File "subtyping_mutual5c.php", line 26, characters 12-13:
Invalid argument (Typing[4110])
File "subtyping_mutual5c.php", line 9, characters 19-19:
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,3 @@
ERROR: File "subtyping_mutual5c.php", line 4, characters 11-11:
Cyclic type definition (Typing[4014])
File "subtyping_mutual5c.php", line 6, characters 20-20:
Cyclic use is here
ERROR: File "subtyping_mutual5c.php", line 26, characters 12-13:
Invalid argument (Typing[4110])
File "subtyping_mutual5c.php", line 9, characters 19-19:
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,3 @@
ERROR: File "subtyping_simple1.php", line 4, characters 11-11:
Cyclic type definition (Typing[4014])
File "subtyping_simple1.php", line 4, characters 15-15:
Cyclic use is here
ERROR: File "subtyping_simple1.php", line 11, characters 17-18:
Invalid argument (Typing[4110])
File "subtyping_simple1.php", line 7, characters 24-29:
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,3 @@
ERROR: File "subtyping_simple1.php", line 4, characters 11-11:
Cyclic type definition (Typing[4014])
File "subtyping_simple1.php", line 4, characters 15-15:
Cyclic use is here
ERROR: File "subtyping_simple1.php", line 11, characters 17-18:
Invalid argument (Typing[4110])
File "subtyping_simple1.php", line 7, characters 24-29:
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,3 @@
ERROR: File "subtyping_simple1b.php", line 4, characters 11-11:
Cyclic type definition (Typing[4014])
File "subtyping_simple1b.php", line 4, characters 20-20:
Cyclic use is here
ERROR: File "subtyping_simple1b.php", line 11, characters 17-18:
Invalid argument (Typing[4110])
File "subtyping_simple1b.php", line 7, characters 24-29:
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,3 @@
ERROR: File "subtyping_simple1c.php", line 4, characters 11-11:
Cyclic type definition (Typing[4014])
File "subtyping_simple1c.php", line 4, characters 25-25:
Cyclic use is here
ERROR: File "subtyping_simple1c.php", line 12, characters 12-13:
Invalid argument (Typing[4110])
File "subtyping_simple1c.php", line 6, characters 19-19:
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,3 @@
ERROR: File "subtyping_simple2.php", line 4, characters 11-11:
Cyclic type definition (Typing[4014])
File "subtyping_simple2.php", line 4, characters 15-15:
Cyclic use is here
ERROR: File "subtyping_simple2.php", line 11, characters 14-15:
Invalid argument (Typing[4110])
File "subtyping_simple2.php", line 7, characters 21-23:
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,3 @@
ERROR: File "subtyping_simple2.php", line 4, characters 11-11:
Cyclic type definition (Typing[4014])
File "subtyping_simple2.php", line 4, characters 15-15:
Cyclic use is here
ERROR: File "subtyping_simple2.php", line 11, characters 14-15:
Invalid argument (Typing[4110])
File "subtyping_simple2.php", line 7, characters 21-23:
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,4 @@
ERROR: File "subtyping_simple2b.php", line 4, characters 11-11:
Cyclic type definition (Typing[4014])
File "subtyping_simple2b.php", line 4, characters 22-22:
Cyclic use is here
ERROR: File "subtyping_simple2b.php", line 4, characters 11-11:
Invalid constraint on `newtype` (Typing[4332])
File "subtyping_simple2b.php", line 4, characters 16-18:
Expected `int`
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,3 @@
ERROR: File "subtyping_simple3.php", line 4, characters 11-11:
Cyclic type definition (Typing[4014])
File "subtyping_simple3.php", line 4, characters 19-19:
Cyclic use is here
ERROR: File "subtyping_simple3.php", line 20, characters 15-16:
Invalid argument (Typing[4110])
File "subtyping_simple3.php", line 7, characters 22-27:
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,3 @@
ERROR: File "subtyping_simple3.php", line 4, characters 11-11:
Cyclic type definition (Typing[4014])
File "subtyping_simple3.php", line 4, characters 19-19:
Cyclic use is here
ERROR: File "subtyping_simple3.php", line 20, characters 15-16:
Invalid argument (Typing[4110])
File "subtyping_simple3.php", line 7, characters 22-27:
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,3 @@
ERROR: File "subtyping_simple4.php", line 4, characters 11-11:
Cyclic type definition (Typing[4014])
File "subtyping_simple4.php", line 4, characters 19-19:
Cyclic use is here
ERROR: File "subtyping_simple4.php", line 22, characters 15-16:
Invalid argument (Typing[4110])
File "subtyping_simple4.php", line 7, characters 22-27:
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,3 @@
ERROR: File "subtyping_simple4.php", line 4, characters 11-11:
Cyclic type definition (Typing[4014])
File "subtyping_simple4.php", line 4, characters 19-19:
Cyclic use is here
ERROR: File "subtyping_simple4.php", line 22, characters 15-16:
Invalid argument (Typing[4110])
File "subtyping_simple4.php", line 7, characters 22-27:
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,3 @@
ERROR: File "subtyping_simple4b.php", line 4, characters 11-11:
Cyclic type definition (Typing[4014])
File "subtyping_simple4b.php", line 4, characters 29-29:
Cyclic use is here
ERROR: File "subtyping_simple4b.php", line 22, characters 15-16:
Invalid argument (Typing[4110])
File "subtyping_simple4b.php", line 7, characters 26-26:
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1 @@
ERROR: File "tree_without_elements.php", line 4, characters 11-11:
Cyclic type definition (Typing[4014])
File "tree_without_elements.php", line 4, characters 19-19:
Cyclic use is here
No errors
5 changes: 1 addition & 4 deletions hphp/hack/test/typecheck/case_type/recursive/union1.php.exp
Original file line number Diff line number Diff line change
@@ -1,4 +1 @@
ERROR: File "union1.php", line 4, characters 11-13:
Cyclic type definition (Typing[4014])
File "union1.php", line 4, characters 24-29:
Cyclic use is here
No errors
16 changes: 0 additions & 16 deletions hphp/hack/test/typecheck/case_type/recursive/variance1.php.exp
Original file line number Diff line number Diff line change
@@ -1,19 +1,3 @@
ERROR: File "variance1.php", line 8, characters 11-11:
Cyclic type definition (Typing[4014])
File "variance1.php", line 8, characters 23-26:
Cyclic use is here
ERROR: File "variance1.php", line 9, characters 11-11:
Cyclic type definition (Typing[4014])
File "variance1.php", line 9, characters 23-26:
Cyclic use is here
ERROR: File "variance1.php", line 10, characters 11-11:
Cyclic type definition (Typing[4014])
File "variance1.php", line 10, characters 26-29:
Cyclic use is here
ERROR: File "variance1.php", line 11, characters 11-11:
Cyclic type definition (Typing[4014])
File "variance1.php", line 11, characters 26-29:
Cyclic use is here
ERROR: File "variance1.php", line 11, characters 28-28:
Illegal usage of a covariant type parameter (Typing[4120])
File "variance1.php", line 11, characters 14-14:
Expand Down

0 comments on commit 781cdb1

Please sign in to comment.