VIM version
VIM - Vi IMproved 8.0 (2016 Sep 12, compiled Jul 26 2017 20:13:43)
Operating System: Ubuntu 17.10
Current Filetype: python
Available Linters: ['flake8', 'mypy', 'prospector', 'pycodestyle', 'pyflakes', 'pylint', 'pyls']
Enabled Linters: ['pylint']
Linter Variables:
let g:ale_python_pylint_executable = 'pylint'
let g:ale_python_pylint_options = '--rcfile ~/.pylintrc'
let g:ale_python_pylint_use_global = 0
Global Variables:
let g:ale_cache_executable_check_failures = 0
let g:ale_change_sign_column_color = 0
let g:ale_command_wrapper = ''
let g:ale_completion_delay = 100
let g:ale_completion_enabled = 0
let g:ale_completion_max_suggestions = 50
let g:ale_echo_cursor = 1
let g:ale_echo_msg_error_str = 'Error'
let g:ale_echo_msg_format = '%code: %%s'
let g:ale_echo_msg_info_str = 'Info'
let g:ale_echo_msg_warning_str = 'Warning'
let g:ale_enabled = 1
let g:ale_fix_on_save = 0
let g:ale_fixers = {}
let g:ale_history_enabled = 0
let g:ale_history_log_output = 0
let g:ale_keep_list_window_open = 0
let g:ale_lint_delay = 200
let g:ale_lint_on_enter = 1
let g:ale_lint_on_filetype_changed = 1
let g:ale_lint_on_save = 1
let g:ale_lint_on_text_changed = 'always'
let g:ale_lint_on_insert_leave = 0
let g:ale_linter_aliases = {}
let g:ale_linters = {'javascript': ['eslint'], 'python': ['pylint']}
let g:ale_linters_explicit = 0
let g:ale_list_window_size = 10
let g:ale_list_vertical = 0
let g:ale_loclist_msg_format = '%code: %%s'
let g:ale_max_buffer_history_size = 20
let g:ale_max_signs = -1
let g:ale_maximum_file_size = 0
let g:ale_open_list = 0
let g:ale_pattern_options = {}
let g:ale_pattern_options_enabled = 0
let g:ale_set_balloons = 1
let g:ale_set_highlights = 1
let g:ale_set_loclist = 1
let g:ale_set_quickfix = 0
let g:ale_set_signs = 1
let g:ale_sign_column_always = 0
let g:ale_sign_error = '✗'
let g:ale_sign_info = '∆'
let g:ale_sign_offset = 1000000
let g:ale_sign_style_error = '✗'
let g:ale_sign_style_warning = '∆'
let g:ale_sign_warning = '∆'
let g:ale_statusline_format = ['%d error(s)', '%d warning(s)', 'OK']
let g:ale_type_map = {}
let g:ale_warn_about_trailing_blank_lines = 1
let g:ale_warn_about_trailing_whitespace = 1
Command History:
I have the following code:
9. from utils.defaults import *
In this case, pylint detects three different errors:
E: 9, 0: No name 'defaults' in module 'utils' (no-name-in-module)
E: 9, 0: Unable to import 'utils.defaults' (import-error)
W: 9, 0: Wildcard import utils.defaults (wildcard-import)
If you see the code inside Vim, you can see that the sign for this line corresponds to an error. Even so, the message shown in the bottom bar is a warning: "wildcard-import: Wildcard import utils.defaults".
Also, the highlight shown is the one that corresponds with the warnings. So, there is a clear inconsistency, as you can see in the following pictures:


Steps for repeating the bug:
The sign is correct. There are 2 errors and 1 warning on the line, and the errors take precedence. The message that is echoed could potentially be changed every so slightly. I think when the line and column numbers are equal for a set of problems, errors should take precedence over warnings. That way you'd see something like the "no name 'defaults" error or maybe the "Unable to import" error, instead of the warning.
I understand that errors should take preference over the warns (as the sign shows). So, why do the message and the highlight correspond to warns?
The message is wrong just because there's no precedence defined there. It's just a bug, in a way. I'll have a look at it hopefully soon.
Now higher severity problems will be preferred for displaying everywhere when two problems lie on the same cursor. The items are now sorted so higher severity items appear later in the lists, and the modified binary searches scan forwards till the find the last item on a column after finding one. That should result in errors being drawn on top of warnings, and error messages being shown instead of warnings.
Most helpful comment
Now higher severity problems will be preferred for displaying everywhere when two problems lie on the same cursor. The items are now sorted so higher severity items appear later in the lists, and the modified binary searches scan forwards till the find the last item on a column after finding one. That should result in errors being drawn on top of warnings, and error messages being shown instead of warnings.