Compiler-assisted code reflection for IDEs

Per Nordlöw per.nordlow at gmail.com
Fri Jul 16 14:38:07 UTC 2021


On Friday, 16 July 2021 at 10:02:06 UTC, SealabJaster wrote:
> I was wondering if functionality can be added onto the compiler 
> (DMD at least, due to its speed) which allows for external 
> tooling to gain accurate information about the code?
>
> Take the above struct for example, maybe when the plugin 
> detects the following:
>
> ```d
> S!int myS;
> ```
>
> It could make a call to the compiler like: `dmd myapp.d 
> -reflect "myapp.S!(int)"`, where the compiler would return all 
> the info it can (It's a struct, it has a member of int called 
> a, etc.)
>
> It's just a rough idea, but I hope you can see what I'm trying 
> to suggest, and why I feel it's at least worth asking about.
>
> In other words, build some much needed language service 
> functionality into the compiler, to allow the actual language 
> servers to provide a much higher quality experience. Naively 
> assuming it's as simple as that :3

That's absolutely possible. DMD is available as a library. You 
basically take the source code feed it to the engine, apply 
whatever compiler passes you want, and accept the results using a 
visitor of your choice. There are already visitors available; I'd 
suggest starting with `SemanticTimeTransitiveVisitor` because 
it's a transitive visitor (less boiler-plate) that should be 
applied after all the semantic phases has been applied.

I suggest you first get in contact with the developers of 
Visual-D (Rainer Schutze) code-d, DCD (D completion daemon) and 
others to see what's already been done. They likely have similar 
visions.

Good luck!


More information about the Digitalmars-d mailing list