Codebuilder with line info insertion

Jesse Phillips via Digitalmars-d-announce digitalmars-d-announce at puremagic.com
Tue May 10 08:42:00 PDT 2016


One of the things that can be really annoying about using string 
mixin's, especially when there is a lot of code, is that the 
compile complains about syntax errors on a line within the mixin 
that doesn't exist in the code.

While at the D Conference this issue was mention along with the 
file/line feature of function calls. It got me thinking about a 
code builder I had been using in ProtocolBuffer[1]. I just 
checked and found that the use of the #line language feature 
combined with the file/line feature allowed for providing better 
information about where a mixin went wrong. So I pulled out the 
code and packaged it for dub[2].

Documentation is lacking in examples, but is used with 
ProtocolBuffer[3]. It uses a put/push/pop approach to provide 
some freedom in organizing the code; but I'll admit doesn't help 
readability (the call to finalize will pop all code elements push 
to the stack).

This package doesn't do too much to help with building code, one 
of the main parts it provides is pretty printing (indenting) 
which isn't important for a mixin. So please feel free to send of 
suggestions from experience trying to use it, I won't consider 
the API stable at this point.

Since ProtocolBuffer support D1 and D2, so does this library.

Instead of -- test.d-mixin-4(4): Error: semicolon expected, not 
'}'

I get -- test.d(11): Error: semicolon expected, not '}'

---------------------
    import codebuilder.structure;

    void main() {
       mixin(genCode); // Line 4
    }

    auto genCode() {
       auto cb = CodeBuilder(1);

       cb.put("struct m {");
       cb.push("}"); // Line 11
       cb.put("int a"); // Missing semicolon

       return cb.finalize;
    }
---------------------

1. https://github.com/JesseKPhillips/ProtocolBuffer/
2. http://code.dlang.org/packages/codebuilder
3. 
https://github.com/JesseKPhillips/ProtocolBuffer/blob/master/conversion/dlang.d


More information about the Digitalmars-d-announce mailing list