Just to give you a different perspective on your second point, I prefer to use code completion as a way of checking if the API that I'm making makes sense to use. Sometimes I just want to be able to type out "assert" and hit cmd + space to see what assertion methods are built in. I feel like this was a major point of all the "fluent" APIs that came out on .NET after 3.0+ came out with Expressions and LINQ.
Whether or not this is the correct way to create an API for others to consume, who knows. But I tend to think of code completion as part of the "UX" of a library.
Whether or not this is the correct way to create an API for others to consume, who knows. But I tend to think of code completion as part of the "UX" of a library.