uyarıyı bastır: serbest değişkene atama (ve diğerleri)


14

Bir emacs lisp dosyasını derlerken bayt "serbest değişkene atama" uyarısını nasıl engelleyebilirim?

Aslında çoğunlukla flycheck kullanırken belirli bir tampon için bastırmakla ilgileniyorum, ama bunun sadece bayt derleyicisine iletildiğini anlıyorum.

Ayrıca, bastırılabilecek tüm uyarıların / hataların bir listesini almak da iyi olur.

GÜNCELLEME :
Bütünlük uğruna, derleyici uyarılarını devre dışı bırakmak için birçok (dil agnostik) neden olduğunu açıklamama izin verin. Bazı örnekler: eski kodun tiftikle zorlanan bir çerçeveye geçişini kolaylaştırmak, sıfırdan dosyalar ve tariflerin canlı bir bağlamda çalıştırılması, daha yüksek öncelikli sorunları giderirken gürültüyü gidermek veya derleyici yanlış olduğundan.


1
Bu uyarıları bastırmayın, düzeltin. Bir sebepten dolayı var olurlar.
lunaryorn

2
@lunaryorn hayır, yanlış pozitifler.
fommil

1
Tüm saygımla ve belirli uyarıları görmeden, katılmıyorum. Yanlış serbest değişken uyarıları çok azdır ve eğer onları susturmak isteyecek bir miktarda gerçekleşirse, hepsinin yanlış pozitif olduğuna inanmakta zorlanıyorum. Bu uyarıların eksik defvarveya eksik olduğunu gösterdiğinden şüpheleniyorum require.
lunaryorn

3
Özür dilerim ama hangi "bağlantılı referanslar" dan bahsediyorsunuz?
lunaryorn

4
"Derleyici sadece yanlış" olduğuna karar verdiğinizde, bu uyarıyı susturmanın doğru yolu sorunlu değişkeni bildirmektir (defvar the-variable). Bu, uyarıyı yalnızca bu değişken için susturur, böylece diğer değişkenler için de alabilirsiniz.
Malabarba

Yanıtlar:


17

Buraya gelen clueless okuyucuların yararı için, bu uyarıların genellikle gerçek kod sorunlarına işaret ettiğini (ve yapmazlarsa, değişken başına temelinde bastırabileceğinizi) söyleyebilmem için küçük bir araştırma yapalım. onları devre dışı bırakmadan önce.

Tabii ki, neden devre dışı bırakmanız gerektiğini bildiğinizden şüphem yok, bu yüzden cevap aşağıda.


Cevap

Bu (veya diğer) uyarıyı devre dışı bırakmak için değerini ayarlamanız gerekir byte-compile-warnings. Dosyanın sonuna aşağıdaki snippet'i ekleyerek bunu dosya-yerel değişkeni olarak yapabilirsiniz.

;; Local Variables:
;; byte-compile-warnings: (not free-vars)
;; End:

Bunu global olarak da ayarlayabilirsiniz.

Bastırmak istediğiniz diğer uyarıları değiştirebilir (not free-vars)veya (not free-vars callargs unresolved)başka uyarıları kullanabilirsiniz. Dahil edilebilecek / bastırılabilecek uyarıların tam listesi değişkenin dokümanda bulunur (aşağıda).

byte-compile-warnings is a variable defined in `bytecomp.el'.
Its value is t

  This variable is safe as a file local variable if its value
  satisfies the predicate which is a byte-compiled expression.

Documentation:
List of warnings that the byte-compiler should issue (t for all).

Elements of the list may be:

  free-vars   references to variables not in the current lexical scope.
  unresolved  calls to unknown functions.
  callargs    function calls with args that don't match the definition.
  redefine    function name redefined from a macro to ordinary function or vice
              versa, or redefined to take a different number of arguments.
  obsolete    obsolete variables and functions.
  noruntime   functions that may not be defined at runtime (typically
              defined only under `eval-when-compile').
  cl-functions    calls to runtime functions (as distinguished from macros and
                  aliases) from the old CL package (not the newer cl-lib).
  interactive-only
          commands that normally shouldn't be called from Lisp code.
  lexical     global/dynamic variables lacking a prefix.
  make-local  calls to make-variable-buffer-local that may be incorrect.
  mapcar      mapcar called for effect.
  constants   let-binding of, or assignment to, constants/nonvariables.
  suspicious  constructs that usually don't do what the coder wanted.

If the list begins with `not', then the remaining elements specify warnings to
suppress.  For example, (not mapcar) will suppress warnings about mapcar.

Flycheck'in bu değişken için genel bir ayarı bayt derleyici alt işlemine iletmediğini unutmayın. Yerel değişkeni değerlendirip değerlendirmediğinden bile emin değilim.
lunaryorn

2
@lunaryorn Bence local-var sürümü flycheck ile çalışmalı. En azından, bayt derleyici genellikle dosyayı derlemeden önce yerel değişkenleri okumaya özen gösterir.
Malabarba

5
@fommil Üzgünüm, kulağa patronluk yapmak istememiştim. Bu paragrafı yazdım çünkü diğer insanlar bu uyarıyı google'a indirdiklerinde buraya inebilirler ve bunun gerçek bir şey olduğunu bilmelerini istedim (sadece hemen devre dışı bırakmaları gereken bir şey değil). Temizlikle ilgili değil, doğrulukla ilgilidir (kodun defvar olmadan farklı bir anlamı vardır). Neden devre dışı bırakmak istediğinizden bahsetmediğiniz için, ilk seçenek olmamasından bahsetmeye değer olduğunu düşündüm.
Malabarba

6
@fommil Sorunuz daha spesifik bir kullanım durumuna ilişkin herhangi bir referans içermiyor. Genel bir soru olarak okur ve bu nedenle, genel olarak (ancak özel olarak sizin durumunuzda değil) tüm uyarıları devre dışı bırakmak için iyi bir fikir olmadığını, uyarıları devre dışı bırakma ile ilgili herhangi bir tam cevabın bir parçası olması gerektiğini belirtir. ? Bu yanıtı okuyan tek kişi siz değilsiniz ve bunları sorunuza dahil etmezseniz özel ihtiyaçlarınız hakkında özel bir cevap vermeyi bekleyemezsiniz.
lunaryorn

1
@fommil Umarım biraz daha iyi okumak için ilk paragrafı yeniden yazdım. Ne düşündüğü söyle.
Malabarba
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.