في منتدانا لاحظنا مؤخرًا أن الكود يتم تمييزه تلقائيًا، على الرغم من أن autohighlight all code معطل، وأن قائمة highlighted languages فارغة. قمنا بذلك لأن لدينا الكثير من الكود بلغات غير مدعومة. لكن الآن يتم اكتشافه على أنه C#.
مثال على منشور:
في منتدانا لاحظنا مؤخرًا أن الكود يتم تمييزه تلقائيًا، على الرغم من أن autohighlight all code معطل، وأن قائمة highlighted languages فارغة. قمنا بذلك لأن لدينا الكثير من الكود بلغات غير مدعومة. لكن الآن يتم اكتشافه على أنه C#.
مثال على منشور:
هل يمكننا تكرار ذلك الأسبوع القادم @tshenry؟
أستطيع إعادة إنتاج المشكلة في Try. يبدو أن إعداد الموقع autohighlight_all_code لا يُحترم. يبدو أن الوظيفة مفعلة سواء تم تحديد الإعداد أم لا. يؤثر إعداد highlighted languages على اكتشاف اللغة، ولكن إذا تم إزالة كل شيء، يبدو أنه يعتمد افتراضيًا على csharp عند اكتشاف أي شيء يشبه الكود.
أحدث تغيير في النواة يتضمن تمييز الصيغة يبدو أنه إعادة هيكلة من @j.jaffeux:
سألقي نظرة غدًا
لا أعتقد أن هناك أي تراجع هنا؛ في أحسن الأحوال، كان الأمر يعمل بشكل غير صحيح قبل أن أقوم بإصلاحاتي المختلفة قبل بضعة أسابيع.
ما يحدث هنا هو أنه افتراضيًا، نضيف دائمًا auto و nohighlight إلى قائمة فئات الكود المقبولة. إذا لم تحدد أي لغة عند تعريف كتلة الكود، فسيتم استخدام قيمة default_code_lang، وهي افتراضيًا auto. إذا قمت بتعيينها إلى nohighlight، فستحصل على النتيجة المتوقعة. لاحظ أنه سيتعين عليك إعادة بناء HTML للمشاركات. كما أنك على الأرجح لا تحتاج إلى إفراغ highlighted_languages، إذ لا تأثير له إذا اخترت nohighlight.
يحدث هذا للمشاركات الجديدة تمامًا، لذا فقد تغير شيء ما بالتأكيد.
(ونعم، أدركت أنني لا أحتاج إلى قائمة لغات فارغة، فنحن نحصل أحيانًا على كود JavaScript و Python، لذا فمن الأفضل السماح بتظليله إذا قام أي شخص بإضافة الكود.)
المشكلة هي أنه عندما لا يتم تحديد خيار “تظليل جميع الأكواد تلقائيًا”، فإن كتل الكود غير الموسومة لا تزال تُظلل تلقائيًا.
تُظهر كتل الكود المغلقة (```) تمييزًا تلقائيًا دائمًا، بينما تؤثر هذه الإعدادات على كتل الكود الممثلة بوسم .
أوه. حسنًا… لماذا يوجد فرق؟ وهل يمكن تغيير ذلك؟
تم إجراء تغيير ما في Discourse، لأن كتل الكود المحاطة بأقواس لم تكن تُظهر تمييزًا تلقائيًا في السابق. لدينا منتدى Discourse منذ ما يقرب من عامين. وحتى آخر تحديث، لم تكن كتل الكود المحاطة بأقواس تُظهر تمييزًا تلقائيًا.
هل يمكن تغيير ذلك؟ نعم، إعداد “تظليل جميع الأكواد تلقائيًا” يجعل السلوك متسقًا عبر كلا النوعين من كتل الكود.
إذا لم ترغب في التظليل التلقائي إلا عند تحديد لغة بشكل صريح،
نعم، ربما، ولكن كما قلت، لا أرى أي شيء لا يعمل كما هو متوقع الآن، لذا فإن تخميني حتى الآن هو أن شيئًا ما لم يكن يعمل عن طريق الخطأ من قبل، وأنك كنت تعتمد على هذا السلوك.
تخميني هو أنه تم التعرف عليه كلغة لم يتم تحميلها بشكل صحيح، وانتهى الأمر بأن الكتلة لم تُظهر تمييزًا.
حسنًا، هل يمكننا تحويل هذا إلى طلب لجعل وصف (وحتى اسم) إعداد “تظليل جميع الأكواد تلقائيًا” أكثر دقة؟ هل يمكن تغييره إلى “تظليل الأكواد المضمنة تلقائيًا” مع الوصف “تطبيق تظليل الأكواد على كتل الأكواد المضمنة حتى عندما لم تحدد اللغة صراحةً.” }
بالتأكيد، لا تتردد في تقديم طلب سحب (PR).
أيضًا، يسعدني جدًا إصلاح أي مشكلة إذا اكتشفت واحدة.
عند النظر إلى وحدة التحكم، رأيت شيئًا مريبًا أيضًا:
هذا ليس جديدًا، لكنني أعتقد أن قيمة nohighlight التي قمنا بحقنها خاطئة ويجب أن تكون no-highlight. هذا يعزز أيضًا تخميني بأن ما رأيته تم اكتشافه ككود لم يُعثر عليه، فتم اللجوء إلى no-highlight كحل بديل. سأقوم بإجراء التعديل.
سأقوم بإنشاء طلب سحب (PR) لتغيير الوصف.
يطرح سؤال واحد: كيف كان C# خيارًا عندما كانت اللغات المميزة فارغة؟ هل يعمل الإعداد الفارغ كما لو كان يحتوي على القائمة الافتراضية؟
نعم، كنت أتساءل عن نفس الشيء.
فهمي هو أنه في هذا السطر: https://github.com/discourse/discourse/blob/master/app/assets/javascripts/discourse/app/lib/highlight-syntax.js#L42
عندما نحذف هذا الكلاس ونطلب من highlightjs تمييز كود الكود بلوك، فإننا لا نعتمد بعد الآن على markdown، وهذا تغيير على جانب العميل، لذا فإن قيود الكلاسات لم تعد تنطبق.
باختصار:
هاه. هذا يحدّ من فائدته إلى حد ما. سأرى ما إذا كان بإمكاني تقديم توضيح مفيد للوصف.
كمعلومة إضافية، نستخدم text كافتراضي، وهو مرادف لـ nohighlight وقد حققنا نتائج جيدة معه.
لاحظنا بعض الأخطاء بين الحين والآخر، لكن بشكل عام كان هذا أفضل نهج لنا، ويبدو أفضل باستخدام raw، على سبيل المثال:
```text
jtl_name=$(/usr/local/bin/kubectl exec -it --namespace=$namespace $master_pod -- bash -c "ls -tr /*.jtl" | awk '{sub(/\r$/, ""); print}')
```
النتيجة:
jtl_name=$(/usr/local/bin/kubectl exec -it --namespace=$namespace $master_pod -- bash -c "ls -tr /*.jtl" | awk '{sub(/\r$/, ""); print}')
لدينا أيضًا أيقونة مخصصة لكتلة الكود المحاطة بـ text الافتراضية في المحرر.