github หาภาษาของโครงการได้อย่างไร


84

ฉันเพิ่งทำงานกับโปรเจ็กต์ github ทั้งใน JavaScript และ C ++ และสังเกตว่า github แท็กโปรเจ็กต์เป็น C ++ หากคุณต้องเลือกภาษาเดียวนี่อาจเป็นการกำหนดที่ถูกต้องเนื่องจากโค้ด C ++ ถูกคอมไพล์เป็นไลบรารี JavaScript แต่สิ่งนี้ทำให้ฉันสงสัยว่า ... github คิดได้อย่างไรว่าจะแท็กแต่ละโปรเจ็กต์ภาษาอะไร


14
คุณสามารถถือว่าตัวเองโชคดี ฉันกำลังเขียนโปรเจ็กต์ Ruby on Rails แต่เนื่องจากฉันใช้ Twitter Bootstrap Github จึงคิดว่าโปรเจ็กต์ของฉันคือ Javascript แทนที่จะเป็น Ruby ที่ตั้งใจไว้

2
@davblayn ฉันคิดว่าgithub.com/github/linguist/blob/master/lib/linguist/vendor.ymlจะแก้ปัญหาของคุณได้ การใช้ CDN สำหรับ bootstrap ก็ใช้ได้เช่นกัน
Eric Wilson

3
คำถามนี้ดูเหมือนจะไม่ตรงประเด็นเนื่องจากไม่เกี่ยวกับการเขียนโปรแกรม ดูหัวข้อที่ฉันสามารถถามได้ที่นี่ในศูนย์ช่วยเหลือ บางทีWeb Apps Stack Exchangeอาจเป็นสถานที่ที่ดีกว่าในการถาม
jww

ยังเห็นmisidentified ภาษาแท็กบน Github ติดตามสำหรับนักภาษาศาสตร์
jww

1
คุณสามารถบอกได้ว่าเอ็นจินสถิติอยู่เกี่ยวกับประเภทไฟล์ที่จะทำให้ผลลัพธ์เหลวไหล ดูstackoverflow.com/a/27099628/492
CAD bloke

คำตอบ:


81

อัปเดตเมื่อเดือนเมษายน 2013 โดยnuclearsandwich (ทีมสนับสนุน GitHub หรือ "supportocat"):

หากภาษาที่คุณต้องการไม่ได้รับการเน้นไวยากรณ์คุณสามารถมีส่วนร่วมในไลบรารี Linguist เพื่อเพิ่มได้


(คำตอบเดิม ต.ค. 2555)

เธรดนี้เกี่ยวกับการสนับสนุน GitHubอธิบายว่า:

เพียงแค่สรุปขนาดไฟล์สำหรับแต่ละนามสกุล "ชนะ" ที่ใหญ่ที่สุด

เราต้องการหลีกเลี่ยงการเปิดไฟล์และแยกวิเคราะห์เนื้อหาเนื่องจากทั้งสองอย่างจะทำให้กระบวนการช้าลง ... แต่นั่นอาจเป็นวิธีเดียวในการแก้ไขความขัดแย้งเช่นนี้

เนื่องจากสิ่งนี้ไม่ถูกต้อง 100% จึงทำให้บางคนต้องเพิ่ม:

ฉันก็เช่นกันจะลงคะแนนให้กับสวิตช์แทนที่ด้วยตนเองแบบธรรมดาสำหรับกรณีที่การเดาไม่ถูกต้อง


หมายเหตุ: ดังที่Mark Rushakoffกล่าวไว้ในคำตอบของเขา (โหวตเพิ่มขึ้น) การคาดเดาก็ดีขึ้นตั้งแต่นั้นมาด้วยโครงการภาษาศาสตร์ (เปิดแหล่งที่มาตั้งแต่เดือนมิถุนายน 2554)
ท่านสามารถเข้าดูยังคงมีปัญหาแม้ว่า: GitHub ภาษาศาสตร์ปัญหา
ดูรายละเอียดเพิ่มเติมได้ที่นี่ :

เมื่อตรวจพบภาษาแล้วภาษานั้นจะถูกส่งต่อไปยังAlbinoซึ่งเป็นเครื่องห่อแบบPy เซ็กเมนต์ซึ่งจะเน้นไวยากรณ์จริง

