From 80ff84db84ba172bfcdee5e2748924bb2249134b Mon Sep 17 00:00:00 2001 From: w0rp Date: Tue, 20 May 2025 16:59:42 +0100 Subject: [PATCH] Skip whitespace warnings from ruff, if so configured --- ale_linters/python/ruff.vim | 33 ++++++++----- test/handler/test_ruff_handler.vader | 74 ++++++++++++++++++++++++++++ 2 files changed, 96 insertions(+), 11 deletions(-) diff --git a/ale_linters/python/ruff.vim b/ale_linters/python/ruff.vim index 8eb55164..e6fbda2a 100644 --- a/ale_linters/python/ruff.vim +++ b/ale_linters/python/ruff.vim @@ -72,20 +72,31 @@ function! ale_linters#python#ruff#Handle(buffer, lines) abort try let l:item = json_decode(l:line) catch - let l:item = v:null + " If we can't decode a line, skip it. + continue endtry - if !empty(l:item) - call add(l:output, { - \ 'lnum': l:item.location.row, - \ 'col': l:item.location.column, - \ 'end_lnum': l:item.end_location.row, - \ 'end_col': l:item.end_location.column - 1, - \ 'code': l:item.code, - \ 'text': l:item.message, - \ 'type': l:item.code =~? '\vE\d+' ? 'E' : 'W', - \}) + if (l:item.code is# 'W291' || l:item.code is# 'W293') + \&& !ale#Var(a:buffer, 'warn_about_trailing_whitespace') + " Skip warnings for trailing whitespace if the option is off. + continue endif + + if l:item.code is# 'W391' + \&& !ale#Var(a:buffer, 'warn_about_trailing_blank_lines') + " Skip warnings for trailing blank lines if the option is off + continue + endif + + call add(l:output, { + \ 'lnum': l:item.location.row, + \ 'col': l:item.location.column, + \ 'end_lnum': l:item.end_location.row, + \ 'end_col': l:item.end_location.column - 1, + \ 'code': l:item.code, + \ 'text': l:item.message, + \ 'type': l:item.code =~? '\vE\d+' ? 'E' : 'W', + \}) endfor return l:output diff --git a/test/handler/test_ruff_handler.vader b/test/handler/test_ruff_handler.vader index 82012706..6a834a37 100644 --- a/test/handler/test_ruff_handler.vader +++ b/test/handler/test_ruff_handler.vader @@ -1,7 +1,18 @@ Before: + Save g:ale_warn_about_trailing_blank_lines + Save g:ale_warn_about_trailing_whitespace + + let g:ale_warn_about_trailing_blank_lines = 1 + let g:ale_warn_about_trailing_whitespace = 1 + runtime ale_linters/python/ruff.vim After: + Restore + + unlet! b:ale_warn_about_trailing_blank_lines + unlet! b:ale_warn_about_trailing_whitespace + call ale#linter#Reset() Execute(We should handle basic output of ruff correctly): @@ -41,3 +52,66 @@ Execute(We should handle mixed error lines and JSON output from ruff): \ 'ERROR: oh noes!', \ '{"cell":null,"code":"F821","end_location":{"column":8,"row":2},"filename":"/home/eduardo/Code/Python/test.py","fix":null,"location":{"column":1,"row":2},"message":"Undefined name example","noqa_row":2,"url":"https://docs.astral.sh/ruff/rules/undefined-name"}', \ ]) + +Execute(Warnings about trailing whitespace should be reported by default): + AssertEqual + \ [ + \ { + \ 'lnum': 6, + \ 'col': 1, + \ 'end_lnum': 6, + \ 'end_col': 1, + \ 'code': 'W291', + \ 'type': 'W', + \ 'text': 'who cares', + \ }, + \ { + \ 'lnum': 6, + \ 'col': 1, + \ 'end_lnum': 6, + \ 'end_col': 1, + \ 'code': 'W293', + \ 'type': 'W', + \ 'text': 'who cares', + \ }, + \ ], + \ ale_linters#python#ruff#Handle(bufnr(''), [ + \ '{"cell":null,"code":"W291","end_location":{"column":2,"row":6},"filename":"/test.py","fix":null,"location":{"column":1,"row":6},"message":"who cares","noqa_row":2,"url":""}', + \ '{"cell":null,"code":"W293","end_location":{"column":2,"row":6},"filename":"/test.py","fix":null,"location":{"column":1,"row":6},"message":"who cares","noqa_row":2,"url":""}', + \ ]) + +Execute(Disabling trailing whitespace warnings should work): + let b:ale_warn_about_trailing_whitespace = 0 + + AssertEqual + \ [], + \ ale_linters#python#ruff#Handle(bufnr(''), [ + \ '{"cell":null,"code":"W291","end_location":{"column":2,"row":6},"filename":"/test.py","fix":null,"location":{"column":1,"row":6},"message":"who cares","noqa_row":2,"url":""}', + \ '{"cell":null,"code":"W293","end_location":{"column":2,"row":6},"filename":"/test.py","fix":null,"location":{"column":1,"row":6},"message":"who cares","noqa_row":2,"url":""}', + \ ]) + +Execute(Warnings about trailing blank lines should be reported by default): + AssertEqual + \ [ + \ { + \ 'lnum': 6, + \ 'col': 1, + \ 'end_lnum': 6, + \ 'end_col': 1, + \ 'code': 'W391', + \ 'type': 'W', + \ 'text': 'blank line at end of file', + \ }, + \ ], + \ ale_linters#python#ruff#Handle(bufnr(''), [ + \ '{"cell":null,"code":"W391","end_location":{"column":2,"row":6},"filename":"/test.py","fix":null,"location":{"column":1,"row":6},"message":"blank line at end of file","noqa_row":2,"url":""}', + \ ]) + +Execute(Disabling trailing blank line warnings should work): + let b:ale_warn_about_trailing_blank_lines = 0 + + AssertEqual + \ [], + \ ale_linters#python#ruff#Handle(bufnr(''), [ + \ '{"cell":null,"code":"W391","end_location":{"column":2,"row":6},"filename":"/test.py","fix":null,"location":{"column":1,"row":6},"message":"blank line at end of file","noqa_row":2,"url":""}', + \ ])