The odd freeze with documentation viewing seems to have spontaneously resolved itself. I'm finding 4.0 to be usable, but it has a smattering of more minor problems nonetheless. In the interests of seeing this software improved farther, here is a list of those I've recently observed:
* Classname<tab> no longer displays information about class methods obtained via reflection; regression somewhere between 0.2.8 and 0.4.
* Bracket matcher misparses array type hints (e.g. ^[LString), also mucking up indenting. Mainly an issue with interop code where performance is important enough to be hinting. One can work around it by using ^objects and a hinted temporary, e.g. (let [^String s (aget strs 0)] ...), to "cast" to the element type post-extraction, except in cases where you're passing the array itself to a Java method that wants a more specific array type than Object, and it's generating reflection warnings or other issues.
* The "with-precision" macro body is indented as an arglist instead of as a body, e.g.
(with-precision 22
(do-something
(some other stuff)))
instead of
(with-precision 22
(do-something
(some other stuff)))
whereas the latter seems like it should be preferable.
Some other "with-" macros display similar behavior.
I'd suggest body-indenting the last argument of a macro if it is "& body" or "& exprs", and also if the macro's name begins with "with-" or "do" (e.g. "dosync" would qualify). That will result in clooj guessing the desired indentation right 99% of the time, I estimate. Alternatively, it might body-indent any macro rest arg modulo a hardcoded list of exceptions, which would be populated with the few standard library macros that have a rest arg that should be treated more like function arguments -- the only ones to immediately pop to mind being "or" and "and".
* The REPL now running in a separate JVM somewhat protects the clooj session from hangs and crashes triggered by running things there. However, there are some significant problems remaining in that area.
1. If the REPL process is spewing heavily to stdout, clooj will lock up after a short time. It's sometimes possible to control-R your way out of this, but not always. I'd suggest limiting buffer size for REPL output, making older output "fall off the end", and also truncating long individual lines at, say, 1024 characters, as the problems seem to stem from memory use and possibly how the console component deals with becoming very wide. It should try to wrap long lines before truncating, but the wrapped lines should then count toward the line limit for pushing older lines off the top edge (or else there should be a total megabytage limit on the content, perhaps exactly 1MB).
2. Another way to lock up clooj given a hung REPL is control-E, or (likely) anything else that tries to eval something (control-enter, click different source file resulting in sending it (in-ns 'foo), etc.) The fix for this is to add a timeout of some kind; if the REPL process hasn't responded after 1 minute (or whatever) print a red "Timed out!" message in the output pane and return control to the user, with control-E/control-enter code not having been evaluated, and with changing source file having succeeded in changing the editor's open-on file but failed to send the REPL to its namespace.
* There's a bug where sometimes, under obscure conditions, it becomes impossible to evaluate a changed function definition with control-enter in the editor pane, with this instead flashing "Malformed expression" at the bottom even though there is no syntax error and, indeed, control-E will re-load the whole namespace successfully, including the changed function definition at issue. This bug existed in 0.2.8 also, rather than being new since then.
* I've seen control-E silently skip, rather than throw an exception on, an actually malformed changed function definition, such as with a mismatched bracket. I don't think this ever happened in 0.2.8.