clang.kak: add a clang-diagnostics-next command

clang-diagnostics-next will jump to the next line with a clang
error/warning.
This commit is contained in:
Maxime Coste 2015-02-18 13:56:13 +00:00
parent 15bb048428
commit 5cefaa1819

View File

@ -73,7 +73,8 @@ def -shell-params clang-parse %{
" | paste -s -d ':') " | paste -s -d ':')
errors=$(cat ${dir}/stderr | sed -rne " errors=$(cat ${dir}/stderr | sed -rne "
/^<stdin>:[0-9]+:([0-9]+:)? (error|warning)/ { s/^<stdin>:([0-9]+):([0-9]+:)? (.*)/\1,\3/; s/'/\\\\'/g; p }") /^<stdin>:[0-9]+:([0-9]+:)? (error|warning)/ { s/^<stdin>:([0-9]+):([0-9]+:)? (.*)/\1,\3/; s/'/\\\\'/g; p }
" | sort -n)
sed -e "s|<stdin>|${kak_bufname}|g" < ${dir}/stderr > ${dir}/fifo sed -e "s|<stdin>|${kak_bufname}|g" < ${dir}/stderr > ${dir}/fifo
@ -118,3 +119,21 @@ def clang-disable-diagnostics %{
rmhl hlflags_clang_flags rmhl hlflags_clang_flags
rmhooks window clang-diagnostics rmhooks window clang-diagnostics
} }
def clang-diagnostics-next %{ %sh{
echo "${kak_opt_clang_errors}" | (
line=-1
first_line=-1
while read line_content; do
candidate=${line_content%%,*}
first_line=$(( first_line == -1 ? candidate : first_line ))
line=$((candidate > kak_cursor_line && (candidate < line || line == -1) ? candidate : line ))
done
line=$((line == -1 ? first_line : line))
if [ ${line} -ne -1 ]; then
echo "exec ${line} g"
else
echo 'echo -color Error no next clang diagnostic'
fi
)
} }