Improvements on function arguments refactoring

- simplify naming in the french law examples
- make messages yet more precise on function arguments mismatch
This commit is contained in:
Louis Gesbert 2023-03-02 19:04:32 +01:00
parent 3766e9db2c
commit 97e0cfca6f
6 changed files with 83 additions and 61 deletions

View File

@ -910,6 +910,32 @@ let merge_conditions
| None, Some cond -> cond
| None, None -> Expr.elit (LBool true) (Untyped { pos = default_pos })
let rec arglist_eq_check pos_decl pos_def pdecl pdefs =
match pdecl, pdefs with
| [], [] -> ()
| [], (arg, apos) :: _ ->
Errors.raise_multispanned_error
[Some "Declared here:", pos_decl; Some "Extra argument:", apos]
"This definition has an extra, undeclared argument '%a'" Print.lit_style
arg
| (arg, apos) :: _, [] ->
Errors.raise_multispanned_error
[
Some "Argument declared here:", apos;
Some "Mismatching definition:", pos_def;
]
"This definition is missing argument '%a'" Print.lit_style arg
| decl :: pdecl, def :: pdefs when Uid.MarkedString.equal decl def ->
arglist_eq_check pos_decl pos_def pdecl pdefs
| (decl_arg, decl_apos) :: _, (def_arg, def_apos) :: _ ->
Errors.raise_multispanned_error
[
Some "Argument declared here:", decl_apos; Some "Defined here:", def_apos;
]
"Function argument name mismatch between declaration ('%a') and \
definition ('%a')"
Print.lit_style decl_arg Print.lit_style def_arg
let process_rule_parameters
ctxt
(def_key : Ast.ScopeDef.t Marked.pos)
@ -937,19 +963,15 @@ let process_rule_parameters
"This definition for %a is missing the arguments" Ast.ScopeDef.format_t
decl_name
| Some (pdecl, pos_decl), Some (pdefs, pos_def) ->
if not (List.equal Uid.MarkedString.equal (List.map fst pdecl) pdefs) then
Errors.raise_multispanned_error
[Some "Declared here", pos_decl; Some "Mismatching definition", pos_def]
"The arguments of this definition don't match the declaration."
else
let ctxt, params =
List.fold_left_map
(fun ctxt ((lbl, pos), ty) ->
let ctxt, v = Name_resolution.add_def_local_var ctxt lbl in
ctxt, ((v, pos), ty))
ctxt pdecl
in
ctxt, Some (params, pos_def)
arglist_eq_check pos_decl pos_def (List.map fst pdecl) pdefs;
let ctxt, params =
List.fold_left_map
(fun ctxt ((lbl, pos), ty) ->
let ctxt, v = Name_resolution.add_def_local_var ctxt lbl in
ctxt, ((v, pos), ty))
ctxt pdecl
in
ctxt, Some (params, pos_def)
(** Translates a surface definition into condition into a desugared {!type:
Ast.rule} *)

View File

