CodeRainbow: التعلم والتوثيق التفاعلي



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

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

ما الذي يمكن أن يساعد بشكل عام في تعلم الرمز؟ بالطبع ، يكون ذلك جيدًا عندما يكون هناك وثائق تفصيلية للرمز - كقاعدة ليس هناك ؛ أسلوب الترميز الجيد والتعليقات جيدة أيضًا ، ولكن هذا لا يكفي عادةً. هناك أيضًا العديد من مولدات توثيق التعليمات البرمجية ، مثل doxygen. من خلال تحليل بنية الكود والتعليقات الوثائقية الخاصة ، فإنها تولد وثائق في شكل نص تشعبي بتنسيق html. العيب الرئيسي لهذه الوثائق هو عدم تفاعلها. في عملية دراسة الكود ، قد يكون للمبرمج بعض الفهم الجديد ، ولإظهاره في الوثائق ، تحتاج إلى كتابة تعليقات وثائقية جديدة وتجديد جميع الوثائق مرة أخرى.

بالإضافة إلى ذلك ، لا تتعلق هذه الوثائق مباشرة بالكود في بيئة التطوير ، أي لن يؤدي النقر فوق الارتباط التشعبي إلى فتح الملف بهذا الرمز في IDE. هناك تشابه جيد لمثل هذه الأدوات ، المتجذرة في العصور القديمة: كانت أدوات التفكيك الأولى أدوات سطر الأوامر التي ولدت التعليمات البرمجية دون تدخل المستخدم. ثم جاء أول أداة تفكيك تفاعلية ("IDA pro") ، افترضت المشاركة النشطة للمستخدم في عملية التفكيك - تعيين أسماء المتغيرات والوظائف ، وتحديد الهياكل ، وكتابة التعليقات على التعليمات البرمجية ، إلخ.

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

بعد التجارب الأولى ، أدركت بسرعة أن هذا يجب أن يكون مكونًا إضافيًا لبيئة التطوير الحديثة ، وليس محررًا خاصًا بي. العمل من اثنين من المحررين في نفس الوقت أمر غبي وغير مريح. إن احتمالية تكرار كل احتمالات بيئة التطوير لم تبعث البهجة ، ولماذا فعل ما تم بالفعل؟ لذلك ، البرنامج المساعد. تم اختيار Qt Creator كأول IDE لمجرد تنفيذ عمليات التنقل الأكثر شيوعًا للشفرة (الانتقال إلى التعريف والبحث عن المراجع وما إلى ذلك) في أسرع وقت ممكن. ستكون البيئة التالية هي Visual Studio ، ثم في حالة نجاح المفهوم نفسه - تنفيذ IDEs أخرى.

