The intent here was to let, say, the JSHint extension replace the built-in JSLint extension... so we can't require that the names be the same.  The semantics of `replaceProvider` should be to just replace any/all existing providers registered for the given language.  So maybe remove this block and just change the first if to `if (!_providers[languageId] || replaceProvider)`?