nonaktifkan peringatan spesifik di flycheck (khusus “#pragma sekali di file utama”)

11

Saya menggunakan flycheck untuk pengembangan C ++, dan mendapatkan peringatan berikut:

#pragma once in main file

Dalam semua header termasuk dalam file utama. Mencari di web, saya mendapat kesan ini ada hubungannya dengan bagaimana gcc dan dentang (keduanya memberikan peringatan yang sama) mengkompilasi untuk flymake.

Saya ingin menghilangkan peringatan ini. Apakah ada sesuatu yang saya bisa lakukan?

Spacemoose
sumber
Akan lebih mudah untuk mengetahui bagaimana menekan peringatan ini jika kita dapat mereproduksinya terlebih dahulu. Bisakah Anda memberikan contoh file atau file yang menunjukkan masalah, sambil tetap sesederhana mungkin?
Ben Liblit
Saya punya pertanyaan yang mirip dengan Anda, saya punya jawaban .
Pradana Aumars

Jawaban:

2

Dentang memiliki opsi untuk menonaktifkan peringatan ini. Menambahkan berikut ini ke konfigurasi saya memperbaiki masalah untuk saya.

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

Sayangnya, saya tidak tahu apakah ada opsi serupa untuk gcc.

grepcake
sumber
0

Saat ini GCC tidak memiliki cara untuk menekan peringatan ini. Dan flycheck tidak memiliki cara untuk mengabaikan kesalahan tanpa menyentuh bagian dalamnya.

Berikut ini hack yang berfungsi untuk 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))

Untuk kelengkapan, jawaban @ grepcake untuk dentang:

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