Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Attributs

Le langage peut être étendu avec des attributs, permettant une variété d’extensions. Un attribut est de la forme #[clé.de.extension] ou #[clé.de.extension = VALEUR], où VALEUR peut être de la forme "CHAÎNE", ou une expression en syntaxe Catala. Un attribut est toujours lié à l’élément qui le suit directement : une extension pourrait par exemple les utiliser pour récupérer des étiquettes pour les champs d’entrée d’un champ d’application afin de générer un formulaire web :

déclaration champ d'application UnCalcul:
  #[form.label = "Entrez le nombre d'enfants satisfaisant la condition XXX"]
  entrée enfants_age contenu entier

Attributs prédéfinis

Le compilateur Catala reconnaît un certain nombre d’attributs prédéfinis.

#[test]

S’applique aux déclarations de champs d’application, pour indiquer leur rôle de test. Voir la section sur les tests.

#[doc] or ##

Associé à une déclaration, un champ de structure, un cas d’énumération ou un argument de fonction, l’attribut #[doc = "texte d'explication"] permet de le documenter. Cette information sera rendue disponible aux utilisateurs du module, et devrait indiquer le rôle et les modalités d’utilisation de l’élément associé.

Un commentaire commençant par ## est automatiquement interprété comme un attribut de documentation de l’élément qui suit: cette syntaxe allégée ## texte d'explication est à privilégier.

#[error.message]

L’attribut #[error.message = "message informatif"] s’attache à une assertion ou au mot-clef impossible. Si l’erreur est déclenchée, le message sera affiché à l’utilisateur en plus des informations habituelles sur le type de l’erreur et sa position d’origine dans le code. Le message est affiché lors de l’interprétation, mais également dans les programmes générés en utilisant les différents backends.

#[debug.print]

Cet attribut s’applique à une expression et n’a d’effet que lors de l’interprétation, si l’option --debug de catala est active (-c--debug si exécuté depuis clerk). Une fois calculée, la valeur de l’expression attachée sera affichée sur la console.

Un label peut être ajouté pour différencier plusieurs affichages de débug, de la sorte: #[debug.print = "variable 001"].

Attention: à cause de la façon dont fonctionne la compilation, il n’y a pas de garantie sur l’affichage des messages de débug: en particulier, il peut arriver qu’ils soient dupliqués ou disparaissent, suivant l’élément où ils apparaissent et la présence du flag d’optimisation (-O). En cas de souci de ce type, il est conseiller de déplacer l’attribut à la racine de la définition d’une variable plutôt que sur un élément intermédiaire.

#[implicit_position_argument]

Cet attribut s’applique à un paramètre de fonction de type position_source uniquement. Il peut être utile en particulier lors de l’utilisation de modules externes). Lorsqu’il est utilisé, le paramètre concerné disparaît des appels à cette fonction, et sera renseigné implicitement avec la position de l’appelant.

Le but est, dans le cas où une fonction définie dans un module a des préconditions, de pouvoir signaler l’erreur comme venant du lieu d’appel plutôt que de la fonction elle-même. Par exemple, lors d’un appel à Utils.division_custom de 2, 0, donner la position où division_custom est définie dans le module Utils ne serait pas très utile.