From 42efd517232c3f62289910e53f1d2fe2549196cf Mon Sep 17 00:00:00 2001 From: w0rp Date: Wed, 31 May 2017 15:19:58 +0100 Subject: [PATCH] Fix #596 - Report exceptions thrown by flake8 --- ale_linters/python/flake8.vim | 2 +- autoload/ale/handlers/python.vim | 10 +++++++ test/handler/test_common_handlers.vader | 37 +++++++++++++++++++++++++ 3 files changed, 48 insertions(+), 1 deletion(-) diff --git a/ale_linters/python/flake8.vim b/ale_linters/python/flake8.vim index 1bed03b..253c710 100644 --- a/ale_linters/python/flake8.vim +++ b/ale_linters/python/flake8.vim @@ -99,7 +99,7 @@ call ale#linter#Define('python', { \ 'executable_callback': 'ale_linters#python#flake8#GetExecutable', \ 'command_chain': [ \ {'callback': 'ale_linters#python#flake8#VersionCheck'}, -\ {'callback': 'ale_linters#python#flake8#GetCommand'}, +\ {'callback': 'ale_linters#python#flake8#GetCommand', 'output_stream': 'both'}, \ ], \ 'callback': 'ale#handlers#python#HandlePEP8Format', \}) diff --git a/autoload/ale/handlers/python.vim b/autoload/ale/handlers/python.vim index 952df8f..419e262 100644 --- a/autoload/ale/handlers/python.vim +++ b/autoload/ale/handlers/python.vim @@ -2,6 +2,16 @@ " Description: Error handling for flake8, etc. function! ale#handlers#python#HandlePEP8Format(buffer, lines) abort + for l:line in a:lines[:10] + if match(l:line, '^Traceback') >= 0 + return [{ + \ 'lnum': 1, + \ 'text': 'An exception was thrown. See :ALEDetail', + \ 'detail': join(a:lines, "\n"), + \}] + endif + endfor + " Matches patterns line the following: " " Matches patterns line the following: diff --git a/test/handler/test_common_handlers.vader b/test/handler/test_common_handlers.vader index e945b2c..0a83f94 100644 --- a/test/handler/test_common_handlers.vader +++ b/test/handler/test_common_handlers.vader @@ -75,6 +75,43 @@ Execute (HandlePEP8Format should handle names with spaces): \ 'C:\something\with spaces.py:6:6: E111 indentation is not a multiple of four', \ ]) +Execute (HandlePEP8Format should stack traces): + AssertEqual + \ [ + \ { + \ 'lnum': 1, + \ 'text': 'An exception was thrown. See :ALEDetail', + \ 'detail': join([ + \ 'Traceback (most recent call last):', + \ ' File "/usr/local/bin/flake8", line 7, in ', + \ ' from flake8.main.cli import main', + \ ' File "/usr/local/lib/python2.7/dist-packages/flake8/main/cli.py", line 2, in ', + \ ' from flake8.main import application', + \ ' File "/usr/local/lib/python2.7/dist-packages/flake8/main/application.py", line 17, in ', + \ ' from flake8.plugins import manager as plugin_manager', + \ ' File "/usr/local/lib/python2.7/dist-packages/flake8/plugins/manager.py", line 5, in ', + \ ' import pkg_resources', + \ ' File "/usr/lib/python2.7/dist-packages/pkg_resources/__init__.py", line 35, in ', + \ ' import email.parser', + \ 'ImportError: No module named parser', + \ ], "\n"), + \ }, + \ ], + \ ale#handlers#python#HandlePEP8Format(42, [ + \ 'Traceback (most recent call last):', + \ ' File "/usr/local/bin/flake8", line 7, in ', + \ ' from flake8.main.cli import main', + \ ' File "/usr/local/lib/python2.7/dist-packages/flake8/main/cli.py", line 2, in ', + \ ' from flake8.main import application', + \ ' File "/usr/local/lib/python2.7/dist-packages/flake8/main/application.py", line 17, in ', + \ ' from flake8.plugins import manager as plugin_manager', + \ ' File "/usr/local/lib/python2.7/dist-packages/flake8/plugins/manager.py", line 5, in ', + \ ' import pkg_resources', + \ ' File "/usr/lib/python2.7/dist-packages/pkg_resources/__init__.py", line 35, in ', + \ ' import email.parser', + \ 'ImportError: No module named parser', + \ ]) + Execute (HandleGCCFormat should handle the correct lines of output): AssertEqual \ [