และคุณสามารถเพิ่มคำสั่งนักภาษาในไฟล์ . gitattributes


2
ขอบคุณสำหรับข้อมูล. ฉันเดาว่ายังไม่มีวิธีแก้ไขภาษาด้วยตนเอง
noob

ไม่เป็นเช่นนั้นอีกต่อไป! คำตอบด้านล่างเกี่ยวกับนักภาษาศาสตร์อยู่ใกล้กับเครื่องหมายมากขึ้น ตรวจสอบพื้นที่เก็บข้อมูลของฉันถูกทำเครื่องหมายเป็นภาษาที่ไม่ถูกต้องและทำไมไม่ใช่ภาษาที่ชื่นชอบได้รับการยอมรับในhelp.github.com ข้อจำกัดความรับผิดชอบ: ฉันทำงานในทีมสนับสนุนของ GitHub
nuclearsandwich

@nuclearsandwich ยอดเยี่ยมฉันได้อัปเดตคำตอบเสร็จสิ้นการแก้ไขของคุณ หมายเหตุ: ฉันจะไปที่สำนักงานใหญ่ GitHub วันศุกร์ที่ 10 พฤษภาคมเพื่อพบกับJohn Greetและผู้สนับสนุนอื่น ๆ :)
VonC

ฉันแค่อยากจะเพิ่มว่าการไม่ทำเครื่องหมายที่เก็บข้อมูลหรือให้ผู้ใช้เลือกภาษาหลักจะสะดวกกว่าการเดาโดยอัตโนมัติเพราะที่เก็บgithub.com/salda/file_scraperของฉันส่วนใหญ่อยู่ใน C ++ ด้วย C เล็กน้อย แต่ทำเครื่องหมายเป็น 70 % วัตถุประสงค์ -C.
Lukas Salich

13

ปัจจุบันโครงการภาษาศาสตร์ของ Github เป็นสิ่งที่ใช้ในการกำหนดสถิติภาษาตามที่อธิบายไว้ในบล็อกโพสต์ของ Github (ซึ่งออกมาไม่กี่เดือนหลังจากที่คำถามนี้ถูกถามในตอนแรก)


ยอดเยี่ยมฉันไม่เห็นมันในเวลาที่ฉันตอบ +1
VonC

4

ขั้นแรกให้รู้ว่าคุณทำได้ แทนที่ภาษาที่ตรวจพบไฟล์ในพื้นที่เก็บข้อมูลของคุณโดยใช้แทนที่นักภาษาศาสตร์

ตอนนี้โดยสรุป

  1. แต่ละพื้นที่เก็บข้อมูลมีการติดแท็กด้วยภาษาแรกจากสถิติภาษา
  2. สถิติภาษาจะนับขนาดทั้งหมดของไฟล์สำหรับการเขียนโปรแกรมหรือภาษามาร์กอัปที่ตรวจพบไม่นับรวมไฟล์ที่จัดจำหน่ายเอกสารและไฟล์ที่สร้างขึ้น
  3. ภาษาของแต่ละไฟล์จะถูกตรวจพบโดยโครงการที่มาเปิดภาษาศาสตร์

นักภาษาศาสตร์ตรวจจับภาษาได้อย่างไร?

