ปฏิบัติตามคู่มือสไตล์ TypeScript ของ Google
การย้ายข้อมูลไปยัง TypeScript และ ES6
Blockly เขียนขึ้นด้วย ES5.1 เดิมเพื่อให้เป็นไปตามคู่มือสไตล์ JavaScript ของ Google เวอร์ชันเก่า โค้ดที่เขียนขึ้นใหม่ควรเป็นไปตามคู่มือสไตล์ปัจจุบันและใช้ฟีเจอร์ภาษา ES6 เช่น let
, const
, class
, การกําหนดค่าแบบแยกโครงสร้าง (destructuring assignment) ตามความเหมาะสม
รหัสที่มีอยู่อาจได้รับการอัปเดตหรือไม่ได้รับการปฏิบัติตามข้อกำหนด ทีม Blockly จะพยายามตัดสินใจอย่างดีที่สุดโดยคำนึงถึงความสอดคล้องของโค้ดและประสบการณ์ของผู้ใช้ไลบรารี เช่น เราอาจเลือกที่จะไม่เปลี่ยนชื่อฟังก์ชันสาธารณะที่ไม่เป็นไปตามคู่มือสไตล์อีกต่อไป
ควรทำ
- ใช้เครื่องมือการจัดรูปแบบและการตรวจหาข้อบกพร่อง
- เราใช้ eslint และมี
eslint.config.mjs
ไฟล์ ที่ตั้งค่ากฎสำหรับสไตล์ที่ต้องการ - เราใช้ prettier เพื่อการจัดรูปแบบอัตโนมัติ
- กด
npm run lint
เพื่อเรียกใช้โปรแกรมวิเคราะห์โค้ด และnpm run format
เพื่อเรียกใช้โปรแกรมจัดรูปแบบ
- เราใช้ eslint และมี
- เยื้องด้วยเว้นวรรค ไม่ใช่แท็บ
- ใช้เซมิโคลอน
- ใช้
camelCase
สำหรับตัวแปรและฟังก์ชัน - ใช้
TitleCase
สำหรับชั้นเรียน - ใช้
ALL_CAPS
สำหรับค่าคงที่ - ใช้วงเล็บสำหรับโครงสร้างการควบคุมทั้งหมด
- ข้อยกเว้น: คุณละเว้นวงเล็บเหลี่ยมสำหรับคำสั่ง
if
แบบบรรทัดเดียวได้
- ข้อยกเว้น: คุณละเว้นวงเล็บเหลี่ยมสำหรับคำสั่ง
- ใช้เครื่องหมายคำพูดเดี่ยว (ยกเว้นเมื่อเขียน JSON)
- ประกาศตัวแปรใหม่ในวง
for
กล่าวคือ ให้เขียนfor (const i = 0; ...)
แทนfor (i = 0; ...)
เสมอ- ไม่เช่นนั้น อาจมีความเสี่ยงที่หลังจากการแยกส่วนโค้ดที่สูงขึ้นในฟังก์ชันแล้ว ตัวแปรจะกลายเป็นตัวแปรส่วนกลางโดยไม่ได้ตั้งใจ
- ขึ้นต้นความคิดเห็นด้วยอักษรตัวพิมพ์ใหญ่และลงท้ายด้วยเครื่องหมายจุด
- สร้างปัญหา GitHub ที่มี TODO และลิงก์โดยใช้
TODO(#issueNumber)
- ใส่คำอธิบายประกอบทุกอย่างด้วย TSDoc
ไม่ควรทำ
- เยื้องด้วยแท็บ
- ใช้ขีดล่างที่ส่วนท้ายของชื่อตัวแปรหรือฟังก์ชัน
- โค้ดก่อนหน้านี้บางรายการใช้ขีดล่างสำหรับพร็อพเพอร์ตี้หรือฟังก์ชันภายในหรือส่วนตัว แม้ว่าโค้ดเหล่านี้จะยังคงอยู่ แต่ไม่ควรเพิ่มโค้ดใหม่ตามรูปแบบนี้
- ใช้
snake_case
- ใช้เครื่องหมายคำพูดแบบเปิด/ปิด (ยกเว้นเมื่อเขียน JSON)
- ใช้ TSDoc ที่มีรูปแบบไม่ถูกต้อง
- TSDoc ของเราจะเผยแพร่โดยอัตโนมัติเป็นส่วนหนึ่งของเอกสารประกอบ
- เขียน
TODO (username)
- แต่ให้สร้างปัญหา GitHub ที่มี TODO และลิงก์โดยใช้
TODO(#issueNumber)
- แต่ให้สร้างปัญหา GitHub ที่มี TODO และลิงก์โดยใช้
- ใช้
string.startsWith
ให้ใช้Blockly.utils.string.startsWith
แทน
TSDoc
ทีม Blockly ใช้ TSDoc เพื่อกำกับเนื้อหาโค้ดและสร้างเอกสารประกอบ เราต้องการ TSDoc สำหรับพร็อพเพอร์ตี้สาธารณะทั้งหมดของคลาส และสำหรับฟังก์ชันที่ส่งออกทั้งหมด
ความคิดเห็น TSDoc ต้องขึ้นต้นด้วย /**
และลงท้ายด้วย */
จึงจะแยกวิเคราะห์ได้อย่างถูกต้อง
ประเภท
ระบบจะไม่ใส่ประเภทใน TSDoc เนื่องจากข้อมูลดังกล่าวอยู่ในโค้ด TypeScript โดยตรง หากคุณแก้ไขไฟล์ JavaScript ที่เหลืออยู่เพียงไม่กี่ไฟล์ ให้ใส่คำอธิบายประกอบประเภทตามเอกสารประกอบของ Closure Compiler
ระดับการแชร์
ฟังก์ชันหรือพร็อพเพอร์ตี้ที่ควรเข้าถึงได้ภายในไลบรารี Blockly เท่านั้นควรมีคำอธิบายประกอบด้วย @internal
ซึ่งจะป้องกันไม่ให้พร็อพเพอร์ตี้เหล่านี้ปรากฏในเอกสารประกอบสาธารณะ ตัวแก้ไขระดับการเข้าถึงอื่นๆ ควรวางไว้ในโค้ด TypeScript โดยตรง ไม่ใช่ใน TSDoc
พร็อพเพอร์ตี้
TSDoc สำหรับที่พักควรมีคำอธิบายที่พัก คุณอาจไม่ใส่รายละเอียดสำหรับพร็อพเพอร์ตี้ที่เข้าใจได้เอง
/**
* 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;
}