Language Server ใหม่ที่เรียกว่า systemd-lsp ได้เกิดขึ้นเพื่อแก้ไขปัญหาที่มีมานานเกี่ยวกับการแก้ไข systemd unit files สร้างด้วย Rust เครื่องมือนี้นำฟีเจอร์การพัฒนาสมัยใหม่อย่าง syntax highlighting การตรวจจับข้อผิดพลาด และ autocompletion มาสู่กระบวนการที่เคยต้องทำด้วยมือและมักเกิดข้อผิดพลาดได้ง่าย
โปรเจกต์นี้เป็นส่วนหนึ่งของการเคลื่อนไหวที่กว้างขึ้นเพื่อให้เครื่องมือที่ดีกว่าสำหรับไฟล์การกำหนดค่าที่ขาดการสนับสนุนการแก้ไขที่ครบครัน นักพัฒนาหลายคนต้องดิ้นรนกับรูปแบบ INI-style ของ systemd มานาน ซึ่งต้องจำ directive ต่างๆ และ syntax ที่ถูกต้องมากมาย
คุณสมบัติหลัก:
- การวิเคราะห์ไวยากรณ์และการแยกวิเคราะห์โครงสร้างไฟล์ unit ของ systemd
- การวินิจฉัยแบบเรียลไทม์พร้อมการตรวจจับข้อผิดพลาดและการตรวจสอบความถูกต้อง
- การเติมข้อความอัตโนมัติแบบตระหนักบริบทสำหรับส่วนต่างๆ และคำสั่ง
- เอกสารประกอบแบบบูรณาการพร้อมข้อมูลแสดงเมื่อเลื่อนเมาส์
- ความสามารถในการจัดรูปแบบโค้ด
- รองรับการทำงานข้ามแพลตฟอร์ม ( Linux , macOS , Windows )
ประสบการณ์การพัฒนาที่ดีขึ้น
Language Server นี้ให้การสนับสนุนการแก้ไขอย่างครอบคลุม รวมถึงการตรวจจับข้อผิดพลาดแบบเรียลไทม์ autocompletion ที่เข้าใจบริบท และเอกสารประกอบที่รวมเข้าด้วยกัน เมื่อนักพัฒนาเลื่อนเมาส์ไปที่ directive ต่างๆ พวกเขาสามารถเข้าถึงหน้าคู่มือที่มีอยู่ในตัวโดยไม่ต้องออกจาก editor เครื่องมือนี้ยังมีความสามารถในการจัดรูปแบบโค้ดเพื่อรักษาโครงสร้าง unit file ให้สม่ำเสมอ
ฟีเจอร์ที่มีประโยชน์เป็นพิเศษคือระบบ diagnostic ซึ่งตรวจสอบ section และ directive พร้อมให้คำเตือนสำหรับการกำหนดค่าที่ไม่เป็นไปตามแบบแผน สิ่งนี้ช่วยป้องกันข้อผิดพลาดทั่วไปที่อาจทำให้ service ล้มเหลวระหว่างการ deployment
สถาปัตยกรรมข้ามแพลตฟอร์มและการรวมเข้าด้วยกัน
นักพัฒนาออกแบบ systemd-lsp เป็น binary เดียวที่มีเอกสารฝังอยู่ในตัว ทำให้ไม่ต้องพึ่งพา dependency ภายนอก วิธีการนี้ทำให้เครื่องมือทำงานได้อย่างสม่ำเสมอบนระบบ Linux, macOS และ Windows Language Server นี้ปฏิบัติตามมาตรฐาน LSP ทำให้เข้ากันได้กับ editor ยอดนิยมอย่าง Neovim, VS Code และ Emacs
ความคิดเห็นจากชุมชนเป็นไปในทางบวก โดยผู้ใช้แสดงความกระตือรือร้นที่ได้มีเครื่องมือสมัยใหม่มาใช้กับการกำหนดค่า systemd โปรเจกต์นี้แก้ไขปัญหาที่แท้จริงสำหรับผู้ดูแลระบบและนักพัฒนาที่ทำงานกับ service definition เป็นประจำ
การรวมเข้ากับ Editor:
- รองรับมาตรฐาน LSP (ใช้งานได้กับ editor ทุกตัวที่รองรับ LSP)
- มีการกำหนดค่าสำหรับ Neovim ให้กับไฟล์
*.service
- เข้ากันได้กับ VS Code , Emacs และ editor อื่นๆ ที่รองรับ LSP
- สามารถรันด้วยตนเองได้สำหรับการ debugging
การถกเถียงเกี่ยวกับรูปแบบการกำหนดค่า
โปรเจกต์นี้ได้จุดประกายการอพิปรายที่น่าสนใจเกี่ยวกับการเลือกใช้รูปแบบการกำหนดค่าแบบ INI-style ของ systemd สมาชิกชุมชนบางคนตั้งคำถามว่าทำไม systemd ไม่ใช้รูปแบบที่มีโครงสร้างมากกว่าอย่าง JSON หรือ XML ซึ่งสามารถใช้ประโยชน์จากเครื่องมือตรวจสอบ schema ที่มีอยู่แล้ว
อย่างไรก็ตาม คนอื่นๆ ปกป้องการเลือกใช้รูปแบบ INI โดยชี้ให้เห็นถึงลักษณะที่เป็นมิตรกับมนุษย์และการใช้งานอย่างแพร่หลายในไฟล์การกำหนดค่า Linux รูปแบบนี้อนุญาตให้ใส่ comment และหลีกเลี่ยงความยาวเหยียดของ XML หรือปัญหาความซับซ้อนที่บางครั้งเห็นได้ในการกำหนดค่า YAML
การพัฒนาในอนาคต
โปรเจกต์ systemd-lsp ยินดีรับการมีส่วนร่วมและมุ่งหวังให้มีการรวมเข้ากับ editor อย่างกว้างขวางมากขึ้น ผู้ใช้ได้แนะนำให้เพิ่มการสนับสนุนสำหรับ custom unit ที่สร้างโดยเครื่องมืออย่าง Podman ซึ่งบ่งชี้ถึงศักยภาพในการขยายฟังก์ชันการทำงาน นักพัฒนาหวังว่าจะสามารถรวมเครื่องมือนี้เข้ากับ package manager อย่าง Mason ในที่สุดเพื่อให้การติดตั้งง่ายขึ้น
Language Server นี้แสดงถึงโซลูชันที่ใช้งานได้จริงในการปรับปรุงประสบการณ์การกำหนดค่า systemd โดยนำเครื่องมือการพัฒนาสมัยใหม่มาสู่งานการดูแลระบบที่สำคัญ
อ้างอิง: systemd-lsp