I was thinking about how things like function or variable renaming are
complicated by lisps macros. That it's almost impossible to track the
scope of anything, since 2 symbols near each other might mean
completely different things after macro expansion.
So I came up with an algorithm that *might* work in the most common
case. Is there a flaw in the idea, or did I overlook any major aspect
of the language? Any idea of which IDE would be the best to try and
prototype it?
Here it is in pseudocode:
select symbol in source that you want to rename
parse the code
add tracking meta-data (file, line, position in line) into all symbols
of the tree
expand all macros
find selected symbol: it's either a definition in a def form or let*
or letfn form, or a variable being
used
if the symbol is a definition, find all places where it is used,
taking scope into account
use metadata to find where the symbol was in the source code
if it wasn't, it means a macro expanded it into place, so fail
else rename it
if the symbol is a variable, find where it was defined, taking scope
into account
use metadata to rename it, if there is none, fail
find all symbols that refer to the definition, rename if there is
metadata, fail otherwise
--
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to [email protected]
Note that posts from new members are moderated - please be patient with your
first post.
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en