aboutsummaryrefslogtreecommitdiff
path: root/runtime/autoload/health.vim
diff options
context:
space:
mode:
Diffstat (limited to 'runtime/autoload/health.vim')
-rw-r--r--runtime/autoload/health.vim130
1 files changed, 65 insertions, 65 deletions
diff --git a/runtime/autoload/health.vim b/runtime/autoload/health.vim
index edcb3d792d..a94688cbf9 100644
--- a/runtime/autoload/health.vim
+++ b/runtime/autoload/health.vim
@@ -1,15 +1,30 @@
-" Dictionary where we keep all of the healtch check functions we've found.
+" Dictionary of all health check functions we have found.
" They will only be run if the value is true
let g:health_checkers = get(g:, 'health_checkers', {})
let s:current_checker = get(s:, 'current_checker', '')
-""
-" Function to run the health checkers
-" It manages the output and any file local settings
+function! s:enhance_syntax() abort
+ syntax keyword healthError ERROR
+ highlight link healthError Error
+
+ syntax keyword healthWarning WARNING
+ highlight link healthWarning WarningMsg
+
+ syntax keyword healthInfo INFO
+ highlight link healthInfo ModeMsg
+
+ syntax keyword healthSuccess SUCCESS
+ highlight link healthSuccess Function
+
+ syntax keyword healthSuggestion SUGGESTION
+ highlight link healthSuggestion String
+endfunction
+
+" Runs the health checkers. Manages the output and buffer-local settings.
function! health#check(bang) abort
- let l:report = '# Checking health'
+ let l:report = ''
- if g:health_checkers == {}
+ if empty(g:health_checkers)
call health#add_checker(s:_default_checkers())
endif
@@ -17,20 +32,18 @@ function! health#check(bang) abort
" Disabled checkers will not run their registered check functions
if l:checker[1]
let s:current_checker = l:checker[0]
- let l:report .= "\n\n--------------------------------------------------------------------------------\n"
- let l:report .= printf("\n## Checker %s says:\n", s:current_checker)
+ let l:report .= printf("\n%s\n================================================================================",
+ \ s:current_checker)
- let l:report .= capture('call ' . l:checker[0] . '()')
+ let l:report .= execute('call ' . l:checker[0] . '()')
endif
endfor
- let l:report .= "\n--------------------------------------------------------------------------------\n"
-
if a:bang
new
setlocal bufhidden=wipe
- set syntax=health
- set filetype=health
+ set filetype=markdown
+ call s:enhance_syntax()
call setline(1, split(report, "\n"))
setlocal nomodified
else
@@ -43,80 +56,76 @@ function! health#check(bang) abort
endif
endfunction
-" Report functions {{{
-
-""
-" Start a report section.
-" It should represent a general area of tests that can be understood
-" from the argument {name}
-" To start a new report section, use this function again
+" Starts a new report.
function! health#report_start(name) abort " {{{
- echo ' - Checking: ' . a:name
+ echo "\n## " . a:name
endfunction " }}}
-""
+" Indents lines *except* line 1 of a string if it contains newlines.
+function! s:indent_after_line1(s, columns) abort
+ let lines = split(a:s, "\n", 0)
+ if len(lines) < 2 " We do not indent line 1, so nothing to do.
+ return a:s
+ endif
+ for i in range(1, len(lines)-1) " Indent lines after the first.
+ let lines[i] = substitute(lines[i], '^\s*', repeat(' ', a:columns), 'g')
+ endfor
+ return join(lines, "\n")
+endfunction
+
" Format a message for a specific report item
function! s:format_report_message(status, msg, ...) abort " {{{
- let l:output = ' - ' . a:status . ': ' . a:msg
+ let output = ' - ' . a:status . ': ' . s:indent_after_line1(a:msg, 4)
+ let suggestions = []
- " Check optional parameters
+ " Optional parameters
if a:0 > 0
- " Suggestions go in the first optional parameter can be a string or list
- if type(a:1) == type("")
- let l:output .= "\n - SUGGESTIONS:"
- let l:output .= "\n - " . a:1
- elseif type(a:1) == type([])
- " Report each suggestion
- let l:output .= "\n - SUGGESTIONS:"
- for l:suggestion in a:1
- let l:output .= "\n - " . l:suggestion
- endfor
- else
- echoerr "A string or list is required as the optional argument for suggestions"
+ let suggestions = type(a:1) == type("") ? [a:1] : a:1
+ if type(suggestions) != type([])
+ echoerr "Expected String or List"
endif
endif
+ " Report each suggestion
+ if len(suggestions) > 0
+ let output .= "\n - SUGGESTIONS:"
+ endif
+ for suggestion in suggestions
+ let output .= "\n - " . s:indent_after_line1(suggestion, 10)
+ endfor
+
return output
endfunction " }}}
-""
" Use {msg} to report information in the current section
function! health#report_info(msg) abort " {{{
echo s:format_report_message('INFO', a:msg)
endfunction " }}}
-""
" Use {msg} to represent the check that has passed
function! health#report_ok(msg) abort " {{{
echo s:format_report_message('SUCCESS', a:msg)
endfunction " }}}
-""
" Use {msg} to represent a failed health check and optionally a list of suggestions on how to fix it.
function! health#report_warn(msg, ...) abort " {{{
- if a:0 > 0 && type(a:1) == type([])
+ if a:0 > 0
echo s:format_report_message('WARNING', a:msg, a:1)
else
echo s:format_report_message('WARNING', a:msg)
endif
endfunction " }}}
-""
" Use {msg} to represent a critically failed health check and optionally a list of suggestions on how to fix it.
function! health#report_error(msg, ...) abort " {{{
- if a:0 > 0 && type(a:1) == type([])
+ if a:0 > 0
echo s:format_report_message('ERROR', a:msg, a:1)
else
echo s:format_report_message('ERROR', a:msg)
endif
endfunction " }}}
-" }}}
-" Health checker management {{{
-
-""
-" Add a single health checker
-" It does not modify any values if the checker already exists
+" Adds a health checker. Does nothing if the checker already exists.
function! s:add_single_checker(checker_name) abort " {{{
if has_key(g:health_checkers, a:checker_name)
return
@@ -125,25 +134,19 @@ function! s:add_single_checker(checker_name) abort " {{{
endif
endfunction " }}}
-""
-" Enable a single health checker
-" It will modify the values if the checker already exists
+" Enables a health checker.
function! s:enable_single_checker(checker_name) abort " {{{
let g:health_checkers[a:checker_name] = v:true
endfunction " }}}
-""
-" Disable a single health checker
-" It will modify the values if the checker already exists
+" Disables a health checker.
function! s:disable_single_checker(checker_name) abort " {{{
let g:health_checkers[a:checker_name] = v:false
endfunction " }}}
-""
-" Add at least one health checker
-" {checker_name} can be specified by either a list of strings or a single string.
-" It does not modify any values if the checker already exists
+" Adds a health checker. `checker_name` can be a list of strings or
+" a single string. Does nothing if the checker already exists.
function! health#add_checker(checker_name) abort " {{{
if type(a:checker_name) == type('')
call s:add_single_checker(a:checker_name)
@@ -154,9 +157,8 @@ function! health#add_checker(checker_name) abort " {{{
endif
endfunction " }}}
-""
-" Enable at least one health checker
-" {checker_name} can be specified by either a list of strings or a single string.
+" Enables a health checker. `checker_name` can be a list of strings or
+" a single string.
function! health#enable_checker(checker_name) abort " {{{
if type(a:checker_name) == type('')
call s:enable_single_checker(a:checker_name)
@@ -167,9 +169,8 @@ function! health#enable_checker(checker_name) abort " {{{
endif
endfunction " }}}
-""
-" Disable at least one health checker
-" {checker_name} can be specified by either a list of strings or a single string.
+" Disables a health checker. `checker_name` can be a list of strings or
+" a single string.
function! health#disable_checker(checker_name) abort " {{{
if type(a:checker_name) == type('')
call s:disable_single_checker(a:checker_name)
@@ -196,4 +197,3 @@ function! s:_default_checkers() abort " {{{
endfor
return checkers_to_source
endfunction " }}}
-" }}}