summaryrefslogtreecommitdiff
path: root/autoload
diff options
context:
space:
mode:
Diffstat (limited to 'autoload')
-rw-r--r--autoload/ale/cursor.vim14
-rw-r--r--autoload/ale/debugging.vim5
-rw-r--r--autoload/ale/engine.vim6
-rw-r--r--autoload/ale/events.vim10
-rw-r--r--autoload/ale/fix/registry.vim2
-rw-r--r--autoload/ale/fixers/ocamlformat.vim6
-rw-r--r--autoload/ale/fixers/prettier.vim1
-rw-r--r--autoload/ale/linter.vim2
-rw-r--r--autoload/ale/util.vim11
-rw-r--r--autoload/ale/virtualtext.vim104
10 files changed, 142 insertions, 19 deletions
diff --git a/autoload/ale/cursor.vim b/autoload/ale/cursor.vim
index 32ce8c84..6672c349 100644
--- a/autoload/ale/cursor.vim
+++ b/autoload/ale/cursor.vim
@@ -52,16 +52,6 @@ function! ale#cursor#TruncatedEcho(original_message) abort
endtry
endfunction
-function! s:FindItemAtCursor(buffer) abort
- let l:info = get(g:ale_buffer_info, a:buffer, {})
- let l:loclist = get(l:info, 'loclist', [])
- let l:pos = getcurpos()
- let l:index = ale#util#BinarySearch(l:loclist, a:buffer, l:pos[1], l:pos[2])
- let l:loc = l:index >= 0 ? l:loclist[l:index] : {}
-
- return [l:info, l:loc]
-endfunction
-
function! s:StopCursorTimer() abort
if s:cursor_timer != -1
call timer_stop(s:cursor_timer)
@@ -85,7 +75,7 @@ function! ale#cursor#EchoCursorWarning(...) abort
return
endif
- let [l:info, l:loc] = s:FindItemAtCursor(l:buffer)
+ let [l:info, l:loc] = ale#util#FindItemAtCursor(l:buffer)
if g:ale_echo_cursor
if !empty(l:loc)
@@ -169,7 +159,7 @@ function! ale#cursor#ShowCursorDetail() abort
call s:StopCursorTimer()
- let [l:info, l:loc] = s:FindItemAtCursor(l:buffer)
+ let [l:info, l:loc] = ale#util#FindItemAtCursor(l:buffer)
if !empty(l:loc)
call s:ShowCursorDetailForItem(l:loc, {'stay_here': 0})
diff --git a/autoload/ale/debugging.vim b/autoload/ale/debugging.vim
index 34c13770..6c2bfbee 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,7 @@ let s:global_variable_list = [
\ 'ale_statusline_format',
\ 'ale_type_map',
\ 'ale_use_global_executables',
+\ 'ale_virtualtext_cursor',
\ '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..b44be73c 100644
--- a/autoload/ale/engine.vim
+++ b/autoload/ale/engine.vim
@@ -304,6 +304,12 @@ function! ale#engine#SetResults(buffer, loclist) abort
call ale#cursor#EchoCursorWarning()
endif
+ if g:ale_virtualtext_cursor
+ " Try and show the warning now.
+ " This will only do something meaningful if we're in normal mode.
+ call ale#virtualtext#ShowCursorWarning()
+ endif
+
" Reset the save event marker, used for opening windows, etc.
call setbufvar(a:buffer, 'ale_save_event_fired', 0)
" Set a marker showing how many times a buffer has been checked.
diff --git a/autoload/ale/events.vim b/autoload/ale/events.vim
index e48ad488..c3dbd378 100644
--- a/autoload/ale/events.vim
+++ b/autoload/ale/events.vim
@@ -29,7 +29,7 @@ function! ale#events#SaveEvent(buffer) abort
call setbufvar(a:buffer, 'ale_save_event_fired', 1)
endif
- if ale#Var(a:buffer, 'fix_on_save')
+ if ale#Var(a:buffer, 'fix_on_save') && !ale#events#QuitRecently(a:buffer)
let l:will_fix = ale#fix#Fix(a:buffer, 'save_file')
let l:should_lint = l:should_lint && !l:will_fix
endif
@@ -139,6 +139,14 @@ function! ale#events#Init() abort
autocmd InsertLeave * if exists('*ale#engine#Cleanup') | call ale#cursor#EchoCursorWarning() | endif
endif
+ if g:ale_virtualtext_cursor
+ autocmd CursorMoved,CursorHold * if exists('*ale#engine#Cleanup') | call ale#virtualtext#ShowCursorWarningWithDelay() | 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
+ " not be changed here.
+ autocmd InsertLeave * if exists('*ale#engine#Cleanup') | call ale#virtualtext#ShowCursorWarning() | endif
+ endif
+
if g:ale_close_preview_on_insert
autocmd InsertEnter * if exists('*ale#preview#CloseIfTypeMatches') | call ale#preview#CloseIfTypeMatches('ale-preview') | endif
endif
diff --git a/autoload/ale/fix/registry.vim b/autoload/ale/fix/registry.vim
index 98f52232..f8183a4a 100644
--- a/autoload/ale/fix/registry.vim
+++ b/autoload/ale/fix/registry.vim
@@ -56,7 +56,7 @@ let s:default_registry = {
\ },
\ 'prettier': {
\ 'function': 'ale#fixers#prettier#Fix',
-\ 'suggested_filetypes': ['javascript', 'typescript', 'css', 'less', 'scss', 'json', 'json5', 'graphql', 'markdown', 'vue'],
+\ 'suggested_filetypes': ['javascript', 'typescript', 'css', 'less', 'scss', 'json', 'json5', 'graphql', 'markdown', 'vue', 'html'],
\ 'description': 'Apply prettier to a file.',
\ },
\ 'prettier_eslint': {
diff --git a/autoload/ale/fixers/ocamlformat.vim b/autoload/ale/fixers/ocamlformat.vim
index fac142aa..9b7c3e12 100644
--- a/autoload/ale/fixers/ocamlformat.vim
+++ b/autoload/ale/fixers/ocamlformat.vim
@@ -5,14 +5,14 @@ call ale#Set('ocaml_ocamlformat_executable', 'ocamlformat')
call ale#Set('ocaml_ocamlformat_options', '')
function! ale#fixers#ocamlformat#Fix(buffer) abort
+ let l:filename = expand('#' . a:buffer . ':p')
let l:executable = ale#Var(a:buffer, 'ocaml_ocamlformat_executable')
let l:options = ale#Var(a:buffer, 'ocaml_ocamlformat_options')
return {
\ 'command': ale#Escape(l:executable)
\ . (empty(l:options) ? '' : ' ' . l:options)
- \ . ' --inplace'
- \ . ' %t',
- \ 'read_temporary_file': 1,
+ \ . ' --name=' . ale#Escape(l:filename)
+ \ . ' -'
\}
endfunction
diff --git a/autoload/ale/fixers/prettier.vim b/autoload/ale/fixers/prettier.vim
index 608240a5..58dea159 100644
--- a/autoload/ale/fixers/prettier.vim
+++ b/autoload/ale/fixers/prettier.vim
@@ -58,6 +58,7 @@ function! ale#fixers#prettier#ApplyFixForVersion(buffer, version_output) abort
\ 'markdown': 'markdown',
\ 'vue': 'vue',
\ 'yaml': 'yaml',
+ \ 'html': 'html',
\}
let l:parser = ''
diff --git a/autoload/ale/linter.vim b/autoload/ale/linter.vim
index 114765e6..0a249282 100644
--- a/autoload/ale/linter.vim
+++ b/autoload/ale/linter.vim
@@ -16,6 +16,7 @@ let s:default_ale_linter_aliases = {
\ 'systemverilog': 'verilog',
\ 'verilog_systemverilog': ['verilog_systemverilog', 'verilog'],
\ 'vimwiki': 'markdown',
+\ 'vue': ['vue', 'javascript'],
\ 'zsh': 'sh',
\}
@@ -40,6 +41,7 @@ let s:default_ale_linters = {
\ 'rust': ['cargo'],
\ 'spec': [],
\ 'text': [],
+\ 'vue': ['eslint', 'vls'],
\ 'zsh': ['shell'],
\}
diff --git a/autoload/ale/util.vim b/autoload/ale/util.vim
index e0491653..bb478957 100644
--- a/autoload/ale/util.vim
+++ b/autoload/ale/util.vim
@@ -452,3 +452,14 @@ function! ale#util#Col(str, chr) abort
return strlen(join(split(a:str, '\zs')[0:a:chr - 2], '')) + 1
endfunction
+
+function! ale#util#FindItemAtCursor(buffer) abort
+ let l:info = get(g:ale_buffer_info, a:buffer, {})
+ let l:loclist = get(l:info, 'loclist', [])
+ let l:pos = getcurpos()
+ let l:index = ale#util#BinarySearch(l:loclist, a:buffer, l:pos[1], l:pos[2])
+ let l:loc = l:index >= 0 ? l:loclist[l:index] : {}
+
+ return [l:info, l:loc]
+endfunction
+
diff --git a/autoload/ale/virtualtext.vim b/autoload/ale/virtualtext.vim
new file mode 100644
index 00000000..85a12de6
--- /dev/null
+++ b/autoload/ale/virtualtext.vim
@@ -0,0 +1,104 @@
+scriptencoding utf-8
+" Author: w0rp <devw0rp@gmail.com>
+" Author: Luan Santos <cfcluan@gmail.com>
+" Description: Shows lint message for the current line as virtualtext, if any
+
+" Controls the milliseconds delay before showing a message.
+let g:ale_virtualtext_delay = get(g:, 'ale_virtualtext_delay', 10)
+let s:cursor_timer = -1
+let s:last_pos = [0, 0, 0]
+
+function! ale#virtualtext#Clear() 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#virtualtext#ShowMessage(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:StopCursorTimer() abort
+ if s:cursor_timer != -1
+ call timer_stop(s:cursor_timer)
+ let s:cursor_timer = -1
+ endif
+endfunction
+
+function! ale#virtualtext#ShowCursorWarning(...) abort
+ if !g:ale_virtualtext_cursor
+ return
+ endif
+
+ let l:buffer = bufnr('')
+
+ if mode(1) isnot# 'n'
+ return
+ endif
+
+ if ale#ShouldDoNothing(l:buffer)
+ return
+ endif
+
+ let [l:info, l:loc] = ale#util#FindItemAtCursor(l:buffer)
+
+ call ale#virtualtext#Clear()
+
+ 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# 'W'
+ let l:hl_group = 'ALEWarning'
+ endif
+
+ call ale#virtualtext#ShowMessage(l:msg, l:hl_group)
+ endif
+endfunction
+
+function! ale#virtualtext#ShowCursorWarningWithDelay() abort
+ let l:buffer = bufnr('')
+
+ if !g:ale_virtualtext_cursor
+ return
+ endif
+
+ if mode(1) isnot# 'n'
+ return
+ endif
+
+ call s:StopCursorTimer()
+
+ let l:pos = getcurpos()[0:2]
+
+ " Check the current buffer, line, and column number against the last
+ " recorded position. If the position has actually changed, *then*
+ " we should show something. Otherwise we can end up doing processing
+ " the show message far too frequently.
+ if l:pos != s:last_pos
+ let l:delay = ale#Var(l:buffer, 'virtualtext_delay')
+
+ let s:last_pos = l:pos
+ let s:cursor_timer = timer_start(
+ \ l:delay,
+ \ function('ale#virtualtext#ShowCursorWarning')
+ \)
+ endif
+endfunction
+