ทำตามคู่มือสไตล์ Google TypeScript
การย้ายข้อมูลไปยัง TypeScript และ ES6
เดิมที Blockly เขียนขึ้นใน ES5.1 ตามคู่มือสไตล์ Google JavaScript เวอร์ชันเก่า ณ ขณะนั้น โค้ดที่เขียนใหม่ควรเป็นไปตามคู่มือสไตล์ปัจจุบันและใช้ฟีเจอร์ภาษา ES6 เช่น let
, const
, class
เพื่อทำลายการกำหนดโครงสร้าง (หากมี)
โค้ดที่มีอยู่อาจได้รับการอัปเดตหรือไม่เป็นไปตามข้อกำหนด ทีม Blockly จะพยายามตัดสินใจอย่างดีที่สุดโดยคำนึงถึงความสอดคล้องกันของโค้ดและประสบการณ์ของผู้ใช้ห้องสมุด เช่น เราอาจเลือกที่จะไม่เปลี่ยนชื่อฟังก์ชันสาธารณะที่ไม่สอดคล้องกับคู่มือสไตล์อีกต่อไป
ควรทำ
- ใช้เครื่องมือการวิเคราะห์และการจัดรูปแบบ
- เราใช้ eslint และมีไฟล์
.eslintrc.js
ที่ตั้งค่าไว้กับกฎสำหรับสไตล์ที่ต้องการ - เราใช้ที่สวยขึ้นสำหรับการจัดรูปแบบอัตโนมัติ
- เรียกใช้
npm run lint
เพื่อเรียกใช้โปรแกรมวิเคราะห์โค้ดและnpm run format
เพื่อเรียกใช้การจัดรูปแบบ
- เราใช้ eslint และมีไฟล์
- เยื้องด้วยการเว้นวรรค ไม่ใช่ปุ่ม Tab
- ใช้เครื่องหมายอัฒภาค
- ใช้
camelCase
สำหรับตัวแปรและฟังก์ชัน - ใช้
TitleCase
สำหรับชั้นเรียน - ใช้
ALL_CAPS
สำหรับค่าคงที่ - ใช้วงเล็บปีกกาสำหรับโครงสร้างการควบคุมทั้งหมด
- ข้อยกเว้น: คุณไม่ต้องใส่วงเล็บเหลี่ยมสำหรับคำสั่ง
if
แบบบรรทัดเดียว
- ข้อยกเว้น: คุณไม่ต้องใส่วงเล็บเหลี่ยมสำหรับคำสั่ง
- ใช้เครื่องหมายคำพูดเดี่ยว (ยกเว้นเมื่อเขียน JSON)
- ประกาศตัวแปรซ้ำใน
for
ลูป นั่นคือ เขียนfor (const i = 0; ...)
แทนfor (i = 0; ...)
เสมอ- การไม่ทำเช่นนั้นจะเพิ่มความเสี่ยงที่หลังจากการเปลี่ยนโครงสร้างภายในโค้ดสูงขึ้นในฟังก์ชันแล้ว ตัวแปรจะไม่มีเจ้าของและกลายเป็นเรื่องน่าประหลาดใจไปทั่วโลก
- ขึ้นต้นด้วยอักษรตัวพิมพ์ใหญ่และลงท้ายด้วยจุด
- สร้างปัญหา GitHub ด้วย TODO แล้วลิงก์โดยใช้
TODO(#issueNumber)
- ใส่คำอธิบายประกอบในทุกอย่างด้วยเอกสารการแก้ปัญหา
ไม่ควรทำ
- เยื้องตามแท็บ
- ใช้การขีดเส้นใต้ที่ตอนท้ายของชื่อตัวแปรหรือฟังก์ชัน
- โค้ดก่อนหน้านี้บางโค้ดใช้ขีดล่างสำหรับพร็อพเพอร์ตี้หรือฟังก์ชันส่วนตัวหรือภายใน แม้ว่าโค้ดเหล่านี้อาจยังคงมีอยู่ แต่คุณไม่ควรเพิ่มโค้ดใหม่ตามวิธีการนี้
- ใช้
snake_case
- ใช้เครื่องหมายอัญประกาศคู่ (ยกเว้นเมื่อเขียน JSON)
- ใช้เอกสาร TSDoc ที่มีรูปแบบไม่ถูกต้อง
- เอกสาร TSDoc จะมีการเผยแพร่โดยอัตโนมัติเป็นส่วนหนึ่งของเอกสารประกอบของเรา
- เขียน
TODO (username)
- ให้สร้างปัญหา GitHub ด้วย TODO แล้วลิงก์โดยใช้
TODO(#issueNumber)
แทน
- ให้สร้างปัญหา GitHub ด้วย TODO แล้วลิงก์โดยใช้
- ใช้
string.startsWith
โปรดใช้Blockly.utils.string.startsWith
แทน
เอกสารการแก้ปัญหา
ทีม Blockly ใช้ TSDoc เพื่อใส่คำอธิบายประกอบโค้ดของเราและสร้างเอกสารต่างๆ เราคาดว่าจะใช้ TSDoc สำหรับพร็อพเพอร์ตี้สาธารณะทั้งหมดของคลาส และฟังก์ชันที่ส่งออกทั้งหมด
ความคิดเห็น TSDoc ต้องขึ้นต้นด้วย /**
และลงท้ายด้วย */
จึงจะแยกวิเคราะห์ได้อย่างถูกต้อง
ประเภท
ระบบจะไม่รวมประเภทใน TSDoc เนื่องจากข้อมูลดังกล่าวอยู่ในโค้ด TypeScript โดยตรง หากคุณแก้ไขไฟล์ JavaScript ที่เหลืออยู่เพียงไม่กี่ไฟล์ ให้ใส่คำอธิบายประกอบประเภทตามเอกสารประกอบเกี่ยวกับการคอมไพล์
ระดับการแชร์
ฟังก์ชันหรือพร็อพเพอร์ตี้ที่ควรเข้าถึงภายในไลบรารี Blockly เท่านั้นควรมีคำอธิบายประกอบด้วย @internal
วิธีนี้ช่วยป้องกันไม่ให้พร็อพเพอร์ตี้เหล่านี้
ปรากฏในเอกสารสาธารณะ คุณควรใส่ตัวแก้ไขการเปิดเผยอื่นๆ
ไว้ในโค้ด TypeScript โดยตรง ไม่ใช่ใน TSDoc
พร็อพเพอร์ตี้
เอกสาร TSS สำหรับพร็อพเพอร์ตี้ควรมีคำอธิบายพร็อพเพอร์ตี้ รายละเอียดที่พักที่ชี้แจงได้ก็อาจไม่แสดง
/**
* The location of the top left of this block (in workspace coordinates)
* relative to either its parent block, or the workspace origin if it has no
* parent.
*
* @internal
*/
relativeCoords = new Coordinate(0, 0);
ฟังก์ชัน
คำอธิบายประกอบสำหรับฟังก์ชันควรมี
- คำอธิบายฟังก์ชัน
- แท็ก
@param
1 แท็กต่อพารามิเตอร์ รวมถึง- ชื่อ
- คำอธิบาย
- แท็ก
@returns
หากฟังก์ชันจะแสดงผลค่า พร้อมคำอธิบายค่าที่แสดงผล
ระบบอาจละเว้นคำอธิบายสำหรับฟังก์ชัน พารามิเตอร์ หรือค่าที่แสดงผล หากมีลักษณะที่ชัดเจนในตัวเอง
เช่น
/**
* Find the workspace with the specified ID.
*
* @param id ID of workspace to find.
* @returns The sought after workspace or null if not found.
*/
export function getWorkspaceById(id: string): Workspace | null {
return WorkspaceDB_[id] || null;
}