To clarify: do you think there are sets of semantic decisions using S-expressions that would still "get rid of the whole debate", and not make autocomplete harder in practice?
(not that it's important of course, but your remark made me curious, and the reactions to my question even more so)
I develop Cursive, an IDE for Clojure code. I handle this for Java interop in a couple of ways. Cursive does type inference (or propagation, really) in the editor, so if you have enough type hints it knows what the type of a symbol is. This allows a few tricks (| is the caret):
If you've already typed the form and are just changing the head symbol, you're golden:
(.myMeth| my-object)
If Cursive can accurately determine the type of my-object, you'll only see the relevant completions, i.e. methods from that type.
If you're using Clojure's threading forms, Cursive understands that:
(-> my-object .myMeth|)
also works.
Otherwise, if you're typing out a new form you can do:
(my-object .myMeth|)
and when you auto-complete the forms will be switched around to:
Maybe a stupid question because I don't know much clojure but I'm curious. How can you be sure that -> is threading macro and my-object is what you think it is at compile time? Can't macros change the entire meaning of an expression?
Common Lisp via slime has quite good autocomplete because it extracts the information from a running system and doesn't have to infer it from the source code.
It might be true that s-expressions would make people prefer certain semantic decisions that would be difficult to analyze for autocomplete.