@ -3526,12 +3526,12 @@ alinéas du même article.
```catala
champ d'application CalculAidePersonnaliséeLogementAccessionPropriété:
exception
définition dépense_nette_minimale_d832_10 de aide_calculée_2_9_d832_10
définition dépense_nette_minimale_d832_10 de allocation_mensuelle
sous condition
date_signature_prêt >= |1999-06-30|
conséquence égal à
mensualité_principale + montant_forfaitaire_charges_d832_10 -
aide_calculée_2_9_d832_10
allocation_mensuelle
```
Dans les autres cas, cette dépense nette est obtenue en déduisant de la seule mensualité
@ -3539,8 +3539,8 @@ déclarée le montant mensuel de l'aide calculé de la même façon.
```catala
champ d'application CalculAidePersonnaliséeLogementAccessionPropriété:
définition dépense_nette_minimale_d832_10 de aide_calculée_2_9_d832_10 égal à
mensualité_principale - aide_calculée_2_9_d832_10
définition dépense_nette_minimale_d832_10 de allocation_mensuelle égal à
mensualité_principale - allocation_mensuelle
```
Lorsque la dépense nette ainsi calculée est inférieure au produit des ressources et d'un
@ -3551,10 +3551,10 @@ différence constatée.
```catala
champ d'application CalculAidePersonnaliséeLogementAccessionPropriété:
définition abattement_dépense_nette_minimale_d832_10
de aide_calculée_2_9_d832_10
de allocation_mensuelle
égal à
soit dépense_nette_minimale égal à
dépense_nette_minimale_d832_10 de aide_calculée_2_9_d832_10
dépense_nette_minimale_d832_10 de allocation_mensuelle
dans
si dépense_nette_minimale<=
ressources_ménage_avec_d832_18 * coefficient_multiplicateur_d832_17_3
@ -4134,15 +4134,15 @@ l'aide est égal à la différence constatée.
```catala
champ d'application CalculAidePersonnaliséeLogementFoyer:
définition dépense_nette_minimale_d832_27 de aide_calculée_1_8_d832_24
définition dépense_nette_minimale_d832_27 de allocation_mensuelle
égal à
équivalence_loyer_éligible - aide_calculée_1_8_d832_24
équivalence_loyer_éligible - allocation_mensuelle
définition abattement_dépense_nette_minimale_d832_27
de aide_calculée_1_8_d832_24
de allocation_mensuelle
égal à
soit dépense_nette_minimale égal à
dépense_nette_minimale_d832_27 de aide_calculée_1_8_d832_24
dépense_nette_minimale_d832_27 de allocation_mensuelle
dans
si dépense_nette_minimale <= montant_forfaitaire_d832_27
alors montant_forfaitaire_d832_27 - dépense_nette_minimale
@ -4634,10 +4634,10 @@ des charges, le montant mensuel de l'allocation calculé selon les dispositions
```catala
champ d'application CalculAllocationLogementAccessionPropriété:
définition dépense_nette_minimale de aide_calculée_2_9_d832_10
définition dépense_nette_minimale de allocation_mensuelle
égal à
charges_mensuelles_prêt + montant_forfaitaire_charges -
aide_calculée_2_9_d832_10
allocation_mensuelle
```
Lorsque la dépense nette minimale est inférieure à un montant fixé par arrêté, il est
@ -4646,10 +4646,10 @@ constatée.
```catala
champ d'application CalculAllocationLogementAccessionPropriété:
définition abattement_dépense_nette_minimale de aide_calculée_1_8_d832_24
définition abattement_dépense_nette_minimale de allocation_mensuelle
égal à
soit dépense_nette_minimale égal à
dépense_nette_minimale de aide_calculée_1_8_d832_24
dépense_nette_minimale de allocation_mensuelle
dans si
dépense_nette_minimale < seuil_minimal_dépense_nette_minimale
alors
@ -4961,8 +4961,8 @@ calculé selon les modalités précisées aux deuxième à neuvième alinéas du
```catala
champ d'application CalculAllocationLogementFoyer:
définition dépense_nette_minimale de aide_calculée_2_9_d832_10 égal à
équivalence_loyer + montant_forfaitaire_charges - aide_calculée_2_9_d832_10
définition dépense_nette_minimale de allocation_mensuelle égal à
équivalence_loyer + montant_forfaitaire_charges - allocation_mensuelle
```
Lorsque sa valeur est inférieure à un montant fixé par arrêté, l'abattement sur
@ -4971,12 +4971,12 @@ le montant mensuel de l'aide est égal à la différence constatée.
```catala
champ d'application CalculAllocationLogementFoyer:
définition abattement_dépense_nette_minimale
de aide_calculée_2_9_d832_10 égal à
si dépense_nette_minimale de aide_calculée_2_9_d832_10 <
de allocation_mensuelle égal à
si dépense_nette_minimale de allocation_mensuelle <
montant_minimal_dépense_nette_d842_17
alors
montant_minimal_dépense_nette_d842_17 -
dépense_nette_minimale de aide_calculée_2_9_d832_10
dépense_nette_minimale de allocation_mensuelle
sinon
0€
```

View File

@ -621,9 +621,9 @@ déclaration champ d'application CalculAidePersonnaliséeLogementFoyer:
résultat équivalence_loyer_éligible contenu argent
résultat plafond_équivalence_loyer_éligible contenu argent
interne abattement_dépense_nette_minimale_d832_27
contenu argent dépend de aide_calculée_1_8_d832_24 contenu argent
contenu argent dépend de allocation_mensuelle contenu argent
interne dépense_nette_minimale_d832_27
contenu argent dépend de aide_calculée_1_8_d832_24 contenu argent
contenu argent dépend de allocation_mensuelle contenu argent
interne montant_forfaitaire_d832_24 contenu argent
interne montant_forfaitaire_d832_27 contenu argent
interne montant_minimal_aide_d823_24 contenu argent
@ -691,9 +691,9 @@ déclaration champ d'application
état coeff_arrondi
état seuil
interne dépense_nette_minimale_d832_10 contenu argent
dépend de aide_calculée_2_9_d832_10 contenu argent
dépend de allocation_mensuelle contenu argent
interne abattement_dépense_nette_minimale_d832_10
contenu argent dépend de aide_calculée_2_9_d832_10 contenu argent
contenu argent dépend de allocation_mensuelle contenu argent
interne ressources_ménage_avec_d832_18 contenu argent
interne montant_forfaitaire_charges_d832_10 contenu argent
interne montant_forfaitaire_d832_10 contenu argent
@ -867,9 +867,9 @@ déclaration champ d'application CalculAllocationLogementAccessionPropriété:
interne seuil_minimal_ressources_ménage contenu argent
interne taux_francs_vers_euros contenu décimal
interne dépense_nette_minimale contenu argent
dépend de aide_calculée_2_9_d832_10 contenu argent
dépend de allocation_mensuelle contenu argent
interne abattement_dépense_nette_minimale contenu argent
dépend de aide_calculée_1_8_d832_24 contenu argent
dépend de allocation_mensuelle contenu argent
interne montant_minimal_aide_d842_6 contenu argent
interne montant_forfaitaire_d842_11 contenu argent
interne montant_forfaitaire_d842_12 contenu argent
@ -935,9 +935,9 @@ déclaration champ d'application CalculAllocationLogementFoyer:
CatégorieÉquivalenceLoyerAllocationLogementFoyer
interne dépense_nette_minimale contenu argent
dépend de aide_calculée_2_9_d832_10 contenu argent
dépend de allocation_mensuelle contenu argent
interne abattement_dépense_nette_minimale contenu argent
dépend de aide_calculée_2_9_d832_10 contenu argent
dépend de allocation_mensuelle contenu argent
interne montant_minimal_aide_d842_15 contenu argent
interne montant_forfaitaire_d842_15 contenu argent
interne montant_minimal_dépense_nette_d842_17 contenu argent

View File

@ -14,20 +14,20 @@ scope S:
```catala-test-inline
$ catala typecheck
[ERROR] The arguments of this definition don't match the declaration.
[ERROR] Function argument name mismatch between declaration ('x') and definition ('y')
Declared here
┌─⯈ tests/test_func/bad/param_inconsistency.catala_en:4.30-58:
Argument declared here:
┌─⯈ tests/test_func/bad/param_inconsistency.catala_en:4.41-42:
└─┐
4 │ internal f1 content decimal depends on x content integer
‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾
Mismatching definition
┌─⯈ tests/test_func/bad/param_inconsistency.catala_en:10.16-20:
Defined here:
┌─⯈ tests/test_func/bad/param_inconsistency.catala_en:10.19-20:
└──┐
10 │ definition f1 of y under condition not cond
‾‾‾
#return code 255#
```

View File

@ -13,20 +13,20 @@ scope S:
```catala-test-inline
$ catala typecheck
[ERROR] The arguments of this definition don't match the declaration.
[ERROR] Function argument name mismatch between declaration ('x') and definition ('y')
Declared here
┌─⯈ tests/test_func/bad/param_inconsistency2.catala_en:4.30-58:
Argument declared here:
┌─⯈ tests/test_func/bad/param_inconsistency2.catala_en:4.41-42:
└─┐
4 │ internal f1 content decimal depends on x content integer
‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾
Mismatching definition
┌─⯈ tests/test_func/bad/param_inconsistency2.catala_en:9.26-30:
Defined here:
┌─⯈ tests/test_func/bad/param_inconsistency2.catala_en:9.29-30:
└─┐
9 │ exception definition f1 of y under condition not cond
‾‾‾
#return code 255#
```

View File

@ -13,20 +13,20 @@ scope S:
```catala-test-inline
$ catala typecheck
[ERROR] The arguments of this definition don't match the declaration.
[ERROR] Function argument name mismatch between declaration ('x') and definition ('y')
Declared here
┌─⯈ tests/test_func/bad/param_inconsistency3.catala_en:4.30-58:
Argument declared here:
┌─⯈ tests/test_func/bad/param_inconsistency3.catala_en:4.41-42:
└─┐
4 │ internal f1 content decimal depends on x content integer
‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾
Mismatching definition
┌─⯈ tests/test_func/bad/param_inconsistency3.catala_en:9.26-30:
Defined here:
┌─⯈ tests/test_func/bad/param_inconsistency3.catala_en:9.29-30:
└─┐
9 │ exception definition f1 of y under condition not cond
‾‾‾
#return code 255#
```