Perhaps the best responses will be code enhancements. And those have a slower cadence.
What would be cool is if we could see a thread-based view of anarki. Kinda like news.yc but with modules or functions as stories. So that next time somebody makes a change to this function it shows up as a comment under it. Patches that change multiple functions show up in them all.
well, each file is its own thread. I guess what I'm asking for is one thread per function. And you don't have to parse code or anything, just delimit functions to be between unindented lines.
Yeah, browsing static code won't show you every aspect of the dynamic runtime context for that code, but that doesn't seem like a fair comparison given we're just talking about a skin for gitweb. Perhaps I don't understand what you're getting at?
(let expander
(fn (f var name body)
`(let ,var (,f ,name)
(after (do ,@body) (close ,var))))
Unindented here. Is the above given its own division? But it wouldn't make much sense to group this by itself, since it's used privately by other functions.
(mac w/infile (var name . body)
" Opens the given file `name' for input, assigning the stream to `var'.
The stream is automatically closed on exit from the `body'.
See also [[w/outfile]] [[w/instring]] [[w/stdin]] [[w/socket]] "
(expander 'infile var name body))
Again, unindented at this point. However, it shares some code with other functions after it.
(mac w/outfile (var name . body)
" Opens the given file `name' for output, assigning the stream to `var'.
The stream is automatically closed on exit from the `body'.
See also [[w/infile]] [[w/appendfile]] [[w/outstring]] [[w/stdout]] "
(expander 'outfile var name body))
... etc.
Of course, we could just define a definition as being divided by unindented non-empty lines ^^.
While we're nitpicking, a set of unindented lines should get grouped together as well. No point having a bunch of single-line separators.
And if using indentation seems too hackish, just balance parens, curlies, etc. And separate by lines containing level-1 brackets. Almost as easy to do, and just as language-agnostic.
Crick, my code must be completely unclear. Oh well. The paper describes snakes; my implementation makes use of "downsnakes" and "rightsnakes" as references to the edit graph, with a "downsnake" being a single downward move followed by a snake and a "rightsnake" similarly defined.
The paper describes a graph traversal method which I eventually realized was suspiciously like Pascal's Triangle (tilt your head to the left 45 degrees and squint ^^); hence the reference to "start the triangle". Basically instead of + as in pascal's triangle I have (minN (rightsnake left) (downsnake right)), while the leftmost and rightmost nodes are generated via downsnake and rightsnake, respectively, instead of the identity function as in Pascal's.