هل توجد متصفحات مصدر بنمط CScope للغات أخرى إلى جانب C/C++ على نظام التشغيل Windows؟

StackOverflow https://stackoverflow.com/questions/65456

  •  09-06-2019
  •  | 
  •  

سؤال

أنا مهتم بشكل خاص بالأدوات التي يمكن توصيلها بـ Vim للسماح بتصفح المصدر بنمط CScope (أوامر 1-2 بضغطة المفاتيح لتحديد تعريفات الوظائف والمتصلين والرموز العالمية وما إلى ذلك) للغات إلى جانب C/C++ مثل Java وC# (نظرًا لأن Vim وCscope يتكاملان جيدًا بالفعل لتصفح C/C++).لست مهتمًا بالأدوات المستندة إلى IDE لأنني أعلم أن Microsoft والموردين الآخرين يتعاملون بالفعل مع هذه المساحة - أفضل استخدام Vim للتحرير والتصفح، ولكن لا أعرف أدوات C# و/أو Java التي توفر لي نفس قوة CScope.

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

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

المحلول

يعمل CScope مع Java.

من http://cscope.sourceforge.net/cscope_vim_tutorial.html:

على الرغم من أن CSCOPE كان مخصصًا في الأصل فقط للاستخدام مع رمز C ، إلا أنه في الواقع أداة مرنة للغاية تعمل بشكل جيد مع لغات مثل C ++ و Java.يمكنك التفكير في الأمر كقاعدة بيانات عامة "GREP" ، مع القدرة على التعرف على بعض بنيات إضافية مثل مكالمات الوظائف والتعاريف المتغيرة.بشكل افتراضي CSCOPE ، لا تحتوي إلا على ملفات C و LEX و YACC (.C ، .H ، .L ، قائمة ملحقات الملفات (نعم ، يجب أن نغير ذلك).لذا بدلاً من ذلك ، يجب عليك إنشاء قائمة بالملفات التي تريد تحليلها ، وتسميتها "cscope.files" (يمكنك تسميتها أي شيء تريده إذا استدعت "CSCOPE -I FOOfile").طريقة سهلة (ومرنة للغاية) للقيام بذلك هي الأمر عبر الأمر UNIX "Find" الموثوق به:

find . -name '*.java' > cscope.files

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

نصائح أخرى

إن الادعاء بأن Cscope يدعم Java يعد أمرًا مبالغًا فيه.يبدو أنه يتعامل مع الطريقة كدالة، لذلك ليس لديه أي فكرة عن أن A.foo() وA.foo(Object) وB.foo() كلها مختلفة.هذه مشكلة كبيرة مع قاعدة تعليمات برمجية كبيرة (بما في ذلك مكتبات الجهات الخارجية) مع العديد من الأساليب التي تحمل نفس الاسم.(لم ألقي نظرة على مصدر Cscope، ولكن هذا ما وجدته أثناء تجربة أحدث إصدار من Cscope، الإصدار 15.7a-3.3 من Debian غير مستقر.)

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

لقد تأخرت قليلاً عن الحفلة هنا، لكن https://github.com/eapache/starscope/ يوفر المشروع إطارًا رائعًا لإنشاء قواعد بيانات cscope لمزيد من اللغات.وهو يدعم حاليًا Ruby وGo، كما أن Javascript قيد التقدم.لا ينبغي أن تكون إضافة Java/C# بهذه الصعوبة.

يحرر:جافا سكريبت الآن مدعومة بالكامل.

وأنا أتفق مع أندرو - إن محاولة الحصول على التسلسل الهرمي للمكالمات لطريقة ما تؤدي إلى إرجاع جميع المكالمات التي تحمل الاسم نفسه، حتى لو كانت من فئة مختلفة.

يمكنك استخدام Eclim لتوصيل Eclipse بـ VIM

http://eclim.org/

وهو ما يسميه المؤيدون التسلسل الهرمي

http://eclim.org/vim/java/inspection.html#call-hierarchy

قد يكون هذا ما تبحث عنه:

http://www.vim.org/scripts/script.php?script_id=1783

يمكنك أيضًا محاكاة بعض وظائف CScope في ملف .vimrc الخاص بك باستخدام النكهات المختلفة لـ خريطة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top