Skip to content

quickfix does not parse compiler's errors #330

@Arniiiii

Description

@Arniiiii

After executing :CMakeBuild , errors from clang/gcc are not parsed inside of quickfix list. How to add errorformat correctly for the :CMakeBuild or specifically for quickfix executor?

Screenshot with unparsed error for clang:

Image

from current :set errorformat? :

  errorformat=%*[^"]"%f"%*\D%l:%c: %m,%*[^"]"%f"%*\D%l: %m,"%f"%*\D%l:%c: %m,"%f"%*\D%l: %m,%-G%f:%l: %trror: (Each undeclared identifier is reported only once,%-G%f:%l: %trror: for each function it appears in.),%
f:%l:%c: %trror: %m,%f:%l:%c: %tarning: %m,%f:%l:%c: %m,%f:%l: %trror: %m,%f:%l: %tarning: %m,%f:%l: %m,%f:\(%*[^\)]\): %m,"%f"\, line %l%*\D%c%*[^ ] %m,%D%*\a[%*\d]: Entering directory %*[`']%f',%X%*\a[%*\d]: Lea
ving directory %*[`']%f',%D%*\a: Entering directory %*[`']%f',%X%*\a: Leaving directory %*[`']%f',%DMaking %*\a in %f

it seems to be error format for CMake, though for :CMakeBuild it should be set like in /usr/share/vim/vim91/compiler/gcc.vim or at least appended:

" Vim compiler file
" Compiler:		GNU C Compiler
" Previous Maintainer:	Nikolai Weibull <[email protected]>
" Last Change:		2010 Oct 14
"			changed pattern for entering/leaving directories
"			by Daniel Hahler, 2019 Jul 12
"			added line suggested by Anton Lindqvist 2016 Mar 31
"			2024 Apr 03 by The Vim Project (removed :CompilerSet definition)

if exists("current_compiler")
  finish
endif
let current_compiler = "gcc"

let s:cpo_save = &cpo
set cpo&vim

CompilerSet errorformat=
      \%*[^\"]\"%f\"%*\\D%l:%c:\ %m,
      \%*[^\"]\"%f\"%*\\D%l:\ %m,
      \\"%f\"%*\\D%l:%c:\ %m,
      \\"%f\"%*\\D%l:\ %m,
      \%-G%f:%l:\ %trror:\ (Each\ undeclared\ identifier\ is\ reported\ only\ once,
      \%-G%f:%l:\ %trror:\ for\ each\ function\ it\ appears\ in.),
      \%f:%l:%c:\ %trror:\ %m,
      \%f:%l:%c:\ %tarning:\ %m,
      \%f:%l:%c:\ %m,
      \%f:%l:\ %trror:\ %m,
      \%f:%l:\ %tarning:\ %m,
      \%f:%l:\ %m,
      \%f:\\(%*[^\\)]\\):\ %m,
      \\"%f\"\\,\ line\ %l%*\\D%c%*[^\ ]\ %m,
      \%D%*\\a[%*\\d]:\ Entering\ directory\ %*[`']%f',
      \%X%*\\a[%*\\d]:\ Leaving\ directory\ %*[`']%f',
      \%D%*\\a:\ Entering\ directory\ %*[`']%f',
      \%X%*\\a:\ Leaving\ directory\ %*[`']%f',
      \%DMaking\ %*\\a\ in\ %f

if exists('g:compiler_gcc_ignore_unmatched_lines')
  CompilerSet errorformat+=%-G%.%#
endif

let &cpo = s:cpo_save
unlet s:cpo_save

The proposed solution in

## Fix errors in quickfix list (Windows/msvc)
seems to be like "setting errorformat globally". Seems like a too broad set, isn't it?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions