Jshint: كسر خط ثلاثي

تم إنشاؤها على ٥ يوليو ٢٠١٥  ·  19تعليقات  ·  مصدر: jshint/jshint

var a = (tern)
    ? b
    : c;

ينتج عن هذا الرمز التحذير: Bad line breaking before '?'.

التحكم في تدفق jshint هو:

أولا قبض على "؟" رمز مميز ثم قم بتمريره إلى وظيفة التعبير

  infix("?", function(left, that) {
    increaseComplexityCount();
    that.left = left;
    that.right = expression(10);
    advance(":");
    that["else"] = expression(10);
    return that;
  }, 30);

يحتوي تعبير الوظيفة على هذا المنطق بالقرب من بدايته

    var isDangerous =
      state.option.asi &&
      state.tokens.prev.line !== startLine(state.tokens.curr) &&
      _.contains(["]", ")"], state.tokens.prev.id) &&
      _.contains(["[", "("], state.tokens.curr.id);

    if (isDangerous)
      warning("W014", state.tokens.curr, state.tokens.curr.id);

يبدو أن كود JSHint يصطاد بشكل غير صحيح فاصل السطر بين ")" و "؟" في منطقها ASI. يجب ألا يتم تطبيق ASI في هذه الحالة. إن كسر الثلاثية على أسطر متعددة يجعل قراءة الكود أسهل. مثال:

var a = (tern1 > 0)
        ? b
        : (tern2 > x)
            ? c
            : d,
    e = 1;
Needs Discussion P1

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

تضمين التغريدة
هذا يمر jshint

/* jshint laxbreak: true */
var a = (tern)
    ? b
    : c;

لذا ، ما عليك سوى تشغيل هذا الخيار حتى لا تتلقى تحذيرات.

ستتم إزالة laxbreak في المستقبل القريب. هذه هي القضية المطروحة لإزالته - # 1867

ال 19 كومينتر

لماذا لا تزال تستخدم JSHint ، وليس فقط JSLint الذي هو أفضل بكثير؟

@ kaizer200 JSHint هي أداة أكثر استخدامًا بكثير. هدفي هو تحقيق التوافق مع الإعدادات الافتراضية لكليهما قدر الإمكان. بهذه الطريقة يمكنني أن أمثل بدقة أي مستخدم يرغب في التوافق مع أي من الأداة بأقل عدد ممكن من التعديلات.

أعتقد أن هذا مطلوب ، حيث يوجد هذا الاختبار:

code = [ 'var a = b ', '? c : d;' ];
TestRun(test)
  .addError(2, "Bad line breaking before '?'.")
  .test(code, { es3: true });

( tests/unit/options.js ، السطر 1583)

حقيقة وجود اختبار لا تعني أنه مطلوب. هذا هو المزيد من أراضي Jscs

caitp هل تقوم بإصلاح هذا؟

لم يتم تعطيل هذا من قبل laxbreak؟ أعلم أنه تم إيقاف العمل به ، لكن لن تتم إزالته حتى الإصدار 3

لا توجد خارطة طريق حقيقية لـ v3 ، فمن الآمن التخلص من هذا - لن يكسر تصميمات أي شخص

caitp بالنسبة لنفس الرمز المميز ، يجب أن يسمح JSHint أيضًا بفواصل الأسطر قبل &&، ||، ... افتراضيًا.

هناك خارطة طريق ، وقد ناقشتها أنا و jugglinmike كل شيء في الإصدار 3.

لن يؤدي ذلك إلى كسر تصميمات الأشخاص ، ولكنه سيتوقف عن التحذيرات التي يعتمد عليها الأشخاص ، عندما لا يكون هناك تحذير وقليل جدًا من الوثائق التي تفيد بإزالة الخيار (ولا يوجد عثرة في الإصدار الرئيسي لجعل الأشخاص ينظرون إلى قائمة التغيير ويلاحظون أنه يجب عليهم استخدام jscs )

لا أحد يعتمد على هذا بشكل واقعي ، والمعلم ليس خارطة طريق. لقد كان المعلم v3 موجودًا منذ أمد بعيد ، ولا يوجد موعد نهائي ولا ضغوط. يوجد سجل تغيير لجميع الإصدارات ، وليس الإصدارات الرئيسية فقط ، وقد تمت إزالة التحذيرات الزائفة الأخرى بالفعل. لا توجد حجة مقنعة للإبقاء على هذا الأمر إلى أجل غير مسمى ، فهو إقليم jscs

