From d48506f9c17915a72ff773f11728958e723e9e92 Mon Sep 17 00:00:00 2001 From: w0rp Date: Tue, 14 Nov 2017 23:25:01 +0000 Subject: [PATCH] Fix #757 - Show :ALEDetail messages in a window --- autoload/ale/cursor.vim | 6 ++---- autoload/ale/preview.vim | 18 ++++++++++++++++++ ftplugin/ale-preview.vim | 2 ++ test/test_cursor_warnings.vader | 22 ++++++++++++++-------- 4 files changed, 36 insertions(+), 12 deletions(-) create mode 100644 autoload/ale/preview.vim create mode 100644 ftplugin/ale-preview.vim diff --git a/autoload/ale/cursor.vim b/autoload/ale/cursor.vim index 1980c19..6907610 100644 --- a/autoload/ale/cursor.vim +++ b/autoload/ale/cursor.vim @@ -125,9 +125,7 @@ function! ale#cursor#ShowCursorDetail() abort if !empty(l:loc) let l:message = get(l:loc, 'detail', l:loc.text) - call s:EchoWithShortMess('off', l:message) - - " Set the echo marker, so we can clear it by moving the cursor. - let l:info.echoed = 1 + call ale#preview#Show(split(l:message, "\n")) + echo endif endfunction diff --git a/autoload/ale/preview.vim b/autoload/ale/preview.vim new file mode 100644 index 0000000..3b1c16a --- /dev/null +++ b/autoload/ale/preview.vim @@ -0,0 +1,18 @@ +" Author: w0rp +" Description: Preview windows for showing whatever information in. + +" Open a preview window and show some lines in it. +function! ale#preview#Show(lines) abort + silent pedit ALEPreviewWindow + wincmd P + setlocal modifiable + setlocal noreadonly + setlocal nobuflisted + setlocal filetype=ale-preview + setlocal buftype=nofile + setlocal bufhidden=wipe + :%d + call setline(1, a:lines) + setlocal nomodifiable + setlocal readonly +endfunction diff --git a/ftplugin/ale-preview.vim b/ftplugin/ale-preview.vim new file mode 100644 index 0000000..ffbffbd --- /dev/null +++ b/ftplugin/ale-preview.vim @@ -0,0 +1,2 @@ +" Close the ALEPreviewWindow window with the q key. +noremap q :q! diff --git a/test/test_cursor_warnings.vader b/test/test_cursor_warnings.vader index dbcbe66..c6dc526 100644 --- a/test/test_cursor_warnings.vader +++ b/test/test_cursor_warnings.vader @@ -97,6 +97,11 @@ After: " carried over between test cases. echomsg '' + " Close the preview window if it's open. + if &filetype is# 'ale-preview' + noautocmd :q! + endif + Given javascript(A Javscript file with warnings/errors): var x = 3 + 12345678 var x = 5*2 + parseInt("10"); @@ -138,20 +143,21 @@ Execute(The message at the cursor should be shown on InsertLeave): Execute(ALEDetail should print 'detail' attributes): call cursor(1, 1) - redir => g:output - ALEDetail - redir END + ALEDetail - AssertEqual "\nEvery statement should end with a semicolon\nsecond line", g:output + AssertEqual + \ ['Every statement should end with a semicolon', 'second line'], + \ getline(1, '$') Execute(ALEDetail should print regular 'text' attributes): call cursor(2, 10) - redir => g:output - ALEDetail - redir END + ALEDetail - AssertEqual "\nInfix operators must be spaced.", g:output + " ALEDetail opens a window, so check the text in it. + AssertEqual + \ ['Infix operators must be spaced.'], + \ getline(1, '$') Execute(ALEDetail should not capitlise cursor messages): call cursor(3, 1)