นักภาษาศาสตร์อาศัยกลยุทธ์ต่อไปนี้ตามลำดับและส่งคืนภาษาทันทีที่พบการจับคู่ที่สมบูรณ์แบบ (กลยุทธ์ที่มีการส่งคืนภาษาเดียว)

  1. มองหาEmacs และเป็นกลุ่ม modelines
  2. ชื่อไฟล์ที่รู้จัก ชื่อไฟล์บางชื่อเกี่ยวข้องกับภาษาเฉพาะ (คิดว่าMakefile)
  3. มองหา Shebang ไฟล์ที่มี#!/bin/bashshebangจะถูกจัดประเภทเป็นเชลล์
  4. รู้จักไฟล์นามสกุล. ภาษามีชุดส่วนขยายที่เกี่ยวข้อง อย่างไรก็ตามมีความขัดแย้งมากมายกับกลยุทธ์นี้ ผลลัพธ์ที่ขัดแย้งกัน (คิดว่า C ++, C และ Objective-C สำหรับ.h) ได้รับการปรับปรุงโดยกลยุทธ์ที่ตามมา
  5. ชุดของกฎการแก้ปัญหา โดยปกติแล้วจะใช้นิพจน์ทั่วไปในเนื้อหาของไฟล์เพื่อพยายามระบุภาษา (เช่น^[^#]+:-สำหรับ Prolog )
  6. ลักษณนามเบส์ไร้เดียงสาฝึกอบรมเกี่ยวกับไฟล์ตัวอย่าง กลยุทธ์สุดท้ายความแม่นยำต่ำสุด ลักษณนามแบบเบย์จะใช้ภาษาย่อยเป็นอินพุตเสมอ ไม่ได้หมายถึงการจัดประเภทในทุกภาษา การจับคู่ที่ดีที่สุดที่พบโดยลักษณนามจะถูกส่งกลับ

ไฟล์ที่เปิดเผยและเอกสารประกอบคืออะไร?

นักภาษาศาสตร์ถือว่าไฟล์บางไฟล์เป็นผู้จำหน่ายซึ่งหมายความว่าไฟล์เหล่านี้จะไม่รวมอยู่ในสถิติภาษา ซึ่งรวมถึงไลบรารีของ บริษัท อื่นเช่น jQuery และกำหนดไว้ในvendor.ymlไฟล์คอนฟิกูเรชัน นอกจากนี้คุณยังสามารถผู้ขายหรือไฟล์ unvendor ในพื้นที่เก็บข้อมูลของคุณโดยใช้แทนที่นักภาษาศาสตร์

ในทำนองเดียวกันไฟล์เอกสารที่กำหนดไว้ในdocumentation.ymlและสามารถเปลี่ยนแปลงได้โดยใช้การแทนที่นักภาษาศาสตร์

ไฟล์ที่สร้างขึ้นจะตรวจพบได้อย่างไร?

นักภาษาศาสตร์อาศัยกฎง่ายๆในการตรวจหาไฟล์ที่สร้างขึ้นโดยใช้ทั้งเส้นทางและเนื้อหาของไฟล์ ไฟล์ที่สร้างขึ้นจะไม่ถูกนับในสถิติภาษาและจะไม่แสดงในความแตกต่างบน github.com

สิ่งที่เกี่ยวกับการเขียนโปรแกรมและภาษามาร์กอัป?

ในนักภาษาศาสตร์แต่ละภาษาจะได้รับประเภท languages.ymlประเภทนี้สามารถพบได้ในแฟ้มการกำหนดค่าหลัก เฉพาะภาษาโปรแกรมและภาษามาร์กอัปเท่านั้นที่จะนับในสถิติ


0

หลังจากซ่อมแซมกับนักภาษาศาสตร์ฉันสังเกตเห็นสิ่งนี้

สำหรับไฟล์ที่มีshebangที่ shebang ถือว่าเมื่อพิจารณาภาษา แต่ดูเหมือนว่าจะให้น้ำหนักเท่า ๆ กันกับคนอื่น ๆ ราชสกุลราชสกุลดูเหมือนว่าจะเป็นข้อผิดพลาดใหญ่เนื่องจาก Shebang ควรกำหนดภาษาของไฟล์อย่างชัดเจน

ซึ่งอาจทำให้เกิดปัญหากับการไฮไลต์


คำตอบนี้มีลิงก์ที่เสียหายหลายรายการ นี้ยังเป็นจริงของคำตอบนี้ตามที่ปรากฏในการแลกเปลี่ยนสแต็ค: webapps.stackexchange.com/a/40110 น่าเสียดายที่ฉันต้องการดูลิงก์เหล่านั้น!
shmim

-1

นามสกุลไฟล์เป็นสิ่งแรกที่อยู่ในความคิดของฉัน


แน่นอน แต่ ... โครงการของฉันมีทั้งไฟล์.jsและ.ccไฟล์รวมถึงนามสกุลอื่น ๆ
Justin Ethier
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.