7 คะแนน โดย GN⁺ 2025-02-24 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • mdq เป็นเครื่องมือที่ช่วยให้ค้นหาส่วนที่ต้องการในเอกสาร Markdown ได้อย่างง่ายดาย
  • มีประโยชน์เมื่อจะตรวจสอบเทมเพลตหรือเช็กลิสต์เฉพาะในเอกสาร Markdown เช่น GitHub PR
    • ตัวอย่างเช่น สามารถใช้คำสั่ง mdq '- [ ]' เพื่อค้นหางานที่ยังทำไม่เสร็จ

การใช้งานพื้นฐาน

  • เลือกเซกชันที่มี "usage": cat example.md | mdq '# usage'
  • สามารถเชื่อมต่อฟิลเตอร์เป็นลูกโซ่ได้: cat example.md | mdq '# usage | -'
  • ตรวจสอบว่าได้ค้นหาอิสชูที่มีอยู่แล้วก่อนส่งรายงานบั๊ก: mdq -q '- [x] I have searched for existing issues'
  • ดึงตั๋วอ้างอิง: เมื่อ PR อ้างถึงตั๋ว สามารถดึงลิงก์จาก Markdown เป็น JSON และใช้ jq เพื่อเอา URL ได้
    TICKET_URL="$(echo "$PR_TEXT" | mdq --output json '# Ticket | [](^https://tickets.example.com/[A-Z]+-\d+$)' | jq -r '.items[].link.url')"
  • ย่อขนาดตารางใหญ่: สามารถกรองตารางเพื่อค้นหาตารางเวร on-call ของวันที่หรือบุคคลที่ต้องการได้
    • ค้นหาวันที่ on-call ของ Alice: cat oncall.md | mdq ':-: /On-Call|Alice/:-: *'
    • ค้นหาผู้ที่อยู่เวร on-call ในสัปดาห์ของวันที่ 15 มกราคม 2024: cat oncall.md | mdq ':-: * :-: 2024-01-15'

