كيف يمكنني استخدام وضع EMACS FlyMake for Python مع Pyflakes ورمز فحص الصلب؟
سؤال
لفحص التعليمات البرمجية في وضع Python، استخدم FlyMake مع pyflakes.
أيضا أريد أن تحقق رمز رمز (PEP8) مع pylint (وصف في نفس الصفحة مع pyflakes)
هذه الحلول تعمل. لكن لا يمكنني تكوين FlyMake للعمل مع Pyflakes و Bylint معا. كيف يمكنني فعل ذلك؟
المحلول
حسنا، FlyMake يبحث فقط عن أمر قابل للتنفيذ خطوط الإخراج بتنسيق محدد مسبقا. يمكنك إنشاء برنامج نصي شل على سبيل المثال الذي سيدعو إلى جميع الداما التي تريدها على التوالي
يجب عليك أيضا التأكد من أن البرنامج النصي ينتهي عن طريق إرجاع ErrorLevel 0. لذلك هذا مثال:
هذا ما قمت به في برنامج نصي "Pycheckers":
#!/bin/bash
epylint "$1" 2>/dev/null
pyflakes "$1"
pep8 --ignore=E221,E701,E202 --repeat "$1"
true
بالنسبة إلى جزء EMACS Lisp:
(when (load "flymake" t)
(defun flymake-pyflakes-init ()
(let* ((temp-file (flymake-init-create-temp-buffer-copy
'flymake-create-temp-inplace))
(local-file (file-relative-name
temp-file
(file-name-directory buffer-file-name))))
(list "pycheckers" (list local-file))))
(add-to-list 'flymake-allowed-file-name-masks
'("\\.py\\'" flymake-pyflakes-init)))
نصائح أخرى
عادة ما يمكن للمرء تمكين وضع flymake في ربط وضع الثعبان. لسوء الحظ، يؤدي ذلك إلى مشكلات مع أشياء مثل py-execute-buffer التي تخلق المخازن المؤقتة المؤقتة التي تستدعي الخطاف ثم تسبب وضع flymake إلى الفواق بسبب عدم وجود "ملف حقيقي". الحل هو تعديل الشروط التي تضيف فيها الخطاف: - مثل الألغام هي:
(add-hook 'python-mode-hook
(lambda ()
(unless (eq buffer-file-name nil) (flymake-mode 1)) ;dont invoke flymake on temporary buffers for the interpreter
(local-set-key [f2] 'flymake-goto-prev-error)
(local-set-key [f3] 'flymake-goto-next-error)
))
قد ترغب في التحقق من البرنامج النصي LISP هنا (http://charlie137-2.blogspot.com/2009/08/check-python-coding-style-on-fly-with.html.)، والتي يجب أن تساعد في التحقق من PEP8 a la pep8.py. لا أستخدم Pyflakes أو pylint، لكنني أتصور أنك يمكن ضبط هذا بسهولة للعمل مع الداما الأخرى.
نسخة دفعة ويندوز من فاب pychechker
@echo on
pylint %1
pep8 --ignore=E221,E701,E202 --repeat %1
pyflakes %1