दबाने की चेतावनी: मुफ्त चर (और अन्य) को असाइनमेंट


14

जब एमएसीएस लिस्प फ़ाइल को संकलित करता है तो मैं "फ्री वेरिएबल को फ्री वेरिएबल" चेतावनी को कैसे दबा सकता हूं?

मैं वास्तव में फ्लाईकैच का उपयोग करते समय एक विशिष्ट बफर के लिए इसे दबाने में दिलचस्पी रखता हूं, लेकिन मैं समझता हूं कि यह केवल बाइट कंपाइलर से गुजर रहा है।

उन सभी चेतावनियों / त्रुटियों की सूची प्राप्त करना भी अच्छा होगा जिन्हें दबाया जा सकता है।

अद्यतन :
पूर्णता के लिए, मुझे स्पष्ट करने की अनुमति दें कि संकलक चेतावनी को अक्षम करने के कई (भाषा अज्ञेय) कारण हैं। कुछ उदाहरण: उच्च प्राथमिकता की समस्याओं को ठीक करते समय शोर को दूर करने के लिए, या क्योंकि संकलक सिर्फ गलत है, स्क्रैच फ़ाइलों और व्यंजनों को लाइव संदर्भ में चलाने के लिए एक लिंट लागू फ्रेमवर्क में विरासत कोड के संक्रमण को कम करने के लिए।


1
इन चेतावनियों को दबाएं नहीं, उन्हें ठीक करें। वे एक कारण के लिए मौजूद हैं।
चंद्रोदय १३'१६ को १४:००

2
@lunaryorn नहीं, वे झूठी सकारात्मक हैं।
फम्मिल

1
पूरे सम्मान के साथ, और विशिष्ट चेतावनियों को देखे बिना, मैं असहमत होता। गलत फ्री वैरिएबल चेतावनियाँ बहुत कम होती हैं, और अगर ऐसा कुछ होता है जो आपको चुप कर देना चाहता है, तो मुझे यह विश्वास करना कठिन लगता है कि ये सभी गलत सकारात्मक हैं। मुझे दृढ़ता से संदेह है कि ये चेतावनियाँ गायब होने defvarया गुम होने का संकेत देती हैं require
चंद्रोदय

3
मुझे खेद है लेकिन क्या "जुड़े संदर्भ" आप को संदर्भित करते हैं?
चंद्रोदय

4
जब आप यह तय करते हैं कि "संकलक सिर्फ गलत है", तो इस चेतावनी को चुप करने का सही तरीका समस्याग्रस्त चर को घोषित करना है (defvar the-variable)। यह केवल उस चर के लिए चेतावनी को चुप कर देता है, इसलिए आप इसे अभी भी अन्य चर के लिए प्राप्त कर सकते हैं।
मालाबार

जवाबों:


17

क्लूलेस पाठकों के लाभ के लिए यहां पहुंचने के लिए, मुझे यह कहने के लिए एक छोटे से विषयांतर की अनुमति दें कि ये चेतावनी आम तौर पर वास्तविक कोड मुद्दों की ओर इशारा करती है (और जब वे नहीं करते हैं, तो आप उन्हें प्रति-चर आधार पर दबा सकते हैं) इसलिए लोगों को शोध करना चाहिए कि वे क्या करते हैं उन्हें अक्षम करने से पहले मतलब है।

बेशक, मुझे कोई संदेह नहीं है कि आप जानते हैं कि आपको इसे अक्षम करने की आवश्यकता क्यों है, इसलिए जवाब नीचे है।


उत्तर

इस (या अन्य) चेतावनी को अक्षम करने के लिए, आपको मान सेट करना होगा byte-compile-warnings। आप फ़ाइल के अंत में निम्नलिखित स्निपेट जोड़कर फ़ाइल-स्थानीय चर के रूप में कर सकते हैं।

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

आप इसे विश्व स्तर पर भी सेट कर सकते हैं।

आप बदल सकते हैं (not free-vars)के साथ (not free-vars callargs unresolved)और जो भी अन्य चेतावनी आप को दबाने के लिए चाहते हैं। चेतावनियों को शामिल किया जा सकता है।

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.

ध्यान दें कि फ्लाईचेक इस चर के लिए बाइट संकलक उपप्रकार के लिए एक वैश्विक सेटिंग को अग्रेषित नहीं करता है। मुझे यह भी निश्चित नहीं है कि यह स्थानीय चर का मूल्यांकन करता है या नहीं।
चंद्रोदय १३'१६ को १४:००

2
@lunaryorn मुझे लगता है कि स्थानीय-संस्करण संस्करण को फ्लाईचेक के साथ काम करना चाहिए। कम से कम, बाइट-कंपाइलर आमतौर पर फ़ाइल को संकलित करने से पहले स्थानीय चर पढ़ने के लिए ध्यान रखता है।
मालाबार

5
@fommil क्षमा करें, मेरे कहने का मतलब यह नहीं था कि मैं संरक्षक था। मैंने उस पैराग्राफ को लिखा क्योंकि अन्य लोग यहाँ पर उतर सकते हैं जब वे इस चेतावनी को गूगल करते हैं, और मैं उन्हें जानना चाहता था कि यह एक वास्तविक चीज़ है (न कि कुछ ऐसा जो उन्हें तुरंत अक्षम कर देना चाहिए)। यह साफ-सफाई के बारे में नहीं है, यह शुद्धता के बारे में है (कोड का बचाव के बिना एक अलग अर्थ है)। चूंकि आपने उल्लेख नहीं किया था कि आप इसे अक्षम क्यों करना चाहते थे, मुझे लगा कि यह ध्यान देने योग्य है कि यह पहला विकल्प नहीं होना चाहिए।
मालाबार

6
@fommil आपके प्रश्न में अधिक विशिष्ट उपयोग के मामले में कोई संदर्भ शामिल नहीं है। यह एक सामान्य प्रश्न के रूप में पढ़ता है , और इस तरह, यह इंगित करता है कि यह आम तौर पर है (लेकिन विशेष रूप से आपके मामले में विशेष रूप से जरूरी नहीं है ) सभी चेतावनियों को अक्षम करने के लिए एक अच्छा विचार नहीं है, चेतावनी को अक्षम करने के बारे में किसी भी पूर्ण उत्तर का हिस्सा बनना होगा, नहीं। ? आप इस उत्तर को पढ़ने वाले केवल एक नहीं हैं और यदि आप इन्हें अपने प्रश्न में शामिल नहीं करते हैं, तो आप अपनी विशिष्ट आवश्यकताओं के बारे में विशिष्ट उत्तर दिए जाने की उम्मीद नहीं कर सकते।
चंद्रोदय

1
@fommil मैंने उम्मीद की है कि पहले पैराग्राफ को थोड़ा बेहतर पढ़ने की उम्मीद है। आप क्या सोचते हैं मुझे बताओ।
मालाबार
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.