disabilitare l'avviso specifico nel flycheck (in particolare "#pragma una volta nel file principale")


11

Sto usando il flycheck per lo sviluppo di C ++ e ricevo il seguente avviso:

#pragma once in main file

In tutte le intestazioni incluse in un file principale. Cercando nei siti web, ho l'impressione che ciò abbia a che fare con il modo in cui gcc e clang (entrambi danno lo stesso avvertimento) compilano per flymake.

Vorrei liberarmi di questo avvertimento. C'è qualcosa che posso fare?


Sarà più facile capire come sopprimere questo avviso se possiamo riprodurlo prima. Puoi dare un esempio di file o file che presentano il problema, pur essendo il più semplice possibile?
Ben Liblit,

Ho una domanda simile alla tua, ho una risposta .
Pradana Aumars,

Risposte:


2

Clang ha un'opzione per disabilitare questo avviso. L'aggiunta di quanto segue alla mia configurazione ha risolto il problema per me.

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

Sfortunatamente, non so se esiste un'opzione simile per gcc.


0

Attualmente GCC non ha modo di sopprimere questo avviso. E il flycheck non ha modo di ignorare gli errori senza toccare i suoi interni.

Ecco un trucco che funziona per 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))

Per completezza, la risposta di @ grepcake per clang:

; ignore clang "#pragma once" warning
(with-eval-after-load "flycheck"
  (setq flycheck-clang-warnings `(,@flycheck-clang-warnings
                                  "no-pragma-once-outside-header")))
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.