Especially some attribute names of the extension elements are confusing because there doesn't seem to be any real pattern in their naming scheme - or if there is one, it's hard to grasp. Here are some examples:
Sometimes it's "implementation", "implementationClass", "className" or "serviceImplementation". Intention actions even have their own element "className".
Then there's "forClass" (lang.elementManipulator), but at the same time just "fileType" (quoteHandler).
And of course the most surprising one: "language" (for most lang.* extension points) vs. "key" (lang.syntaxHighlighterFactory). Not to mention the "annotator" element, while all other language related elements are prefixed with "lang.".
There are probably other examples which I haven't come across so far.
Together with the missing validation&completion in the plugin.xml, this makes using the extension mechanism a real pain. It involves a lot of guessing and searching for existing examples than necessary. Please unify this in a way that this is more intuitive to use.