ไม่แสดงคำเตือน: การมอบหมายให้กับตัวแปรอิสระ (และอื่น ๆ )


14

ฉันจะระงับคำเตือน "การมอบหมายให้กับตัวแปรอิสระ" ได้อย่างไรเมื่อไบต์รวบรวมไฟล์ lisp emacs?

จริงๆแล้วฉันสนใจที่จะระงับมันสำหรับบัฟเฟอร์เฉพาะเมื่อใช้ flycheck แต่ฉันเข้าใจว่านี่เป็นเพียงการส่งผ่านไปยังคอมไพเลอร์ไบต์

นอกจากนี้ยังเป็นการดีที่จะได้รับรายการคำเตือน / ข้อผิดพลาดทั้งหมดที่สามารถระงับได้

UPDATE :
เพื่อความสมบูรณ์ขอให้ฉันชี้แจงว่ามีเหตุผล (ภาษาที่ไม่เชื่อเรื่องพระเจ้า) มากมายที่จะปิดการใช้งานคำเตือนของคอมไพเลอร์ ตัวอย่าง: เพื่อลดความยุ่งยากในการเปลี่ยนรหัสดั้งเดิมให้เป็นเฟรมเวิร์กที่บังคับใช้ผ้าสำลีเพื่อลบไฟล์และสูตรอาหารให้ทำงานภายในบริบทสดเพื่อลบเสียงรบกวนขณะแก้ไขปัญหาที่มีลำดับความสำคัญสูงกว่าหรือเพราะคอมไพเลอร์ผิด


1
อย่าระงับคำเตือนเหล่านี้แก้ไข พวกเขามีเหตุผล
Lunaryorn

2
@ lunaryorn ไม่พวกเขาเป็นบวกเท็จ
fommil

1
ด้วยความเคารพจากทุกคนและหากไม่ได้เห็นคำเตือนเฉพาะฉันจะไม่เห็นด้วย คำเตือนตัวแปรอิสระที่ผิดพลาดนั้นหายากมากและหากสิ่งนั้นเกิดขึ้นในปริมาณที่ทำให้คุณต้องการปิดปากพวกเขาฉันคิดว่ามันยากที่จะเชื่อว่าพวกเขาทั้งหมดนั้นเป็นผลบวกที่ผิดพลาด ผมขอสงสัยว่าคำเตือนเหล่านี้จะบ่งชี้ถึงการขาดหายไปdefvarหรือหายไปrequires
Lunaryorn

3
ฉันขอโทษ แต่คุณอ้างถึง "การอ้างอิงที่เชื่อมโยง" คืออะไร
Lunaryorn

4
เมื่อคุณตัดสินใจว่า "คอมไพเลอร์เป็นสิ่งที่ผิดเพียง" (defvar the-variable)วิธีการที่เหมาะสมที่จะทำเงียบคำเตือนนี้คือการประกาศตัวแปรที่มีปัญหากับ คำสั่งนี้จะปิดเสียงเตือนสำหรับตัวแปรนั้นเท่านั้นดังนั้นคุณยังคงสามารถรับได้สำหรับตัวแปรอื่น ๆ
Malabarba

คำตอบ:


17

เพื่อประโยชน์ของผู้อ่าน clueless ที่มาถึงที่นี่ให้ฉันพูดนอกเรื่องเล็กน้อยเพื่อบอกว่าคำเตือนเหล่านี้มักจะชี้ไปที่ปัญหารหัสจริง (และเมื่อพวกเขาทำไม่ได้คุณสามารถปราบปรามพวกเขาในแต่ละตัวแปร) ดังนั้นผู้คนควรศึกษาสิ่งที่พวกเขา หมายถึงก่อนปิดใช้งาน

แน่นอนฉันไม่สงสัยเลยว่าคุณรู้ว่าทำไมคุณต้องปิดการใช้งานดังนั้นคำตอบคือด้านล่าง


คำตอบ

ในการปิดการใช้งานคำเตือน (หรืออื่น ๆ ) นี้คุณจะต้องตั้งค่าbyte-compile-warningsเป็น คุณสามารถทำสิ่งนี้เป็นตัวแปรไฟล์โลคัลโดยเพิ่มข้อมูลโค้ดต่อไปนี้ที่ท้ายไฟล์

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

คุณสามารถตั้งค่านี้ทั่วโลก

คุณสามารถแทนที่(not free-vars)ด้วย(not free-vars callargs unresolved)และคำเตือนอื่นใดที่คุณต้องการระงับ รายการคำเตือนทั้งหมดที่สามารถรวม / ถูกแทนที่ได้จะอยู่ใน docstring ของตัวแปร (ด้านล่าง)

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 ไม่ได้ส่งต่อการตั้งค่าส่วนกลางสำหรับตัวแปรนี้ไปยังการประมวลผลย่อยคอมไพเลอร์ไบต์ ฉันไม่แน่ใจด้วยซ้ำว่าจะประเมินตัวแปรท้องถิ่นหรือไม่
Lunaryorn

2
@ lunaryorn ฉันคิดว่ารุ่น local-var ควรใช้งานได้กับ flycheck อย่างน้อย byte-compiler มักจะระมัดระวังในการอ่านตัวแปรโลคัลก่อนรวบรวมไฟล์
Malabarba

5
@fommil ขออภัยฉันไม่ได้ตั้งใจฟังการอุปถัมภ์ ฉันเขียนย่อหน้านั้นเพราะคนอื่นอาจมาที่นี่เมื่อพวกเขา google คำเตือนนี้และฉันต้องการให้พวกเขารู้ว่ามันเป็นเรื่องจริง (ไม่ใช่แค่สิ่งที่พวกเขาควรปิดการใช้งานทันที) มันไม่เกี่ยวกับความสะอาดมันเกี่ยวกับความถูกต้อง (รหัสมีความหมายที่แตกต่างกันโดยไม่มี defvar) เนื่องจากคุณไม่ได้พูดถึงสาเหตุที่คุณต้องการปิดการใช้งานฉันคิดว่ามันคุ้มค่าที่จะกล่าวถึงว่ามันไม่ควรเป็นตัวเลือกแรก
Malabarba

6
@fommil คำถามของคุณไม่ได้รวมการอ้างอิงใด ๆ กับกรณีการใช้งานที่เฉพาะเจาะจงมากขึ้น มันอ่านเป็นคำถามทั่วไปและเป็นเช่นนั้นชี้ให้เห็นว่าโดยทั่วไป (แต่ไม่จำเป็นต้องเฉพาะในกรณีของคุณ) ไม่ใช่ความคิดที่ดีที่จะปิดการเตือนทั้งหมดจะต้องเป็นส่วนหนึ่งของคำตอบที่สมบูรณ์เกี่ยวกับการปิดใช้งานคำเตือน ? คุณไม่ใช่คนเดียวที่อ่านคำตอบนี้และคุณไม่สามารถคาดหวังคำตอบเฉพาะเกี่ยวกับความต้องการเฉพาะของคุณหากคุณไม่ได้รวมคำตอบเหล่านี้ไว้ในคำถามของคุณ
Lunaryorn

1
@fommil ฉันได้กล่าวถ้อยคำที่ย่อหน้าแรกเพื่อหวังว่าจะอ่านดีขึ้นเล็กน้อย แจ้งให้เราทราบสิ่งที่คุณคิด.
Malabarba
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.