ค้นหาเว็บไซต์

วิธีสร้างบรรทัดว่างเพิ่มเติมระหว่างโหนดด้วยตัวพิมพ์ของ Typescript compiler API


เมื่อฉันสร้างโค้ด Typescript ของฉันโดยใช้ Printer ของ compiler API โค้ดของฉันจะถูกสร้างดังนี้:

namespace Something {
    export function foo() {
        ...
    }
    export function bar() {
        ...
    }
}
namespace SomethingElse {
    export function baz() {
        ...
    }
}

เพื่อให้อ่านง่ายขึ้น ฉันต้องการเพิ่มบรรทัดว่างระหว่าง foo↔bar และ Something↔SomethingElse สามารถทำได้โดยใช้ TypeScript Compiler API หรือไม่

คำตอบ #1

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

ts.factory.createIdentifier("\n");

จากนั้นสามารถใส่ตัวระบุ (หรือแม้แต่หลายตัว) หลังแต่ละโหนดที่ต้องการแยกก่อนเรียกใช้เมธอด Printer ได้

คำตอบ #2

แม้ว่าฉันก็ไม่สามารถหาวิธีอย่างเป็นทางการในการแทรกบรรทัดใหม่หรือช่องว่างที่สะอาดได้ แต่ฉันสามารถแก้ปัญหานี้ได้โดยการแทรกคอมเมนต์บรรทัดเดียวซึ่งจะช่วยให้สามารถเพิ่มบรรทัดใหม่ต่อท้ายได้:

ts.addSyntheticTrailingComment(oldNode, ts.SyntaxKind.SingleLineCommentTrivia, '', true /*trailing newline*/)
ts.addSyntheticLeadingComment(oldNode, ts.SyntaxKind.SingleLineCommentTrivia, '', true /*trailing newline*/)

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

บทความที่เกี่ยวข้อง