Bonjour tout le monde,
J'espère que vous allez bien ! Je suis actuellement en train de travailler sur une fonctionnalité importante de mon serveur. l'idée est que, quand on positionne la souris sur un lexp donné, qu'il nous affiche le type de cette lexp. Je suis en train de travailler sur la fonction qui fait la recherche du type d'une lexp. pour le cas d'un appel de fonction, j'ai écrit un code comme ça : | Call (f, args) -> ( let ft = Opslexp.get_type ctx f in
match Opslexp.lexp'_whnf ft ctx with | Arrow (ak', _v, t1, _l, t2) -> let e = lexp_search (List.map (fun (_, e) -> e) args) cursor in browse_lexp ctx e cursor | _ -> browse_lexp ctx ft cursor ) En gros, on a deux cas : - si on est positionné sur un des arguments, il cherche à savoir si la souris se trouve à l'intérieur d'un argument et appelle récursivement la fonction browse_lexp pour aller chercher le type de l'argument, sinon, il va appeler browse_lexp récursivement sur l'argument le plus proche du curseur pour renvoyer le type de la lexp la plus proche. - si on est positionné sur la fonction elle-même et pas un de ses arguments, il appelle récursivement browse_lexp sur la fonction pour aller chercher son type et le renvoyer(ça peut en effet être un autre call, et tout l'opération recommence).
J'aimerais connaître vos idées sur ce cas par rapport à l'approche ou si vous avez d'autres suggestions.
Merci beaucoup, bien à vous !