def METHOD_NAME(self, document_path=None):
    """Settings are constructed from a few sources:
        1. User settings, found in user's home directory
        2. Plugin settings, reported by PyLS plugins
        3. LSP settings, given to us from didChangeConfiguration
        4. Project settings, found in config files in the current project.
    Since this function is nondeterministic, it is important to call
    settings.cache_clear() when the config is updated
    """
    METHOD_NAME = {}
    sources = self._settings.get('configurationSources', DEFAULT_CONFIG_SOURCES)
    # Plugin configuration
    METHOD_NAME = _utils.merge_dicts(METHOD_NAME, self._plugin_settings)
    # LSP configuration
    METHOD_NAME = _utils.merge_dicts(METHOD_NAME, self._settings)
    # User configuration
    for source_name in reversed(sources):
        source = self._config_sources.get(source_name)
        if not source:
            continue
        source_conf = source.user_config()
        log.debug("Got user config from %s: %s", source.__class__.__name__, source_conf)
        METHOD_NAME = _utils.merge_dicts(METHOD_NAME, source_conf)
    # Project configuration
    for source_name in reversed(sources):
        source = self._config_sources.get(source_name)
        if not source:
            continue
        source_conf = source.project_config(document_path or self._root_path)
        log.debug("Got project config from %s: %s", source.__class__.__name__, source_conf)
        METHOD_NAME = _utils.merge_dicts(METHOD_NAME, source_conf)
    log.debug("With configuration: %s", METHOD_NAME)
    return METHOD_NAME