wyłącz określone ostrzeżenie we Flycheck (konkretnie „#pragma raz w pliku głównym”)


11

Korzystam z Flycheck do programowania w C ++ i otrzymuję następujące ostrzeżenie:

#pragma once in main file

We wszystkich nagłówkach zawartych w głównym pliku. Przeszukując sieci, mam wrażenie, że ma to związek z tym, jak gcc i clang (oba dają to samo ostrzeżenie) kompilują flymake.

Chciałbym pozbyć się tego ostrzeżenia. Czy jest coś, co mogę zrobić?


Łatwiej będzie wymyślić, jak ukryć to ostrzeżenie, jeśli będziemy mogli je najpierw odtworzyć . Czy możesz podać przykładowy plik lub pliki, które wykazują problem, a jednocześnie być tak proste, jak to tylko możliwe?
Ben Liblit

Mam pytanie podobne do twojego, mam odpowiedź .
Pradana Aumars

Odpowiedzi:


2

Clang ma opcję wyłączenia tego ostrzeżenia. Dodanie następujących elementów do mojej konfiguracji rozwiązało problem.

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

Niestety nie wiem, czy istnieje podobna opcja dla gcc.


0

Obecnie GCC nie ma możliwości powstrzymania tego ostrzeżenia. I Flycheck nie ma sposobu na zignorowanie błędów bez dotykania ich wewnętrznych elementów.

Oto hack, który działa dla 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))

Dla kompletności odpowiedź @ grepcake na clang:

; ignore clang "#pragma once" warning
(with-eval-after-load "flycheck"
  (setq flycheck-clang-warnings `(,@flycheck-clang-warnings
                                  "no-pragma-once-outside-header")))
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.