desativar aviso específico no flycheck (especificamente "#pragma uma vez no arquivo principal")


11

Estou usando o flycheck para desenvolvimento em C ++ e recebo o seguinte aviso:

#pragma once in main file

Em todos os cabeçalhos incluídos em um arquivo principal. Pesquisando na web, tenho a impressão de que isso tem algo a ver com a forma como o gcc e o clang (ambos dão o mesmo aviso) são compilados para o flymake.

Eu gostaria de me livrar desse aviso. Há algo que eu possa fazer?


Será mais fácil descobrir como suprimir esse aviso se pudermos reproduzi- lo primeiro. Você pode dar um exemplo de arquivo ou arquivos que apresentam o problema, embora ainda seja o mais simples possível?
Ben Liblit 31/10/2015

Tenho uma pergunta semelhante à sua, tenho uma resposta .
Pradana Aumars

Respostas:


2

O Clang tem uma opção para desativar esse aviso. Adicionar o seguinte à minha configuração corrigiu o problema para mim.

(with-eval-after-load "flycheck"
    (setq flycheck-clang-warnings `(,@flycheck-clang-warnings
                                    "no-pragma-once-outside-header")))

Infelizmente, não sei se existe uma opção semelhante para o gcc.


0

Atualmente, o GCC não tem como suprimir esse aviso. E o flycheck não tem como ignorar erros sem tocar em seus componentes internos.

Aqui está um hack que funciona para o gcc:

; ignore gcc "#pragma once" warning
(with-eval-after-load "flycheck"
  (eval-when-compile (require 'flycheck))  ; for flycheck-error struct
  (defun my-filter-pragma-once-in-main (orig-fun errors)
    (dolist (err errors)
      (-when-let (msg (flycheck-error-message err))
        (setf (flycheck-error-message err)
              (if (string-match-p "#pragma once in main file" msg) nil msg))))
    (funcall orig-fun errors))
  (advice-add 'flycheck-sanitize-errors :around #'my-filter-pragma-once-in-main))

Para completar, a resposta do @ grepcake para clang:

; ignore clang "#pragma once" warning
(with-eval-after-load "flycheck"
  (setq flycheck-clang-warnings `(,@flycheck-clang-warnings
                                  "no-pragma-once-outside-header")))
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.