سؤال

أريد تشغيل JSLINT قبل الالتزام إما في ريبو الزئبق أو الجيطي.

أريد أن تكون هذه خطوة أوتوماتيكية تم إعدادها بدلا من الاعتماد على المطور (أساسا بالنسبة لي) تذكر تشغيل JSLINT قبل اليد. عادة ما أقوم بتشغيل JSLINT أثناء التطوير، لكنني أرغب في تحديد عقد على ملفات JS التي يمرون jslint قبل الالتزام بها بالعيبو.

ل mercurial، هذه الصفحة يوضح بناء جملة Precommit، ولكن المتغيرات الوحيدة التي يبدو أنها متاحة هي معرفات الوالدين 1 والملعززي 2 تشارك في الالتزام. ما أريده حقا هي قائمة بأسماء الملفات التي تشارك مع الالتزام، بحيث يمكنني اختيار ملف .js ثم قم بتشغيل Jslint فوقها.

قضية مماثلة لجيت, ، تبدو المعلومات الافتراضية المتاحة كجزء من البرنامج النصي المبتدئ محدودة.

ما قد يعمل هو الذي يقوم بتوصيل حالة HG الحالة / GIT كجزء من البرنامج النصي المبتدئ، وتحليل هذا الإخراج للعثور على ملفات JS ثم القيام بالعمل بهذه الطريقة. كنت آمل أن يكون هناك شيء أسهل، وأنا لست متأكدا مما إذا كان الاتصال بالوضع كجزء من هوك بدعم يعكس المعلومات الصحيحة. على سبيل المثال، في GIT إذا لم تتم إضافة ملفات التغييرات بعد، لكن ارتكاب GIT يستخدم -A، هل تظهر الملفات في القسم الصحيح من إخراج حالة GIT كجزء من مجموعة الالتزام؟

تحديث: حصلت على شيء ما، هو مرئي هنا: http://github.com/jrburke/dvcs_jslint/

هل كانت مفيدة؟

المحلول

بالنسبة إلى GIT، هناك أمثلة في دليل .git / Hooks. إذا كنت بحاجة فقط إلى أسماء الملفات ل JSLINT، فيمكنك استخدامها git diff --name-only, ، والتي في المثال الخاص بي ستدرج أسماء الملفات التي تختلف عن التيار HEAD.

نصائح أخرى

فيما يلي اختلاف في محلول GIT الخاص ب Bitbieger الذي يعمل معه node.js. ونسخة محلية من عقدة jslint. (أي تحتاج إلى npm install jslint في دليل مستودع الجذر الخاص بك).

بالإضافة إلى البرنامج النصي:

  • يعمل JSLINT على جميع ملفات .html و .json وكذلك .js
  • يعمل فقط JSLINT على الملفات التي تمت إضافتها أو نسخها أو تعديلها. هذا يمنع JSLint من الخطأ على الملفات التي تمت إعادة تسميتها أو حذفها.
  • يكرر أي أخطاء JSLINT للمستخدم لرؤية
  • يستخدم --indent 4 --white true خيارات JSLINT لضمان اتساق شفرة المصدر

للحصول عليه للعمل نسخ ما يلي .git/hooks/pre-commit ولا تنسى chmod +x .git/hooks/pre-commit

# Pre-commit hook passing files through jslint
#
# This ensures that all js, html and json files are valid and conform
# to expectations.

ROOT_DIR=$(git rev-parse --show-toplevel)
JSLINT="${ROOT_DIR}/node_modules/.bin/jslint --indent 4 --white true"

for file in $(git diff-index --name-only --diff-filter=ACM --cached HEAD -- | grep -P '\.((js)|(html)|(json))$'); do
    if node $JSLINT $file 2>&1 | grep 'No errors found' ; then
        echo "jslint passed ${file}"
        exit 0
    else
        node $JSLINT $file
        exit 1
    fi  
done

jslint مع spidermonkey.

for js in $(git diff-index --name-only --cached HEAD -- | grep '\.js$'); do
    if jslint.sh $js 2>&1 | grep 'Lint at line' ; then
        echo $js
        exit 1
    else
        echo "js files validated"
        exit 0
    fi  
done
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top