ไทย

เครื่องมือสำหรับนักพัฒนา · การเปรียบเทียบข้อความ

สิ่งที่ 'ละเว้นช่องว่าง' จริงๆ ละเว้นในส่วนต่างของข้อความทีละบรรทัด

· มันทำงานอย่างไร

ข้อความที่แตกต่าง นักพัฒนาเวิร์กโฟลว์ ช่องว่าง

การแก้ไขข้อความสองครั้งสอดคล้องกับการเปลี่ยนแปลงการเยื้องที่ถูกระงับ แต่การแก้ไขเนื้อหายังคงอยู่
ภาพประกอบเวกเตอร์ต้นฉบับ ToolAcre

การแบ่งประเภทของช่องว่างที่การเปรียบเทียบสามารถทำให้เป็นมาตรฐานได้ ตั้งแต่การเยื้องนำไปจนถึงการทำงานภายใน และเตือนว่าช่องว่างมีความหมายที่ใดและไม่ควรละเลย

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

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

ความแตกต่างของช่องว่างสี่ประเภท — แยกการเยื้องนำหน้า ช่องว่างต่อท้าย การวิ่งภายใน และบรรทัดว่าง เนื่องจากแต่ละประเภทมีสาเหตุจากเครื่องมือหรือนิสัยที่แตกต่างกัน

การเปลี่ยนแปลงช่องว่างเกิดขึ้นในหลายแห่ง การเยื้องนำมักมาจากการจัดรูปแบบ การเว้นวรรคต่อท้ายจาก copy/paste; การเว้นวรรคหรือแท็บซ้ำๆ ในบรรทัดอาจแยกคำหรือคอลัมน์ บรรทัดว่างอาจแบ่งบล็อก ตัวเลือก ละเว้นช่องว่าง ของ ToolAcre จะตัดแต่งแต่ละบรรทัดและยุบช่องว่างภายในทั้งหมดให้เหลือเพียงช่องว่างเดียวเพื่อเปรียบเทียบ มันไม่เพียงแค่ลบช่องว่างทั้งหมดหรือถือว่าจำนวนบรรทัดที่แตกต่างกันเหมือนกัน: บรรทัดว่างสองบรรทัดยังคงเป็นสองหน่วยการเปรียบเทียบ เว้นแต่การดำเนินการอื่นจะลบออก

การทำให้เป็นมาตรฐานเกิดขึ้นก่อนการเปรียบเทียบอย่างไร - อธิบายว่าตัวเลือกจะแปลงแต่ละบรรทัดเป็นรูปแบบมาตรฐานสำหรับการจับคู่ในขณะที่ข้อความต้นฉบับของคุณคือสิ่งที่คุณอ่าน

คีย์บรรทัดถูกคำนวณจากข้อความต้นฉบับก่อนที่จะจับคู่: trim() ลบช่องว่างนำหน้า/trailing และนิพจน์ทั่วไปแทนที่การรันภายในด้วยช่องว่างเดียว อัลกอริธึม diff จะเปรียบเทียบคีย์ แต่เก็บข้อความต้นฉบับไว้ในแถวที่แสดง คำนำหน้าและคำต่อท้ายทั่วไปจะถูกละทิ้งก่อนที่จะสร้างตาราง LCS ดังนั้นการแก้ไขเล็กๆ น้อยๆ ในเอกสารขนาดใหญ่จึงไม่จำเป็นต้องเปรียบเทียบทุกบรรทัดต่อกัน มีขีดจำกัดบรรทัดที่แตกต่างกัน 2,000 เนื่องจากตารางการเขียนโปรแกรมแบบไดนามิกจะขยายตามความยาวทั้งสองด้าน

ตัวอย่างการทำงาน: ฟังก์ชัน Python ที่เยื้องใหม่และไฟล์ YAML - แสดงตัวเลือกในการล้างมุมมอง Python จากนั้นซ่อนการเปลี่ยนแปลงการเยื้อง YAML ที่เปลี่ยนแปลงโครงสร้างของเอกสารจริง ๆ

