désactiver l'avertissement spécifique dans flycheck (spécifiquement "#pragma une fois dans le fichier principal")

11

J'utilise flycheck pour le développement C ++ et j'obtiens l'avertissement suivant:

#pragma once in main file

Dans tous les en-têtes inclus dans un fichier principal. En recherchant sur les sites Web, j'ai l'impression que cela a quelque chose à voir avec la façon dont gcc et clang (les deux donnent le même avertissement) se compilent pour flymake.

Je voudrais me débarrasser de cet avertissement. Y a-t'il quelque chose que je puisse faire?

Spacemoose
la source
Il sera plus facile de comprendre comment supprimer cet avertissement si nous pouvons le reproduire en premier. Pouvez-vous donner un exemple de fichier ou des fichiers qui présentent le problème, tout en étant aussi simple que possible.
Ben Liblit
J'ai une question similaire à la vôtre, j'ai une réponse .
Pradana Aumars

Réponses:

2

Clang a une option pour désactiver cet avertissement. L'ajout de ce qui suit à ma configuration a résolu le problème pour moi.

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

Malheureusement, je ne sais pas s'il existe une option similaire pour gcc.

grepcake
la source
0

Actuellement, GCC n'a aucun moyen de supprimer cet avertissement. Et flycheck n'a aucun moyen d'ignorer les erreurs sans toucher à ses internes.

Voici un hack qui fonctionne pour 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))

Pour être complet, la réponse de @ grepcake pour clang:

; ignore clang "#pragma once" warning
(with-eval-after-load "flycheck"
  (setq flycheck-clang-warnings `(,@flycheck-clang-warnings
                                  "no-pragma-once-outside-header")))
maxy
la source