Jshint: تعطيل تحذير W100 لا يعمل في 2.9.3

تم إنشاؤها على ١٩ أغسطس ٢٠١٦  ·  4تعليقات  ·  مصدر: jshint/jshint

راجع https://github.com/IgniteUI/ignite-ui/pull/243 :

تم تمرير أول إصدار مع 2.9.2 ، وفشل إنشاءات متتالية مع تحديث 2.9.3 ، مع سطر ملفوف بـ / * jshint -W100 * /

لا ترى أي شيء متعلق بمدونة التحديث ، ولكن هل تغير شيء ما في طريقة التعامل معها؟

Regression

التعليق الأكثر فائدة

شكرا على التقرير! هذا في الواقع هو تراجع.

لا يعني ذلك أنه يساعدك كثيرًا ، ولكن يبدو أن الإصدار الجديد قد ظهر خطأً موجودًا مسبقًا - أثناء عملية تقليل المدخلات التي قمت بمشاركتها ، تمكنت من تجربة هذه المشكلة في الإصدار 2.9.2 أيضًا.

أحتاج إلى الابتعاد قليلاً ، لكنني آمل أن يكون لدي تصحيح جاهز هذا المساء (بتوقيت شرق الولايات المتحدة).

ال 4 كومينتر

شكرا على التقرير! هذا في الواقع هو تراجع.

لا يعني ذلك أنه يساعدك كثيرًا ، ولكن يبدو أن الإصدار الجديد قد ظهر خطأً موجودًا مسبقًا - أثناء عملية تقليل المدخلات التي قمت بمشاركتها ، تمكنت من تجربة هذه المشكلة في الإصدار 2.9.2 أيضًا.

أحتاج إلى الابتعاد قليلاً ، لكنني آمل أن يكون لدي تصحيح جاهز هذا المساء (بتوقيت شرق الولايات المتحدة).

ها هي القصة:

عند مواجهة حرف قوس مفتوح ( ( ) في تعبير
الموضع ، يجب على محلل JavaScript مدرك لـ ES2015 مثل JSHint تحديده
ما إذا كان يمثل بداية عامل تجميع أو دالة سهم.

يقوم JSHint بذلك عن طريق ترميز كل المدخلات التالية حتى يعثر على ملف
حرف "مطابق" بين قوسين قريبين ( ) ). في هذه المرحلة ، يمكن أن يصنع ملف
تحديد طبيعة الإنتاج المعني - إذا تم اتباعه
بواسطة الرمز => ، إنها وظيفة سهم ؛ وإلا ، فهو عامل تجميع.

بينما يتطلع إلى المستقبل ، فإنه لا يطبق التوجيهات المضمنة التي يواجهها
مثل -W100 . ومع ذلك ، فإن lexer مسؤول عن إصدار بعض الوبر
_including_ W100 . لذلك بمجرد أن يبدأ JSHint "التطلع إلى الأمام" ، فإن ملفات
السلوك رداً على هذه الشخصيات التي يحتمل أن تكون خطرة "محبوس".
(يشير ذلك إلى إصلاح قصير المدى لأي شخص يعاني من هذا الانحدار: تعطيل
W100 قبل IIFE. ليس مثاليًا ، أعلم ، لكن لاحظ أهمية ذلكالتحذير متنازع عليه .)

حدث هذا الانحدار بسبب رقعة لا علاقة لها على ما يبدو: gh-3003.
في السابق ، كان سيتم إلغاء lookahead إذا تم إلغاء رمز مميز بفاصلة منقوطة
مصادفة ، كما في:

(function() {
;//<-- lookahead ends at this semicolon token
}());

... ومع ذلك ، تم اكتشاف أن هذا الدليل غير صالح لأن دالة السهم
قد تحتوي المعلمات نفسها على هذا الرمز المميز:

(x = function() {
;//<-- lookahead should *not* end at this semicolon token
}) => x;

لذلك قمنا بإزالته من أجل التعرف بشكل صحيح على وظائف السهم في تلك الحالات.

مع وضع ذلك في الاعتبار ، قد تكون حالة الاختبار المصغرة بالكامل أكثر وضوحًا (هذا
هو حرف \u200f غير قابل للطباعة في السلسلة الحرفية):

(function() {
    ;

    /*jshint -W100 */
    "‏";
})();

قبل استخدام gh-3003 (مثل JSHint في الإصدار 2.9.2) ، كانت الفاصلة المنقوطة توقف ملف
lookahead ، ولن يتم ترجمة الحرف غير القابل للطباعة حتى _after_ the
تم تطبيق توجيه JSHint. مع الإصلاح المطبق ، يربط JSHint الحرف
_before_ تطبيق التوجيه والمضي قدمًا في التحذير.

يوضح هذا أيضًا كيفية وجود المشكلة الأساسية حتى في JSHint 2.9.2.
يؤدي الإدخال التالي بشكل غير صحيح إلى تشغيل تحذير حتى في هذا الإصدار من
JSHint:

(function() {
    /*jshint -W100 */
    "‏";
})();

لأنه هنا ، لا يتم مقاطعة lookahead التي يتم تشغيلها بين قوسين في أي منهما
الإصدار.

سيكون الحل المثالي هو تطبيق التوجيهات أثناء lookahead. لسوء الحظ ، مستحق
إلى الطبيعة المرنة للغاية لتوجيهات JSHint المضمنة ، هذا ليس كذلك
المستطاع. يتوقع المستخدمون أن يكون للتوجيهات "نطاق وظيفي" ، أي المعجم
سيحتاج إلى إدراك الدلالات المحيطة للرموز التي ينتجها.

لقد قدمت إصلاحًا هنا: gh-3016. على المدى الطويل ، أعتقد أننا يجب أن نفكر في ذلك
تحسينات أخرى على الاستدلال في lookahead - بدون الفاصلة المنقوطة (غير الصالحة)
تحقق ، فإن الممارسة الشائعة المتمثلة في تغليف البرامج بأكملها في IIFE ستسبب
JSHint إلى lex في البداية كل المدخلات.

شكرا لشرح مفصل!
أرى مدى صعوبة ذلك دون إضافة قدر هائل من العمل الإضافي للنطاقات.
سنلتزم بـ 2.9.2 لفترة من الوقت لأنه يعمل مع ملفاتنا وسننظر في تقسيم الأجزاء التي بها مشكلات إلى كتل يمكننا إدارتها في المستقبل :)

إصلاح هذا الخطأ متوفر الآن في الإصدار 2.9.4 من JSHint المنشور حديثًا:

http://jshint.com/blog/2016-10-20/release-2-9-4/

الرجاء إخبارنا إذا كنت لا تزال تواجه مشكلة في هذا الإصدار!

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات