6P by neo 4일전 | ★ favorite | 댓글 1개
  • mdq는 Markdown 문서에서 특정 부분을 쉽게 찾을 수 있도록 도와주는 도구
  • GitHub PR과 같은 Markdown 문서에서 특정 템플릿이나 체크리스트를 확인할 때 유용
    • 예를 들어, 완료되지 않은 작업을 찾기 위해 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 스케줄을 찾기 위해 테이블을 필터링할 수 있음.
    • Alice의 on-call 날짜를 찾기: cat oncall.md | mdq ':-: /On-Call|Alice/:-: *'
    • 2024년 1월 15일 주의 on-call 인원을 찾기:cat oncall.md | mdq ':-: * :-: 2024-01-15'
Hacker News 의견
  • GitHub PR은 Markdown 문서이며, 일부 조직은 모든 리뷰어가 완료해야 하는 체크리스트가 포함된 특정 템플릿을 사용함

    • 이러한 기능을 강제하려면 복잡한 정규 표현식을 사용해야 하며, 이는 작성하기 어렵고 디버깅하기 더 어려움
    • GitHub는 필요한 기능을 개발하지 않고 AI에 집중하고 있음
    • Bitbucket은 설명 상자 외부에서 체크박스 목록을 사용하여 PR을 차단할 수 있는 기능을 제공함
    • 이 문제를 해결할 더 나은 방법이 있으며, OP의 README에서 첫 번째 예제를 참조할 수 있음
    • 멋진 프로젝트이며, 요즘 주로 MDX를 작성하므로 해당 방언에 대한 지원을 보는 것이 좋을 것 같음
  • Markdown과 같은 텍스트 기반 파일 형식이 인기를 끌었던 이유 중 하나는 정규 표현식으로 분석하고 버전 관리를 통해 관리할 수 있었기 때문임

  • 내 작업 흐름은 Pandoc JSON AST를 통해 진행한 후 Jq를 사용하는 것임

    • 이는 다른 입력 형식에도 작동함
  • 공유해줘서 고맙고, 확인해보겠음

    • 비슷한 것을 원했음
  • 여러 가지를 시도한 후, 내가 계속 사용하고 있는 유일한 "노트 시스템"은 변경 시 자동으로 git에 커밋되는 Markdown 파일의 디렉토리임

  • 약간의 스마트 기능을 추가하여 작업을 추적할 수 있도록 하고 싶었음

    • 예를 들어, 완료된 작업을 정리하고, 완료되지 않은 작업을 다음 날의 저널로 전달하며, "프로젝트"에서 작업을 수집하는 것 등
    • 이를 위해 markdown-rs를 사용하여 일부 Rust 코드를 작성하기 시작했음
    • 변경 사항과 함께 Markdown을 라운드 트립하기 위해 현재 GitHub 스타일의 Markdown을 직렬화하는 라이브러리의 JavaScript 버전만 지원함
    • 그래서 Rust에서 Markdown AST를 JSON으로 덤프하고 JavaScript에서 직렬화하여 개념 증명을 했음
    • markdown-rs는 위치 정보를 저장하지만 소스 토큰 정보를 저장하지 않음
    • 따라서 신뢰할 수 있는 라운드 트립이 불가능함
  • Markdown 문서를 트리로 취급하고 싶었음

    • 헤딩을 기반으로 섹션을 추출하기 위해 xpath와 같은 언어를 사용하고 싶었음
    • 어쨌든 코드를 확인해보겠음, 게시해줘서 고맙음
  • MarkdownDB는 Markdown 파일에 대한 SQLite 백엔드를 제공함

    • .md 파일의 구조가 항상 데이터 직렬화 대상으로 존중되거나 고려되지 않는다고 느낌
  • 공유해줘서 고맙고, 현재 나에게 즉각적인 사용 사례는 없지만 이런 것이 있다는 것을 아는 것이 좋음

  • 문서화된 셸 호출에 대한 작은 지적 사항을 언급하고 싶었음

    • 예를 들어, cat example.md | mdq '# usage'는 불필요한 cat 프로세스를 호출하지 않도록 stdin 파일 리디렉션으로 변경할 수 있음
    • 비슷하게, echo "$ISSUE_TEXT" | mdq -q '- [x] I have searched for existing issues'도 불필요한 echo 프로세스를 피할 수 있음
  • README에 더 현실적인 예제를 추가하면 좋을 것 같음

    • 직관적으로 사용 용도를 알지 못하는 사람에게 도움이 될 것임
  • 기존 도구와 라이브러리를 연구하면서 배운 한 가지 흥미로운 점은 많은 도구가 구조화된 추출/조작을 실행하기 전에 Markdown을 HTML로 직렬화한다는 것임

    • Markdown은 HTML로 직렬화되도록 설계되었기 때문에 Markdown 문서/AST는 주로 트리 구조가 아님
    • 대신 문서에 나타나는 순서대로 요소의 배열임
    • 목록과 블록 인용만 중첩을 지원함
    • 예를 들어, h1 -> 단락 -> h2 -> 단락은 중첩되지 않으며, 네 개의 순서 있는 요소의 배열임
    • Cursor나 Copilot에 HTML을 사용한 구현을 테스트해보면 더 빠르게 개발할 수 있을 것임
  • 이 도구를 딱 필요한 순간에 발견한 것 같음

    • 특정 작업에 완벽하게 적합할 것임
  • Yuval에게 이 도구를 공유해줘서 고맙고, 허용적인 라이선스를 사용해줘서 직장에서 사용할 수 있음에 감사함