[wg-camlp4] Editor support for syntax extensions
Gerd Stolpmann
info at gerd-stolpmann.de
Wed Jan 30 19:27:13 GMT 2013
Am 30.01.2013 15:21:20 schrieb(en) Alain Frisch:
> On 01/30/2013 12:19 PM, Török Edwin wrote:
>> I still get syntax highlighting and matching parens in both vim and
>> emacs for the above (although maybe antiquotations would confuse it):
>
> Highlighting gets completely wrong as soon as you start e.g. using
> double quotes. And indentation is just impossible if the editor isn't
> aware of the grammar implemented by the extensions. One could
> certainly try to fix this and introduce more tools, complexity and
> border cases. But I still fail to see the real benefits of allowing
> very customized syntax which would justify such efforts. The whole
> point of -ppx versus camlp4 is precisely to stop messing up with the
> concrete syntax: define some generic enough extension points, and
> just work with a fixed concrete syntax. I'd prefer to see dead
> simple solutions adopted for -ppx, and more advanced stuff (based on
> concrete syntax) left to camlp4/fan.
>
>> 4. What syntax extensions to use => define in the source code
>>
>> This has already been mentioned that the source file could define
>> what syntax extensions it uses, so it works for all build systems
>> (ocamlbuild, makefiles, omake), etc.
>> It may not even need special support from the compiler: there could
>> be a -ppx that finds these pragmas and loads those other -ppx on its
>> own!
>
> I've started something along these lines:
>
> https://github.com/alainfrisch/ppx_drivers
>
> Exactly how this works with ocamlfind needs to be discussed. I know
> Gerd has some ideas!
Well, I had some private discussions with Alain before this list
started.
A central point is that the ppx driver and ocamlfind remain separate
software projects. You need the ability to use ppx preprocessors
without ocamlfind, and the role of ocamlfind is "only" to make it more
user-friendly. This should be similar to normal library lookup - where
ocamlfind finally generates only a command where many details are
filled in.
Alain had the idea to include the names of the preprocessors directly
in the source text. He chose the syntax
include PPX(First_ppx_processor)(Second_ppx_processor)
Well, we probably can now select something better, not reusing the
"include" notation for something that is not "include". Maybe let's
prefer now
(:PPX "first_ppx_preprocessor" "second_ppx_preprocessor")
just to pick the current discussion up. The task of the ppx driver is
to interpret these directives, and to run the preprocessors in the
right order as subcommands (or, if the platform supports it, as
plugins).
Ocamlfind integration: The problem here is that such a directive needs
to be forwarded to ocamlfind in order to figure the details out. This
would need a relatively tight coupling between the ppx driver and
ocamlfind. In order to avoid that the ppx driver calls ocamlfind for
every activated preprocessor, the idea is to make the ppx driver a
library, maybe with a single function
preprocess : (string -> string) -> in_channel -> out_channel
The string->string function is the lookup function. It takes a string
like "first_ppx_preprocessor" and returns the command to run.
So, that enables us to provide two utilities:
- ocamlppx: This would be part of the OCaml distribution, and would be
limited in functionality. In particular, it interprets the ppx
strings
directly as commands (identity as lookup function):
(:PPX "/path/to/my/ppx/executable maybe arguments")
- ocamlfind ppx: This version provides extended lookup features.
You would just use
(:PPX "package-name")
and it is ocamlfind's task to look the executable up (or,
optionally,
load a plugin, but the details of the mechanism are hidden from the
simple user).
Gerd
>
> Alain
> _______________________________________________
> wg-camlp4 mailing list
> wg-camlp4 at lists.ocaml.org
> http://lists.ocaml.org/listinfo/wg-camlp4
>
--
------------------------------------------------------------
Gerd Stolpmann, Darmstadt, Germany gerd at gerd-stolpmann.de
Creator of GODI and camlcity.org.
Contact details: http://www.camlcity.org/contact.html
Company homepage: http://www.gerd-stolpmann.de
------------------------------------------------------------
More information about the wg-camlp4
mailing list