Giter Club home page Giter Club logo

Comments (9)

dave avatar dave commented on June 6, 2024

I don't think jennifer is the right tool for this. Manipulating existing files is a problem, and one I'm currently working on with https://github.com/dave/dst

from jennifer.

dave avatar dave commented on June 6, 2024

Once the dst package is all working, I'm planing to align dst and jennifer a bit better, so it'll be simple to load a source file, and replace or modify sections using jennifer syntax. That's a while off yet though.

from jennifer.

vetcher avatar vetcher commented on June 6, 2024

Problem in manipulating with ast is that it binded to FileSet and adding some nodes to existing tree is hard to work and render properly. Idk how to add to ast.File and token.FileSet at the same time correctly. I write https://github.com/vetcher/go-astra to make life easier, but it does not work with function's bodies.

from jennifer.

dave avatar dave commented on June 6, 2024

That's exactly what https://github.com/dave/dst will solve.

from jennifer.

vetcher avatar vetcher commented on June 6, 2024

Oh, it will be great. But anyway I will fork this one and make all what I mention in topic, because right now it's an easiest way to render imports properly. Just want to ask you first

from jennifer.

dave avatar dave commented on June 6, 2024

Sure go ahead. I'm interested to see what you come up with...

from jennifer.

 avatar commented on June 6, 2024

@dave dst looks great. I hit this problem with a code generator and ended up doing an almighty hack of outputting comments into the generated code so that on a 2nd parse i can see what is the human code and what is the code generated code.

DST will open doors to some very interesting possibilities ! thanks for doing this.

from jennifer.

dave avatar dave commented on June 6, 2024

Thanks! I've got some big plans for this project... Imagine something like:

parser.Parse("foo.go").Search(
    nodes.OfType(nodes.CallExpr),
    nodes.HasParent().OfType(nodes.ExprStmt).HasId("foo"),
).ReplaceWith(
    jen.Qual("bar", "Foo").Call(),
)

... basically a DSL to query and replace bits of the AST, using jennifer syntax to craft the new code. I'll probably do a full re-write of jennifer to support this that uses DST under the hood.

Feel free to join me in the #dst Gophers Slack room to chat about it.

from jennifer.

dave avatar dave commented on June 6, 2024

I'd love some feedback on how the dst package works in the real-world...

I've been dog-fooding it myself in https://github.com/dave/forky... Forky uses go/types quite extensively which is quite closely bound to go/ast so I'm playing with forking go/types to use dst... tricky though because go/types needs the position of nodes in a few places...

from jennifer.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.