Comments (9)
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.
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.
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.
That's exactly what https://github.com/dave/dst will solve.
from jennifer.
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.
Sure go ahead. I'm interested to see what you come up with...
from jennifer.
@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.
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.
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)
- Better ways to manage import names and aliases HOT 5
- Get *jen.Statement from reflect.Type HOT 1
- Plain struct field tag HOT 1
- Create groups in my code? HOT 19
- [go1.19, go1.20] Indented Multiline Struct Comments have tab characters HOT 3
- example with multiple return types HOT 5
- Support `Array` for `Value` besides `Dict`? HOT 2
- Dict sorts keys by string, breaking existing/natural ordering HOT 2
- Please read: Issues for improving the readability or formatting of outputted code.
- Creating a function receiver HOT 2
- Feature: Should add a abstruct layer to make more Declarative? HOT 3
- How to generate struct parameter in function qual HOT 2
- Callback with errors?
- Support multiline string literal (backtick) HOT 2
- Feature: ability to provide custom imports sorter function
- Feature Request: Do not render [] if .Types() is called with no arguments HOT 1
- Non-int untyped numeric literal HOT 2
- How to generate complex type field definitions in Struct HOT 3
- Custom types on interface HOT 3
- How to Gennerate var()? HOT 3
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
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.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from jennifer.