كان المعلم v3 موجودًا منذ العصور

لقد أوضحناها مؤخرًا وجعلناها في قائمة أقصر يمكن تحقيقها.

هناك اثنان من العلاقات العامة في انتظار ذلك.

يوجد سجل تغيير لجميع الإصدارات ، وليس الإصدارات الرئيسية فقط ، وقد تمت إزالة التحذيرات الزائفة الأخرى بالفعل. لا توجد حجة مقنعة للإبقاء على هذا الأمر إلى أجل غير مسمى ، فهو إقليم jscs

أنا أتفق ، لقد حان الوقت فقط. أنا فقط لا أتفق مع كلا التصنيفين ، فلا تحذر من القواعد المهملة على أنها تغيير جذري ، لذلك لا يتم الدمج حتى الإصدار 3 وفي نفس الوقت إزالة القواعد المهملة. إذا أراد jshint أن يكون شديد الحذر ، فكن شديد الحذر. إذا كانت تريد إزالة القواعد ، فقم بإخراج إصدار رئيسي أو تحذير الأشخاص.

من السهل جدًا أن نفوت أن الخيارات قد أصبحت مهملة إذا قمت بإعداد jshint منذ بعض الوقت - هل نريد أن تكون التجربة التي يحصل عليها الأشخاص هي أن يثيروا خطأً ثم يتم إخبارهم بأنه تم إيقافه؟ أو جعلها واضحة؟

لا أحد يعتمد بشكل واقعي على هذا

اعتدت الاعتماد على jshint في نوع من التحقق من النمط حتى اكتشفت عن jscs وانتقلت إليه. أراهن أن الكثير من الناس ما زالوا كذلك.

لا أحد يعتمد بشكل واقعي على هذا

البحث على GitHub ... https://github.com/search؟l=json&q=٪22laxbreak٪22٪3A+false&ref=searchresults&type=Code&utf8=٪E2٪9C٪93

تضمين التغريدة
هذا يمر jshint

/* jshint laxbreak: true */
var a = (tern)
    ? b
    : c;

لذا ، ما عليك سوى تشغيل هذا الخيار حتى لا تتلقى تحذيرات.

ستتم إزالة laxbreak في المستقبل القريب. هذه هي القضية المطروحة لإزالته - # 1867

أي اعتراض على إغلاق هذا كنسخة مكررة من # 1867؟

تصويتي هو جعله خطأ جديدًا وإصلاحه بشكل صحيح. لا يوجد إصدار رئيسي نتوء مطلوب هنا

lukeapage إذا تمت إزالة laxbreak في الإصدار 3.0 ، فهل سينشئ نموذج الكود هذا تحذيرات في الإصدار 3.0 وما هو المخطط الزمني التقريبي لإصدار v3.0؟

إذا تمت إزالة laxbreak في v3.0 ، فسيقوم نموذج التعليمات البرمجية هذا بإنشاء تحذيرات في الإصدار 3.0

تتمثل الخطة في إزالة خيار laxbreak وعدم التحذير في حالات laxbreak.
قد يؤدي استخدام الخيار إلى إصدار تحذير بأن الخيار قد تم إهماله ويمكن إزالته.

ما هو الجدول الزمني التقريبي لإصدار v3.0

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

Cait هي مساهم طويل المدى وقد يقرر المساهمون / المالكون الآخرون الاتفاق معها وإزالة التحذيرات في الإصدار التالي ، وعند هذه النقطة ستتوقف عن رؤية التحذيرات ثم في الإصدار 3 ستبدأ في تلقي تحذير من أن خيار laxbreak قد تم إيقافه (يجب أن تقرر البدء في استخدام ذلك الآن).

lukeapage بهذا يمكنك الآن إغلاق هذا الخطأ (من وجهة نظري).

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

القضايا ذات الصلة

Sriram-Ramaswami picture Sriram-Ramaswami  ·  5تعليقات

timdown picture timdown  ·  7تعليقات

arian picture arian  ·  7تعليقات

stefanuddenberg picture stefanuddenberg  ·  7تعليقات

jugglinmike picture jugglinmike  ·  6تعليقات