الآن حول كيفية ترتيب كل شيء. تم تقديم مفهوم "تعليقات العلامة". هذا تعليق منتظم للغة برمجة (في الوقت الحالي هذا تعليق من سطر واحد "//" يستخدم في العديد من اللغات - C ، C ++ ، C # ، جافا ، ...) ، متبوعًا بسلسلة من الأحرف الخاصة ، يليها معرف و / أو علامات ، والذي يمكن أن يتبعه تعليق بشري عادي. قدمت ثلاثة أنواع من تعليقات العلامة

  1. تعليق لتسليط الضوء على منطقة عشوائية. النوع الوحيد الذي يتطلب تعليقًا على علامة "إغلاق". يبدأ بـ "// <<" وينتهي بـ "// >>".
  2. تعليق للإشارة إلى سطر تعسفي في التعليمات البرمجية. يُشار إليه بـ "// $$"
  3. تعليق لتسليط الضوء على كتلة التعليمات البرمجية الصحيحة نحيا. يبدأ بـ "//" ويتضمن كتلة التعليمات البرمجية أدناه ، مقيدًا بأقواس متعرجة "{" و "}" ، والتي يتم استخدامها لكتل ​​التعليمات البرمجية في معظم لغات البرمجة المشابهة لـ C. تم تنفيذ تحليل قوس كامل - يسمح بأقواس متعرجة متداخلة ، ويتجاوز المحلل بشكل صحيح الأقواس المتعرجة في الخطوط والتعليقات.

علاوة على ذلك ، مباشرة بعد الأحرف الخاصة ، يتبع واحد أو أكثر من المعرفات ، مفصولة بفواصل. المعرفات هي "علامات" ويمكن أن تعني ما يريده المبرمج - علامات "تمت دراستها" ، "إعادة كتابة" ، "فهم" ، تأليف الكود ، علاقة الكود ببعض المجموعات الدلالية ، إلخ. يمكنك أيضًا تحديد معرّف فريد واحد - يتم وضعه أولاً وفصله عن الباقي بنقطتين. إذا كنت ترغب في ذلك ، يمكنك الإشارة بوضوح إلى لون خلفية مقتطف الشفرة - يتم وضع شبكة في نهاية قائمة العلامات ، وبعد ذلك يتم الإشارة إلى اللون بتنسيق RGB (على الرغم من أن هذه الطريقة ليست الأفضل - سنتحدث عن طريقة أخرى "أكثر صحة" فيما بعد). وفي النهاية ، يمكنك وضع مسافة ، ثم يمكنك كتابة تعليق عادي يمكن قراءته بواسطة الإنسان. حاولت أن أختار بناء الجملة بطريقة تجعله بسيطًا قدر الإمكان للإدخال السريع ، ولم يزعج الشفرة ، وكان مناسبًا للتعليق العادي.



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



إذا لزم الأمر ، سيتم فتح مربع حوار إدخال حيث يمكنك إدخال علامات ومعرفات تعليقات العلامة ، ووصف تفصيلي ، وكذلك تحديد لون الخلفية. لن يتم إدخال هذه البيانات فقط في التعليمات البرمجية ، ولكن أيضًا في شجرة "CRContentTree" ، المعروضة على الجانب في لوحة الشجرة (حيث FileView و ClassView وما إلى ذلك). وتجدر الإشارة إلى أن لون الخلفية يمكن أن يكون "شفافًا" - في هذه الحالة ، يتم استخدام لون الخلفية للكتلة المرفقة (إن وجدت) أو لا يتم استخدام الإضاءة الخلفية على الإطلاق.



في الوقت الحالي ، تتكون الشجرة من ثلاثة أجزاء رئيسية (عقد المستوى الأعلى): الملفات وعلامات التمييز والملاحظات (ربما ليس هذا هو الحل النهائي ، لأن المفهوم ليس واضحًا بعد ، وكذلك راحة مثل هذا الهيكل).



FILES هي بنية ملف المشروع ، والتي يتم استخراجه من ملف المشروع أو من موقع المصادر على القرص. يتم إنشاء عُقد الملفات أثناء الإنشاء الأولي للشجرة. عادةً ما يؤدي النقر المزدوج فوق عقدة ملف إلى فتح الملف في محرر IDE. يمكنك تحديد إضافة تعليقات العلامة في FILES - ثم ستظهر عقدة فرعية في الملف المقابل. هذا هو المكان الذي تتم فيه إضافة معرفات تعليقات العلامة الفريدة. يتحقق النظام من تفرد المعرف داخل عقدة ملف الشجرة ويجعل من الممكن إنشاء اسم فريد تلقائيًا.

TAGS هي سحابة علامة مشروع عالمية ؛ لا ترتبط العلامات بملف شفرة المصدر ويمكن أن تحدث في أي ملف مشروع عدة مرات كما تشاء.

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

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

يمكن تعطيل كل عقدة عن طريق إلغاء تحديد خانة الاختيار في العقدة. سيؤدي ذلك إلى إزالة تمييز هذه العقدة وجميع العقد التابعة في الكود. وبالتالي ، عن طريق إزالة ، على سبيل المثال ، علامات الاختيار من العقد الجذرية الثلاث (FILES و TAGS و NOTES) ، يمكنك إيقاف تشغيل تمييز جميع تعليقات العلامة ، باستثناء تلك التي يشار إلى لونها بوضوح في الرمز (من خلال الأشرطة).

يؤدي النقر المزدوج فوق العقدة إلى فتح الملف المقابل في IDE ووضع المؤشر في موضع الرمز المقابل. بالنسبة للعلامات التي يمكن أن تحدث بشكل متكرر ، بدلاً من فتح الملف ، يتم تشكيل قائمة بجميع التكرارات ، والتي يتم تحميلها في لوحة CR Output ، ومن خلال النقر المزدوج على السطر المقابل في هذه القائمة ، يمكنك فتح الملف والموضع في الشفرة.

تحتوي كل عقدة على حقل لوصف مفصل (نص متعدد الأسطر بطول عشوائي). يتم تحميل هذا الوصف في منطقة "CR Info" مع تحديد بسيط للعقدة في الشجرة (بنقرة واحدة بالماوس) ، بالإضافة إلى وضع المؤشر في أي مكان في المنطقة المحددة في الرمز والنقر فوق الزر "بحث" على شريط الأدوات. التحرير متاح دائمًا ، يتم حفظ النص الذي تم تغييره تلقائيًا (بفقدان التركيز). أفكر في تقديم دعم لتنسيق ماركداون في هذا المجال ، ولكن حتى الآن لم تصل يدي إلى هذه النقطة.



ليس من المرغوب فيه دائمًا (أو ليس من المناسب دائمًا) إدراج أي تعليقات في الرمز. لذلك ، فإن الاحتمال الثاني هو "التوقيعات" ، أي استخدامها كعلامات للرمز نفسه. التوقيع عبارة عن تسلسل معين من الرموز المميزة (باستثناء المسافات وفواصل الأسطر - أي "foo (1،2،3)" و "foo (1، 2، 3) هي واحدة ونفس الشيء). هناك ثلاثة أنواع من التوقيعات:

  1. كتلة - يتم تمييز كتلة ، تبدأ بتوقيع وتتضمن تسلسل رمز محاط بأقواس متعرجة.
  2. سطر واحد - يتم تمييز السطر بالكامل مع التوقيع
  3. رمزي - يتم تمييز تسلسل التوقيع فقط. من الملائم استخدام هذه التوقيعات لتسليط الضوء على الأسماء الفردية - المتغيرات والوظائف والفئات.

العمل مع كتل التوقيع هو نفسه كما هو الحال مع كتل العلامة. وبالمثل ، يتم إنشاء العقد في شجرة.

إذا تم إنشاء المعرف والعلامات لعقد العلامة بشكل منفصل ، فمن المقترح بالنسبة لعقد التوقيع تحديد الطريقة التي نرغب بها في النظر في التوقيع - كمعرف (مرفق بملف) أو كعلامة عامة. على سبيل المثال ، بالنسبة لـ "الأسماء" ، من المنطقي استخدام وضع العلامة - ثم يتم تمييز الاسم المقابل في الشفرة طوال المشروع.



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

قليلا عن تنسيق التخزين لقاعدة البيانات. في الواقع ، يتم تخزين تعليقات العلامة فقط في شفرة المصدر ؛ يتم تخزين محتويات الشجرة في ملف xml خاص بملحق ".cr". لا يوجد ربط صريح لملف قاعدة البيانات بالمشاريع ، على الرغم من أنه عند فتح مشروع ، تتم محاولة فتح ملف cr بنفس الاسم إذا لم يتم تنزيل ملف cr مسبقًا.

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

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

هذا كل شيء في الوقت الحالي (على الرغم من أنه لا تزال هناك بعض الميزات الصغيرة التي لم أذكرها في المقالة - على سبيل المثال ، اعتبرت أنه من الضروري إضافة علامات التبويب ، لأنه بدونها يكون الأمر محزنًا حقًا - على الرغم من وجود العديد من المكونات الإضافية لعلامات التبويب ؛ يتم عرض بعض أوامر Qt الأساسية أيضًا على شريط الأدوات منشئ غير مرتبط بالمكون الإضافي ؛ وما إلى ذلك).

رابط التحميل: https://www.dropbox.com/s/9iiw5x7elwy3tpe/CodeRainbow4.zip؟dl=0
متطلبات النظام: Windows، Qt Creator> = 4.5.1 من خلال MSVC2015 32bit (هذا هو التجميع القياسي الموزع على download.qt.io)
التثبيت: قم بفك ضغط الأرشيف ونسخ المكون الإضافي إلى المجلد c: /Qt/Qt5.10.1/Tools/QtCreator/lib/qtcreator/plugins (هذا مثال لوضع Qt القياسي ، إذا كان لديك Qt مثبتًا بشكل مختلف أو إصدار آخر - سيكون المسار مختلفًا) و (إعادة) تشغيل Qt Creator.

Source: https://habr.com/ru/post/ar425061/


All Articles