
DLINT هي أداة لتشجيع أفضل ممارسات الترميز والمساعدة في ضمان أن كود بيثون آمن.
أهم شيء قمت به كمبرمج في السنوات الأخيرة هو متابعة تحليل الكود الثابت بقوة. أكثر قيمة من المئات من الأخطاء الخطيرة التي منعت معها هو التغيير في العقلية حول طريقة عرض موثوقية البرنامج وجودة الرمز.
- جون كارماك ، 2011
لكي ينجح مشروع التحليل الثابت ، يجب أن يشعر المطورون أنهم يستفيدون من استخدامه والاستمتاع به.
- دروس من بناء أدوات التحليل الثابت في Google
لتوثيق وقائمة من القواعد انظر المستندات.
$ python -m pip install dlintوالتحقق من أنه تم تثبيته بشكل صحيح:
$ python -m flake8 -h
Usage: flake8 [options] file file ...
...
Installed plugins: dlint: 0.16.0, mccabe: 0.5.3, pycodestyle: 2.2.0, pyflakes: 1.3.0 لاحظ dlint: 0.16.0 .
Dlint يبني على flake8 لأداء linting. يوفر هذا العديد من الميزات المفيدة دون إعادة اختراع العجلة.
دعنا ندير شيكًا بسيطًا:
$ cat << EOF > test.py
print("TEST1")
exec('print("TEST2")')
EOF $ python test.py
TEST1
TEST2$ python -m flake8 --select=DUO test.py
test.py:2:1: DUO105 use of " exec " is insecure/docs/linters/DUO105.md duo105.md.DUO ؟ تم تطوير Dlint في الأصل من قبل فريق Duo Labs. --select=DUO FLAG flake8 لتشغيل قواعد LINT DLINT فقط.
من هنا ، يمكننا بسهولة تشغيل Dlint مقابل دليل رمز Python:
$ python -m flake8 --select=DUO /path/to/code لضبط الربط الخاص بك ، تحقق من مساعدة flake8 :
$ python -m flake8 --helpيمكن أيضًا تضمين نتائج DLINT في محررك للحصول على ردود فعل سريعة. يتطلب هذا عادةً مكونًا إضافيًا أو امتدادًا محررًا. فيما يلي بعض نقاط البداية للمحررين المشتركين:
يمكن دمج Dlint بسهولة في خطوط أنابيب CI ، أو أي شيء حقًا.
لمزيد من المعلومات والأمثلة ، انظر "كيف يمكنني دمج Dlint في XYZ؟".
تم تصميم المكونات الإضافية المخصصة لـ Dlint على اتفاقية تسمية بسيطة ، وتعتمد على وحدات Python. لجعل المكون الإضافي المخصص dlint استخدم الاتفاقيات التالية:
dlint_plugin_ .Dlint .dlint.linters.base.BaseLinter .get_results بشكل مناسب وترث من ast.NodeVisitor .شاهد مكونًا إضافيًا لمزيد من التفاصيل.
أولاً ، تثبيت حزم التطوير:
$ python -m pip install -r requirements.txt
$ python -m pip install -r requirements-dev.txt
$ python -m pip install -e . $ pytest$ flake8$ pytest --cov$ pytest -k test_benchmark_run --benchmark-py-file /path/to/file.py tests/test_benchmark/أو الحصول على نتائج مؤشرات للبياضات بشكل فردي:
$ pytest -k test_benchmark_individual --benchmark-py-file /path/to/file.py tests/test_benchmark/أو ركض ضد Linter واحد:
$ pytest -k test_benchmark_individual[DUO138-BadReCatastrophicUseLinter] --benchmark-py-file /path/to/file.py tests/test_benchmark/