ลองนึกภาพฟังก์ชัน Python ที่ทั้งร่างกายเปลี่ยนจากสี่ช่องเป็นสองช่องโดยยังอยู่ในระดับการซ้อนเท่าเดิม การเพิกเฉยต่อการเยื้องสามารถซ่อนสัญญาณรบกวนในการจัดรูปแบบนั้นได้ ใน YAML การย้ายคีย์จากด้านล่าง services.web ไปยังด้านล่างของบริการจะเปลี่ยนการแมปพาเรนต์ แม้ว่าอักขระของแต่ละบรรทัดจะเหมือนกันเมื่อช่องว่างถูกตัดแต่งแล้ว เรียกใช้ตัวเลือกบนตัวอย่างทั้งสอง: มุมมอง Python อาจตรวจสอบได้ง่ายขึ้น ในขณะที่การเปลี่ยนแปลง YAML อาจหายไปแม้จะเปลี่ยนแผนผังข้อมูลก็ตาม อย่าใช้เอาต์พุตที่ไม่คำนึงถึงช่องว่างเพียงอย่างเดียวเพื่ออนุมัติรูปแบบที่ไวต่อการเยื้อง

เมื่อช่องว่างคือข้อมูล - แสดงรายการรูปแบบที่ช่องว่างมีความหมาย: YAML, Makefiles, บล็อกโค้ด Markdown, การส่งออกที่มีความกว้างคงที่ และตัวอักษรสตริง

ช่องว่างคือข้อมูลในการเยื้อง YAML สูตร Makefile บล็อกโค้ด Markdown และการส่งออกที่มีความกว้างคงที่ ภายในตัวอักษรสตริง การแทนที่หลายช่องว่างสามารถเปลี่ยนข้อความที่ผู้ใช้มองเห็นหรือค่าที่เซ็นชื่อหรือแฮชได้ แม้แต่โค้ดที่มีการจัดรูปแบบที่ยืดหยุ่นโดยทั่วไปก็มีบริบทที่ช่องว่างมีความสำคัญ: บล็อก Python และเอกสารเชลล์ที่นี่เป็นตัวอย่างที่ชัดเจน ตัวเลือกนี้ไม่สามารถอนุมานบริบทเหล่านั้นได้ เนื่องจากจะเห็นบรรทัดธรรมดา ไม่ใช่ไวยากรณ์ของภาษา เลือกเมื่อคุณเข้าใจไฟล์ที่กำลังเปรียบเทียบเท่านั้น

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

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

สิ่งนี้ไม่ครอบคลุมถึง — ตัวเลือกจะเปรียบเทียบบรรทัดหลังจากการทำให้เป็นมาตรฐาน ไม่จัดเรียงย่อหน้าใหม่ ตรวจจับบล็อกที่ถูกย้าย หรือเปรียบเทียบการจัดรูปแบบในเอกสารที่หลากหลาย

คุณลักษณะนี้จะไม่จัดเรียงย่อหน้าใหม่ ตรวจจับบล็อกที่ถูกย้าย เปรียบเทียบการเรนเดอร์ HTML หรือตัดสินใจว่า AST สองโปรแกรมนั้นเทียบเท่ากันหรือไม่ ส่วนต่างของ ToolAcre คือการเขียนโปรแกรมไดนามิก LCS แบบใช้บรรทัดพร้อมการตัดแต่งคำนำหน้าทั่วไป/suffix ไม่ใช่อัลกอริทึมของ Myers ที่อธิบายไว้ในบทช่วยสอน diff ทั่วไปบางรายการ ในไฟล์ที่วางขนาดใหญ่ ไฟล์จะหยุดแทนที่จะจัดสรรเมทริกซ์ที่ไม่มีขอบเขต ใช้โปรแกรมแยกวิเคราะห์ที่รับรู้ภาษาหรือการตรวจสอบการควบคุมเวอร์ชันสำหรับการอ้างสิทธิ์เชิงโครงสร้าง

ประเด็นสำคัญ: สลับไปมา ไม่ใช่ค่าเริ่มต้น — แนะนำให้เรียกใช้การเปรียบเทียบทั้งสองรายการและแสดงให้เห็นว่าการเปรียบเทียบข้อความของ ToolAcre ช่วยให้คุณสามารถเปิดหรือปิดตัวเลือกช่องว่างสำหรับข้อความคู่เดียวกันได้อย่างไร

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