ปลั๊กอิน Prettier สำหรับ SQL ที่ใช้ sql-parser-cst และอัลกอริธึมการจัดรูปแบบ Prettier จริง
ลองถ่ายทอดสด!
เช่นเดียวกับ Prettier สำหรับ JavaScript ปลั๊กอินนี้จะจัดรูปแบบนิพจน์ SQL ที่แตกต่างกันไปตามความยาว แบบสอบถาม SQL แบบสั้นจะถูกจัดรูปแบบในบรรทัดเดียว:
SELECT a, b, c FROM tbl WHERE x > 10 ;
แบบสอบถามที่ยาวกว่าจะพิมพ์แต่ละประโยคแยกบรรทัด:
SELECT id, client . name , client . priority
FROM client
WHERE client . id IN ( 12 , 18 , 121 );
อันที่ยาวกว่านั้นจะได้รับเนื้อหาของแต่ละประโยคที่เยื้อง:
SELECT
client . id ,
client . name AS client_name,
organization . name AS org_name,
count ( orders . id ) AS nr_of_orders
FROM
client
LEFT JOIN organization ON client . organization_id = organization . id
LEFT JOIN orders ON orders . client_id = client . id
WHERE
client . status = ' active '
AND client . id IN ( 28 , 214 , 457 )
AND orders . status IN ( ' active ' , ' pending ' , ' processing ' )
GROUP BY client . id
ORDER BY client . name
LIMIT 100 ;
ปัจจุบันปลั๊กอินนี้รักษาองค์ประกอบไวยากรณ์ส่วนใหญ่และเน้นที่เค้าโครงของช่องว่างเป็นหลัก
ดู STYLE_GUIDE สำหรับภาพรวมของสไตล์การจัดรูปแบบ SQL ที่ใช้
ติดตั้งเป็นปลั๊กอิน Prettier อื่นๆ:
npm install --save-dev prettier prettier-plugin-sql-cst
# or
pnpm add --save-dev prettier prettier-plugin-sql-cst
# or
yarn add --dev prettier prettier-plugin-sql-cst
จากนั้นใช้กับไฟล์ SQL ผ่านเครื่องมือบรรทัดคำสั่ง Prettier หรือส่วนขยาย Prettier สำหรับโปรแกรมแก้ไขที่คุณเลือก
ตามค่าเริ่มต้น ปลั๊กอินจะกำหนดภาษา SQL ตามนามสกุลไฟล์:
.sql
หรือ .sqlite
- SQLite.bigquery
- BigQuery คุณสามารถแทนที่พฤติกรรมนี้ด้วยการกำหนดค่าที่สวยกว่าในไฟล์ .prettierrc.json
:
{
"plugins" : [ " prettier-plugin-sql-cst " ],
"overrides" : [
{
"files" : [ " *.sql " ],
"options" : { "parser" : " bigquery " }
}
]
}
หรือคุณสามารถเก็บไว้ใน package.json
ของคุณ :
{
"prettier" : {
"plugins" : [ " prettier-plugin-sql-cst " ],
"overrides" : [
{
"files" : [ " *.sql " ],
"options" : { "parser" : " bigquery " }
}
]
}
}
ปลั๊กอินมีตัวแยกวิเคราะห์ต่อไปนี้:
sqlite
bigquery
postgresql
( ทดลอง! คาดว่าจะเกิดปัญหา )mysql
( ทดลอง! คาดว่าจะเกิดปัญหา )mariadb
( ทดลอง! คาดว่าจะเกิดปัญหา ) ตัวเลือก Prettier มาตรฐาน printWidth, tabWidth, useTabs นำไปใช้ นอกจากนี้ยังมีตัวเลือกเฉพาะของ SQL บางตัว:
ตัวเลือก API | ค่าเริ่มต้น | คำอธิบาย |
---|---|---|
sqlKeywordCase | upper | แปลงคำสำคัญ SQL เป็นตัวพิมพ์ upper หรือตัวพิมพ์ lower หรือ preserve ที่มีอยู่ โปรดทราบว่าสำหรับตอนนี้ preserve ค่อนข้างเข้ากันไม่ได้กับ sqlCanonicalSyntax: true (เช่นคำหลัก AS ที่เพิ่มจะเป็นตัวพิมพ์ใหญ่เสมอ) |
sqlParamTypes | [] | อาร์เรย์ของประเภทพารามิเตอร์ที่ถูกผูกไว้: ? , ?nr , $nr , :name , @name , $name . |
sqlCanonicalSyntax | true | เมื่อเปิดใช้งาน จะทำการเปลี่ยนแปลงคำหลักและตัวดำเนินการตามความคิดเห็น เช่น การบังคับใช้ AS ในนามแฝง และแทนที่การเปรียบเทียบ <> ด้วย != ดู STYLE_GUIDE สำหรับรายละเอียดเพิ่มเติม (ตั้งแต่ 0.11.0) |
sqlAcceptUnsupportedGrammar | false | โดยปกติเมื่อปลั๊กอินพบไวยากรณ์ SQL ปลั๊กอินจะไม่รองรับจะเกิดข้อผิดพลาดและไม่สามารถจัดรูปแบบใดๆ ได้เลย เมื่อเปิดใช้งานตัวเลือกนี้ ระบบจะข้ามคำสั่ง SQL ที่ไม่รู้จัก และปล่อยไว้เหมือนเดิม |
หากต้องการใช้ปลั๊กอินนี้ภายใน VSCode ให้ติดตั้งส่วนขยาย Prettier VSCode
ปฏิบัติตามเอกสาร Prettier VSCode เพื่อกำหนดค่าให้เป็นตัวจัดรูปแบบเริ่มต้น
คุณอาจต้องกำหนดค่า prettier.documentSelectors เพื่อเปิดใช้งาน Prettier สำหรับไฟล์ *.sql
หากต้องการดูว่า Prettier คืออะไรหรือไม่ได้ทำอะไร ให้เปิดหน้าต่าง VSCode Output แล้วเลือกเมนูแบบเลื่อนลง Prettier ในรูปแบบ หน้าต่างควรแสดง inferredParser
ของคุณ ควรยืนยันอีกครั้งโดยแสดง "parser": "sqlite"
(หรือ perser ใดก็ตามที่คุณได้กำหนดค่าไว้ในส่วน overrides
ที่สวยงามกว่าของคุณ) และ plugins
ที่มีเส้นทางไปยังแพ็คเกจนี้ หากไม่เห็นส่วนนั้น Prettier ไม่ได้ใช้แพ็คเกจนี้
การสนับสนุนภาษา SQL ใหม่ขึ้นอยู่กับภาษาเหล่านี้ที่ได้รับการสนับสนุนโดย sql-parser-cst หากคุณต้องการจริงๆ คุณสามารถเปิดประเด็นใหม่สำหรับสิ่งนั้นได้ใน parser repo แต่โปรดทราบว่าการใช้การสนับสนุน parser สำหรับภาษาถิ่นใหม่นั้นต้องใช้เวลามาก ตราบใดที่การใช้งาน PostgreSQL, MySQL และ MariaDB อย่างต่อเนื่องยังไม่เสร็จสิ้น การทำงานในภาษาถิ่นอื่นก็ไม่น่าจะเริ่มต้นได้
ใช้ prettier-plugin-embed ร่วมกับ prettier-plugin-sql-cst
ปัจจุบันปลั๊กอินนี้รองรับภาษา SQL สองภาษา:
นอกจากนี้ยังมีการสนับสนุนการทดลองสำหรับภาษาถิ่นต่อไปนี้:
ข้อจำกัดหลักคือ parser ไม่สนับสนุนไวยากรณ์ทั้งหมดของภาษาถิ่นเหล่านี้ เราควรคาดหวังว่า parser จะขัดข้องเนื่องจากไวยากรณ์ที่เฉพาะเจาะจงกับภาษาถิ่นเหล่านี้มากกว่า แต่ตราบใดที่การแยกวิเคราะห์สำเร็จ การจัดรูปแบบก็ควรจะสำเร็จเช่นกัน โดยหลักแล้วเราสามารถคาดหวังได้ว่าการจัดรูปแบบของคำสั่ง SELECT, INSERT, UPDATE, DELETE จะทำงาน
เพื่อเอาชนะข้อจำกัดนี้ คุณสามารถเปิดใช้งานตัวเลือก sqlAcceptUnsupportedGrammar
ซึ่งจะทำให้ปลั๊กอินข้ามคำสั่ง SQL ที่ไม่รู้จัก
ลักษณะเฉพาะของรูปแบบการจัดรูปแบบ SQL ยังคงมีการเปลี่ยนแปลงอย่างมาก แม้ว่าหลักการทั่วไปควรจะถูกนำมาใช้เป็นส่วนใหญ่แล้วก็ตาม