我将用我的解决方案(使用 ALE)发布一个答案,以防它帮助其他任何人,但会接受任何其他更直接解决问题的答案。
我的主要问题是我不只将 Neomake 用于 linting:以 JavaScript 为例,它在保存时被用作测试运行程序,我也可以看到从中启动暂存构建任务(例如 React Native 测试构建)。我想我有 ALE 和 Neomake 合作,至少要继续:
" Suppress ALE warning about conflicts with Neomake
let g:ale_emit_conflict_warnings = 0
" JavaScript make/test
highlight NeomakeErrorMsg ctermfg=1 ctermbg=18
highlight NeomakeWarningMsg ctermfg=16 ctermbg=18
let g:neomake_error_sign = {
\ 'text': '●',
\ 'texthl': 'NeomakeErrorMsg'
\ }
let g:neomake_warning_sign = {
\ 'text': '●',
\ 'texthl': 'NeomakeWarningMsg'
\ }
let g:neomake_open_list = 2
" This reads config from a file specifying a custom Jest
" reporter (see below) making it easier to parse output with
" a Vim errorformat
let g:neomake_javascript_jest_maker = {
\ 'exe': './node_modules/jest-cli/bin/jest.js',
\ 'args': [ '-c=./vim-jest.json', '--no-watchman' ],
\ 'errorformat':
\ '%f:%l:%c:%t:%m,' .
\ '%-G%.%#'
\ }
" By setting this explicitly, we overwrite the default
" (so Neomake shouldn't attempt to launch standard/eslint)
let g:neomake_javascript_enabled_makers = ['jest']
call neomake#configure#automake('w')
" linting
let g:ale_sign_error = '▶▶'
let g:ale_sign_warning = '▶▶'
highlight ALEErrorSign ctermfg=1 ctermbg=18
highlight ALEWarningSign ctermfg=16 ctermbg=18
let g:ale_linters = {
\ 'javascript': ['standard']
\ }
let g:ale_fixers = {
\ 'javascript': ['standard']
\ }
let g:ale_fix_on_save = 1
我vim-jest.json
包含每个项目我需要的任何 Jest 配置,至少是这样的:
{
"reporters": [ "jest-simple-reporter" ]
}
jest-simple-reporter是一个非常粗鲁的记者,我精心设计了 Jest 相当宽泛的输出,每个灯具只有一条线。它确实需要安装在当前项目中devDependencies
,因为 Vim 的单独配置,它不需要在test
脚本或项目 Jest 配置中使用。
有趣的是,当我关闭 时ale_fix_on_save
,Neomake 的警告/错误标志似乎优先出现在排水沟中。只有在我通过测试后,linter 的标志才会出现。工作得很好,保存时修复了错误,并指出了那些无法修复的错误,与测试失败标志很好地共存。