Thanks a lot, Mr Marc L explain me how to do that : ``` (* Mapper for all transformation *) let general_mapper = Ast_mapper.{ default_mapper with structure = structure } (* New Mapper only for the toplevel *) let toplevel_mapper = Ast_mapper.{ default_mapper with structure = fun _ str -> let pl = Ast_helper.Str.eval (Ppx.Fabric.print_endline "Hello World") in pl :: (general_mapper.structure general_mapper str) } ``` Xavier Van de Woestyne http://xvw.github.io ![](https://link.nylas.com/open/5y0wh7okaezysfzysovho20yh/local-56fe3f0e- 0d5c?r=Y2FtbC1saXN0QGlucmlhLmZy) On juin 20 2016, at 4:16 pm, Anton Bachin <antronbachin@gmail.com> wrote: > Hi Xavier, > > > > > Bisect_ppx does this by looking at the location of each module it sees in “structure". The file names are stored in a set. If a file name is not yet in the set, Bisect_ppx assumes that the module is the top-level module of a file. We haven’t had any problems with it. > > > > > You can see it here: [https://github.com/aantron/bisect_ppx/blob/afa95d9f02ab4c95df3af283641c73ec1dc8cfb1/src/syntax/instrumentPpx.ml#L480](https://github.com/aantron/bisect_ppx/blob/afa95d9f02ab4c95df3af283641c73ec1dc8cfb1/src/syntax/instrumentPpx.ml#L480&r=Y2FtbC1saXN0QGlucmlhLmZy) > > > > > The code is a bit old, but there it is. > > > > > Best, > > Anton > > > > >> On Jun 17, 2016, at 12:10, Xavier Van de Woestyne <[xavier@derniercri.io](mailto:xavier@derniercri.io)> wrote: >> >> > >> >> Hello, >> >> I have writted some ppx extension but I have a question, >> >> Is there a proper way to add a start "file" structure. > >> >> I have try using the "structure" member of the mapper : >> >> > >> >> ` >> >> let new_mapper = >> >> Ast_mapper.{ > default_mapper with > structure = general_structure > }` >> >> > >> >> Where general_structure is just a >> >> `my_begining_structure :: List.map (...)` but my begining >> >> structure is repeated into each module. It is logic but I need >> >> to add my own structure only at the begining of my file. In an >> >> other project, I use a mandatory attribute ([@@@active_this_ppx] >> >> for example), but imho, it is not a good approach. >> >> > >> >> Thanks a lot for your feedback and advices ! >> >> > >> >> Xavier Van de Woestyne >> >> Développeur à Derniercri.io >> >> [http://derniercri.io](http://derniercri.io&r=Y2FtbC1saXN0QGlucmlhLmZy) >> >> ![](https://link.nylas.com/open/3hl20o5fseo0be0el9ic747vo/local- 19c25162-3d3f?r=Y2FtbC1saXN0QGlucmlhLmZy) > > >