In addition, it's often annoying because it replaces the default IDE autocomplete when you don't want it to. For example, when importing code from another file, it disables the autocomplete and then tries to make up what you're trying to import which is wrong 80% of the time as it does not know the whole code base.
There is a long running thread asking Github to disable Copilot for import statements. Thus far, Github doesn't care. Link to thread: https://github.com/orgs/community/discussions/8375
I have traditional autocomplete and copilot mapped to separate keys in my editor and have learned to treat them separately.
Copilot seems to be best for things like refactoring boilerplate within the same file, where it grabs patterns and can expand them, or if you are working “backwards” like you use a variable and then move up in the file to define it (where the LSP would see the error but won’t help you).
I never let copilot complete more than the end of my current line because I’ve been burned by very sneaky bugs way too often. It’s easier and less error prone to write code than read it.
LSP understands your project but has no idea what you want to do, copilot is like a helpful coworker looking over your shoulder at what you’re doing and suggesting things based on patterns they’ve seen in the past in different projects.
The other 70%, it generates distracting garbage.
I still like it because that trade-off works for me, but it's clearly not for everyone.
That's about the extent of it.