1 ความคิดเห็น

 
GN⁺ 2025-02-24
ความคิดเห็นบน Hacker News
  • GitHub PR เป็นเอกสาร Markdown และบางองค์กรใช้เทมเพลตเฉพาะที่มีเช็กลิสต์ซึ่งผู้รีวิวทุกคนต้องทำให้เสร็จ

    • การบังคับใช้ฟีเจอร์แบบนี้ต้องใช้ regular expression ที่ซับซ้อน ซึ่งเขียนยากและดีบักยิ่งยากกว่า
    • GitHub กำลังโฟกัสที่ AI แทนที่จะพัฒนาฟีเจอร์ที่จำเป็น
    • Bitbucket มีฟีเจอร์ที่สามารถบล็อก PR โดยใช้รายการช่องทำเครื่องหมายนอกกล่องคำอธิบายได้
    • มีวิธีที่ดีกว่าในการแก้ปัญหานี้ และสามารถดูตัวอย่างแรกใน README ของ OP ได้
    • เป็นโปรเจ็กต์ที่เจ๋งมาก และช่วงนี้ฉันเขียน MDX เป็นหลัก เลยคิดว่าน่าจะดีถ้ามีการรองรับภาษาถิ่นนั้น
  • เหตุผลหนึ่งที่ไฟล์ฟอร์แมตแบบข้อความอย่าง Markdown ได้รับความนิยมก็เพราะสามารถวิเคราะห์ด้วย regular expression และจัดการผ่าน version control ได้

  • เวิร์กโฟลว์ของฉันคือผ่าน Pandoc JSON AST แล้วค่อยใช้ Jq

    • วิธีนี้ใช้ได้กับฟอร์แมตอินพุตอื่นด้วย
  • ขอบคุณที่แชร์ จะลองดู

    • ฉันก็อยากได้อะไรคล้าย ๆ แบบนี้อยู่
  • หลังจากลองมาหลายอย่างแล้ว "ระบบจดโน้ต" แบบเดียวที่ฉันยังใช้ต่อคือไดเรกทอรีของไฟล์ Markdown ที่จะ commit เข้า git อัตโนมัติเมื่อมีการเปลี่ยนแปลง

  • ฉันอยากเพิ่มฟีเจอร์ฉลาด ๆ เล็กน้อยเพื่อช่วยติดตามงาน

    • เช่น เก็บกวาดงานที่เสร็จแล้ว ส่งต่องานที่ยังไม่เสร็จไปยังบันทึกประจำวันของวันถัดไป และรวบรวมงานจาก "โปรเจ็กต์" เป็นต้น
    • เพื่อสิ่งนี้ ฉันเริ่มเขียนโค้ด Rust บางส่วนโดยใช้ markdown-rs
    • สำหรับการทำ Markdown แบบ round-trip พร้อมการเปลี่ยนแปลง ตอนนี้มีไลบรารีเวอร์ชัน JavaScript เท่านั้นที่รองรับการ serialize Markdown สไตล์ GitHub
    • ดังนั้นฉันจึงทำ proof of concept โดย dump Markdown AST เป็น JSON จากใน Rust แล้ว serialize ใน JavaScript
    • markdown-rs เก็บข้อมูลตำแหน่งไว้ แต่ไม่ได้เก็บข้อมูล source token
    • เพราะงั้นจึงไม่สามารถทำ round-trip ที่เชื่อถือได้
  • ฉันอยากปฏิบัติต่อเอกสาร Markdown เหมือนเป็นต้นไม้

    • อยากใช้ภาษาคล้าย xpath เพื่อดึง section ออกมาตาม heading
    • ยังไงก็จะลองไปดูโค้ด ขอบคุณที่โพสต์
  • MarkdownDB ให้ SQLite backend สำหรับไฟล์ Markdown

    • รู้สึกว่าโครงสร้างของไฟล์ .md ไม่ค่อยถูกให้ความสำคัญหรือถูกมองเป็นเป้าหมายของการ serialize ข้อมูลอยู่เสมอ
  • ขอบคุณที่แชร์ ตอนนี้ยังไม่มี use case ที่ใช้ได้ทันทีสำหรับฉัน แต่ก็ดีที่รู้ว่ามีของแบบนี้อยู่

  • อยากพูดถึงข้อสังเกตเล็กน้อยเกี่ยวกับ shell call ที่มีการเขียนเอกสารไว้

    • ตัวอย่างเช่น cat example.md | mdq '# usage' สามารถเปลี่ยนเป็นการ redirect ไฟล์เข้า stdin เพื่อหลีกเลี่ยงการเรียกโปรเซส cat ที่ไม่จำเป็น
    • ในทำนองเดียวกัน echo "$ISSUE_TEXT" | mdq -q '- [x] I have searched for existing issues' ก็สามารถหลีกเลี่ยงโปรเซส echo ที่ไม่จำเป็นได้เช่นกัน
  • น่าจะดีถ้าเพิ่มตัวอย่างที่สมจริงกว่านี้ใน README

    • มันจะช่วยคนที่ยังนึก use case ไม่ออกในทันที
  • สิ่งที่น่าสนใจอย่างหนึ่งที่ฉันได้เรียนรู้ระหว่างศึกษาทูลและไลบรารีที่มีอยู่คือ หลายทูลจะ serialize Markdown เป็น HTML ก่อน แล้วค่อยทำการดึง/จัดการแบบมีโครงสร้าง

    • เพราะ Markdown ถูกออกแบบมาให้ serialize เป็น HTML ได้ ดังนั้นเอกสาร Markdown/AST จึงโดยมากไม่ได้เป็นโครงสร้างแบบต้นไม้
    • แต่เป็นอาร์เรย์ขององค์ประกอบตามลำดับที่ปรากฏในเอกสารแทน
    • มีแค่รายการลิสต์และ block quote เท่านั้นที่รองรับการซ้อนกัน
    • ตัวอย่างเช่น h1 -> ย่อหน้า -> h2 -> ย่อหน้า ไม่ได้ซ้อนกัน แต่เป็นอาร์เรย์ขององค์ประกอบที่เรียงลำดับ 4 ตัว
    • ถ้าลองให้ Cursor หรือ Copilot ทดสอบ implementation ที่ใช้ HTML ก็น่าจะช่วยให้พัฒนาได้เร็วขึ้น
  • ดูเหมือนว่าฉันจะเจอทูลนี้ในจังหวะที่ต้องการพอดี

    • น่าจะเหมาะกับงานบางอย่างได้อย่างสมบูรณ์แบบ
  • ขอบคุณ Yuval ที่แชร์ทูลนี้ และขอบคุณที่ใช้ไลเซนส์แบบยืดหยุ่นจนฉันสามารถนำไปใช้ที่ทำงานได้