Clearly the solution is to use tools.analyzer and write a big def emitter

/s
Reid
On 06/04/2014 10:27 AM, Mars0i wrote:
>
>
> On Wednesday, June 4, 2014 9:42:41 AM UTC-5, Mars0i wrote:
>
>     ... Then I add the new functions to the declarestatement by hand,
>     or I periodically do something like:
>
>     grep defn mysourcefile.clj >> mysourcefile.clj
>     (Be careful to use two ">"s!)
>
>     and then I edit the junk at the end of the file into a
>     declarestatement at the top of the file.  And maybe if f I were
>     ... lazier, I'd code a script that would update the declarein one
>     pass.
>
>
> OK, I couldn't resist my own implicit challenge.
>
> #!/bin/sh
> sourcefile="$1"
> newsourcefile="new.$sourcefile"
>
> newdeclare=$(echo '(declare' \
>     `sed -n '/defn/s/(defn-* //p' "$sourcefile" | tr '\n' ' '` ')' \
>     | sed 's/ )/)/')
>
> sed "s/(declare .*/$newdeclare/" "$sourcefile" > "$newsourcefile"
>
> This writes a new version of the file named new.<oldfilename>. Or if
> you either trust your script or trust your backups, and are on a
> system that includes the mighty ed
> <http://www.gnu.org/fun/jokes/ed.msg.html> editor, you can replace the
> last line with:
>
> echo "1,\$s/(declare .*/$newdeclare/\nw\n" | ed "$sourcefile"
>
> which edits the file in place, assuming that the previous version of
> the declaration was on one line.  You may want to use a different
> scriptable editor.
>
> The messy part is the sed and tr line:
>
>     `sed -n '/defn/s/(defn-* //p' "$sourcefile" | tr '\n' ' '`
>
> The sed part finds all of the lines with "defn" in them, then
> substitutes the empty string for "(defn" or "(defn-".   'tr' then
> removes the newlines between the function names, replacing the
> newlines with spaces.  You'll need something a little more complicated
> if you put the parameter vector or anything else on the same line as
> the function name.  The 'echo' on the previous line, along with the
> final ')' adds "(declare" and its closing parenthesis.  Those two
> lines can be used by themselves to generate a declare statement from
> the command line. The 'sed' command after these lines isn't necessary;
> it just removes an unnecessary space before the closing parenthesis.
>
> Obviously, there will be source files on which this won't work.  It's
> not worth making it foolproof.
>
> It's a certainty that others would code this more elegantly or more
> succinctly.  It could be written in Clojure, obviously, but still
> wouldn't be foolproof unless someone hacks it from the Clojure parser.
> -- 
> You received this message because you are subscribed to the Google
> Groups "Clojure" group.
> To post to this group, send email to clojure@googlegroups.com
> Note that posts from new members are moderated - please be patient
> with your first post.
> To unsubscribe from this group, send email to
> clojure+unsubscr...@googlegroups.com
> For more options, visit this group at
> http://groups.google.com/group/clojure?hl=en
> ---
> You received this message because you are subscribed to the Google
> Groups "Clojure" group.
> To unsubscribe from this group and stop receiving emails from it, send
> an email to clojure+unsubscr...@googlegroups.com
> <mailto:clojure+unsubscr...@googlegroups.com>.
> For more options, visit https://groups.google.com/d/optout.

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to