[Haskell-cafe] GSoC proposal: Haskell AST-based refactoring and API upgrading tool
roma at ro-che.info
Mon Apr 29 09:55:23 CEST 2013
* Niklas Hambüchen <mail at nh2.me> [2013-04-29 14:00:23+0800]
> I would like to propose the development of source code refactoring tool
> that operates on Haskell source code ASTs and lets you formulate rewrite
> rules written in Haskell.
This is a great idea. I talked about it at HIW last year and have
been working on it since then.
1. What you call a "full-source" AST is already present in
haskell-src-exts (under "Annotated" subtree). It /almost/ satisfies
pretty . parse = id,
(one thing it fails to do is to preserve tabs), and fixing it should
be definitely easier than starting from scratch.
2. HSE has two pretty-printers: an exact one, and one that ignores
annotations and pretty-prints in its own style. It's important to
have a mixture of both, so that we can pretty-print generated
snippets and splice them into an already formatted AST. A friend of
mine, Pavel Poukh, is working on a pretty-printer that produces an
annotated tree instead of a flat string, and AFAIK that work is close
3. A major thing that I devoted my time to is name resolution and
package management [3,4], which are necessary for the tool to work.
They are also close to done.
4. As for the tool itself, I have a crude prototype , but I
haven't updated it for a while.
5. The user interface is, of course, an important topic by itself. I
was thinking of something less expressive and more declarative, but
your idea is also interesting. Let's discuss this separately.
Regarding this topic as a GSoC project, I'm not so sure this is a good
idea. As a past GSoC student myself, I feel that new projects (as
opposed to established projects with existing user base and development
team) have much greater risks. (This is also backed up by data .)
But if you (or anyone else who happens to read this) would like to get
involved, please get in touch with me!
: http://www.gwern.net/Haskell Summer of Code
More information about the Haskell-Cafe