Deaktivieren Sie eine bestimmte Warnung im Flycheck (insbesondere "#pragma einmal in der Hauptdatei").

11

Ich verwende Flycheck für die C ++ - Entwicklung und erhalte die folgende Warnung:

#pragma once in main file

In allen Headern einer Hauptdatei. Beim Durchsuchen der Websites habe ich den Eindruck, dass dies etwas damit zu tun hat, wie gcc und clang (beide geben die gleiche Warnung) für flymake kompiliert werden.

Ich möchte diese Warnung loswerden. Kann ich irgendetwas tun?

Spacemoose
quelle
Es wird einfacher sein, herauszufinden, wie diese Warnung unterdrückt werden kann, wenn wir sie zuerst reproduzieren können. Können Sie eine oder mehrere Beispieldateien angeben, die das Problem aufweisen, und dennoch so einfach wie möglich sind?
Ben Liblit
Ich habe eine ähnliche Frage wie Sie, ich habe eine Antwort .
Pradana Aumars

Antworten:

2

Clang hat die Option, diese Warnung zu deaktivieren. Das Hinzufügen des Folgenden zu meiner Konfiguration hat das Problem für mich behoben.

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

Leider weiß ich nicht, ob es eine ähnliche Option für gcc gibt.

Grepcake
quelle
0

Derzeit kann GCC diese Warnung nicht unterdrücken. Und Flycheck kann Fehler nicht ignorieren, ohne die Interna zu berühren.

Hier ist ein Hack, der für gcc funktioniert:

; 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))

Der Vollständigkeit halber die Antwort von @ grepcake auf clang:

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