Expose the parsed expression tree from Program (for explain/trace tooling, linting and sub-expression evaluation)
Les mainteneurs répondent en général sous 1 jour
Personne n'a encore pris cette issue.
Évaluation
- Difficulté
- 5/5
- Temps estimé
- Plus d'une semaine
- Accessibilité débutants
- 45/100
- Type d'issue
- Fonctionnalité
- Clarté
- Plutôt claire
- Activité
- Active
- Domaine
- developer-experience, tooling
Piste de recherche
Commencez par inspecter le wrapper Python Program et cel::Program::expression(), puis comparez ses variantes IdedExpr et Expr avec l’arbre proposé sérialisable en JSON. C’est terminé lorsque Program.ast() expose les littéraux, les identifiants, les selects, les appels, les listes, les maps, les structs et les comprehensions développées, avec une documentation provisoire liée à la version de cel-rust.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
Motivation
Program.references() answers "which names does this expression use", but several things people ask for need the structure of the expression, not just its leaves:
- #30 wants to know which element or clause made an
exists/&&chain true or false. cel-rust has no evaluation hooks, so a wrapper-sideexplain()would have to walk the tree and re-evaluate sub-expressions. - Policy linting beyond name lists: "no
matches()on untrusted input", "no more than N nested comprehensions", "field access only underrequest.". - Pretty-printing / normalising expressions stored by users.
What upstream gives us
cel::Program::expression() returns the parsed Expression (IdedExpr: an id plus an Expr enum covering literals, identifiers, selects, calls, lists, maps, structs and the expanded comprehensions). No protobuf AST, but the shape is close to cel.expr.Expr and would be straightforward to mirror as nested dicts or small dataclasses.
Proposal
Program.ast() returning a plain, JSON-serialisable tree, e.g. {"kind": "call", "function": "_&&_", "args": [...]}, with comprehension macros shown in their expanded form (that is what cel-rust holds after parsing; the original macro call is not retained). Ship it as provisional, tied to the cel-rust version, and note that the node shapes may change when cel-rust changes its AST.
A Python-side cel.explain(program, context) built on it could then evaluate each boolean sub-expression and report the first failing clause, which covers the exists/all case in #30 without upstream changes, at the cost of re-evaluation (custom functions run again).
- Langage dominant
- Python
- Étoiles
- 43
- Forks
- 4
- Merge moyen
- 12 h 37 min
- PR mergées (30 j)
- 11
Préparer son environnement
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de hardbyte/python-common-expression-language
-
enhancement
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
hardbyte/python-common-expression-language#47 ·
Les mainteneurs répondent en général sous 1 jour
-
enhancement
Difficulté 4/5 3-5 jours Accessibilité débutants 45/100
hardbyte/python-common-expression-language#57 ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 5/5 Plus d'une semaine Accessibilité débutants 35/100
hardbyte/python-common-expression-language#50 ·
Les mainteneurs répondent en général sous 1 jour
-
enhancement
Difficulté 4/5 3-5 jours Accessibilité débutants 48/100
hardbyte/python-common-expression-language#49 ·
Les mainteneurs répondent en général sous 1 jour
-
enhancement
Difficulté 4/5 3-5 jours Accessibilité débutants 48/100
hardbyte/python-common-expression-language#46 ·
Les mainteneurs répondent en général sous 1 jour
Toutes les issues de hardbyte/python-common-expression-language
Issues similaires
-
pydanty:is-working
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
pydantic/pydantic-ai#8843 ·
Les mainteneurs répondent en général sous 1 jour
-
breaking change enhancement server
Difficulté 2/5 1-3 heures Accessibilité débutants 72/100
Les mainteneurs répondent en général sous 1 jour
-
bug
Difficulté 2/5 1-3 heures Accessibilité débutants 88/100
sktime/sktime#11310 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 72/100
Les mainteneurs répondent en général sous 1 jour
-
needs-triage
Difficulté 2/5 1-3 heures Accessibilité débutants 85/100
Les mainteneurs répondent en général sous 1 jour