summaryrefslogtreecommitdiff
path: root/autoload
diff options
context:
space:
mode:
authorLuan Santos <cfcluan@gmail.com>2018-11-05 22:45:40 -0800
committerLuan Santos <cfcluan@gmail.com>2018-11-05 22:45:40 -0800
commitc41dbe2ba9862037122b98fa2bb55fd72d277b74 (patch)
tree6c741ebab57adde45c821a5a6ed80dfc67a2323c /autoload
parent945dd2fa26af2632d78855d7fe3ff113f9b41a91 (diff)
downloadale-c41dbe2ba9862037122b98fa2bb55fd72d277b74.zip
Add support for nvim's virtualtext on cursor
- Add g:ale_virtualtext_cursor boolean to enable/disable it - Add g:ale_virtualtext_prefix to configure what prefix to use (default: '> ') - Requires neovim 0.3.2's unreleased API `nvim_buf_set_virtual_text`
Diffstat (limited to 'autoload')
-rw-r--r--autoload/ale/cursor.vim45
-rw-r--r--autoload/ale/debugging.vim6
-rw-r--r--autoload/ale/engine.vim2
-rw-r--r--autoload/ale/events.vim2
4 files changed, 49 insertions, 6 deletions
diff --git a/autoload/ale/cursor.vim b/autoload/ale/cursor.vim
index 32ce8c84..9b4b9c1a 100644
--- a/autoload/ale/cursor.vim
+++ b/autoload/ale/cursor.vim
@@ -52,6 +52,29 @@ function! ale#cursor#TruncatedEcho(original_message) abort
endtry
endfunction
+function! ale#cursor#ClearVirtualText() abort
+ if !has('nvim-0.3.2')
+ return
+ endif
+
+ let l:buffer = bufnr('')
+
+ call nvim_buf_clear_highlight(l:buffer, 1000, 0, -1)
+endfunction
+
+function! ale#cursor#ShowVirtualText(message, hl_group) abort
+ if !has('nvim-0.3.2')
+ return
+ endif
+
+ let l:cursor_position = getcurpos()
+ let l:line = line('.')
+ let l:buffer = bufnr('')
+ let l:prefix = get(g:, 'ale_virtualtext_prefix', '> ')
+
+ call nvim_buf_set_virtual_text(l:buffer, 1000, l:line-1, [[l:prefix.a:message, a:hl_group]], {})
+endfunction
+
function! s:FindItemAtCursor(buffer) abort
let l:info = get(g:ale_buffer_info, a:buffer, {})
let l:loclist = get(l:info, 'loclist', [])
@@ -72,7 +95,7 @@ endfunction
function! ale#cursor#EchoCursorWarning(...) abort
let l:buffer = bufnr('')
- if !g:ale_echo_cursor && !g:ale_cursor_detail
+ if !g:ale_echo_cursor && !g:ale_cursor_detail && !g:ale_virtualtext_cursor
return
endif
@@ -108,12 +131,30 @@ function! ale#cursor#EchoCursorWarning(...) abort
call ale#preview#CloseIfTypeMatches('ale-preview')
endif
endif
+
+ if g:ale_virtualtext_cursor
+ call ale#cursor#ClearVirtualText()
+
+ if !empty(l:loc)
+ let l:msg = get(l:loc, 'detail', l:loc.text)
+ let l:hl_group = 'ALEInfo'
+ let l:type = get(l:loc, 'type', 'E')
+
+ if l:type is# 'E'
+ let l:hl_group = 'ALEError'
+ elseif l:type is# 'I'
+ let l:hl_group = 'ALEWarning'
+ endif
+
+ call ale#cursor#ShowVirtualText(l:msg, l:hl_group)
+ endif
+ endif
endfunction
function! ale#cursor#EchoCursorWarningWithDelay() abort
let l:buffer = bufnr('')
- if !g:ale_echo_cursor && !g:ale_cursor_detail
+ if !g:ale_echo_cursor && !g:ale_cursor_detail && !g:ale_virtualtext_cursor
return
endif
diff --git a/autoload/ale/debugging.vim b/autoload/ale/debugging.vim
index 34c13770..ac7e02e3 100644
--- a/autoload/ale/debugging.vim
+++ b/autoload/ale/debugging.vim
@@ -22,14 +22,14 @@ let s:global_variable_list = [
\ 'ale_lint_delay',
\ 'ale_lint_on_enter',
\ 'ale_lint_on_filetype_changed',
+\ 'ale_lint_on_insert_leave',
\ 'ale_lint_on_save',
\ 'ale_lint_on_text_changed',
-\ 'ale_lint_on_insert_leave',
\ 'ale_linter_aliases',
\ 'ale_linters',
\ 'ale_linters_explicit',
-\ 'ale_list_window_size',
\ 'ale_list_vertical',
+\ 'ale_list_window_size',
\ 'ale_loclist_msg_format',
\ 'ale_max_buffer_history_size',
\ 'ale_max_signs',
@@ -52,6 +52,8 @@ let s:global_variable_list = [
\ 'ale_statusline_format',
\ 'ale_type_map',
\ 'ale_use_global_executables',
+\ 'ale_virtualtext_cursor',
+\ 'ale_virtualtext_prefix',
\ 'ale_warn_about_trailing_blank_lines',
\ 'ale_warn_about_trailing_whitespace',
\]
diff --git a/autoload/ale/engine.vim b/autoload/ale/engine.vim
index e85e4d66..f49d607b 100644
--- a/autoload/ale/engine.vim
+++ b/autoload/ale/engine.vim
@@ -298,7 +298,7 @@ function! ale#engine#SetResults(buffer, loclist) abort
endif
if l:linting_is_done
- if g:ale_echo_cursor
+ if g:ale_echo_cursor || g:ale_virtualtext_cursor
" Try and echo the warning now.
" This will only do something meaningful if we're in normal mode.
call ale#cursor#EchoCursorWarning()
diff --git a/autoload/ale/events.vim b/autoload/ale/events.vim
index e48ad488..4efb42e3 100644
--- a/autoload/ale/events.vim
+++ b/autoload/ale/events.vim
@@ -131,7 +131,7 @@ function! ale#events#Init() abort
autocmd InsertLeave * call ale#Queue(0)
endif
- if g:ale_echo_cursor || g:ale_cursor_detail
+ if g:ale_echo_cursor || g:ale_cursor_detail || g:ale_virtualtext_cursor
autocmd CursorMoved,CursorHold * if exists('*ale#engine#Cleanup') | call ale#cursor#EchoCursorWarningWithDelay() | endif
" Look for a warning to echo as soon as we leave Insert mode.
" The script's position variable used when moving the cursor will