-
Notifications
You must be signed in to change notification settings - Fork 3
Termコンポーネントを書くための[[用語]]記法を導入
#898
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Conversation
Deploying utcode-learn with
|
| Latest commit: |
a3a4555
|
| Status: | ✅ Deploy successful! |
| Preview URL: | https://403ab934.utcode-learn.pages.dev |
| Branch Preview URL: | https://add-remark-term.utcode-learn.pages.dev |
e786566 to
8a96283
Compare
5fdced0 to
a0180af
Compare
a0180af to
996b744
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
「JavaScriptことはじめ」の節全体のみに、新しい記法を取り入れました。
| import type { Nodes, Root, RootContent } from "mdast"; | ||
| import { phrasing } from "mdast-util-phrasing"; | ||
|
|
||
| const remarkTerm: Plugin<[], Root> = () => (tree) => transform(tree); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
| @@ -0,0 +1,114 @@ | |||
| import type { Plugin } from "unified"; | |||
| import type { Nodes, Root, RootContent } from "mdast"; | |||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
src/remark/remark-term.ts
Outdated
| continue; | ||
| } | ||
|
|
||
| if (!phrasing(innerElement)) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
MdxJsxTextElement.childrenプロパティの型はArray<PhrasingContent>でありここで絞り込みをする必要があるため、mdast-util-phrasingパッケージのphrasing関数を使用しています。
cf. https://github.com/syntax-tree/mdast-util-mdx-jsx/blob/998d98d0aa29fe9ed12c636ddf1ed39f9a018096/readme.md#mdxjsxtextelement
cf. https://github.com/syntax-tree/mdast-util-phrasing
src/remark/remark-term.ts
Outdated
| } | ||
| if (segmentedText.startsWith("[[")) { | ||
| transformedChildren.push({ | ||
| type: "mdxJsxTextElement", |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Termコンポーネントを表すASTのノードは、MdxJsxTextElementです。
https://github.com/syntax-tree/mdast-util-mdx-jsx/blob/998d98d0aa29fe9ed12c636ddf1ed39f9a018096/readme.md#mdxjsxtextelement
src/remark/remark-term.ts
Outdated
| @@ -0,0 +1,116 @@ | |||
| import type { Plugin } from "unified"; | |||
| import type { Nodes, Root, RootContent } from "mdast"; | |||
| import "mdast-util-mdx-jsx"; | |||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
mdast-util-mdx-jsxによって、mdastの型に、MDX JSXに関する型が拡張されています。
https://github.com/syntax-tree/mdast-util-mdx-jsx/blob/998d98d0aa29fe9ed12c636ddf1ed39f9a018096/index.d.ts#L254-L279
https://github.com/DefinitelyTyped/DefinitelyTyped/blob/86f44b5ee78b2ea5c25b8deb9f6f5d846042cf56/types/mdast/index.d.ts#L301-L307
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ここだけランタイムに不要なインポートが発生しちゃってませんか?
chelproc
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
変換ロジックがやや冗長な気がします。↓みたいな感じでどうでしょう?Rootを特別扱いする必要もない気がします!
childrenを前から順番に走査しながら、
- 非テキストノード → 再帰
(.+)\[\[(.+)\]\](.+)を見つけた → 現在のノードを$1,[[,$2,]],$3に分割して挿入(.+)\[\[を見つけた → 先読みして\]\].+が見つかったら Term を挿入
src/remark/remark-term.ts
Outdated
| @@ -0,0 +1,116 @@ | |||
| import type { Plugin } from "unified"; | |||
| import type { Nodes, Root, RootContent } from "mdast"; | |||
| import "mdast-util-mdx-jsx"; | |||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ここだけランタイムに不要なインポートが発生しちゃってませんか?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Pull request overview
Termコンポーネントを手書き JSX ではなく、Markdown 内の [[用語]] 記法から自動生成できるようにするための remark プラグイン導入PRです。Docusaurus の remarkPlugins に組み込み、既存ドキュメントの一部も新記法へ置き換えています。
Changes:
[[...]]を<Term>...</Term>相当の MDX JSX ノードへ変換するremark-termプラグインを追加- Docusaurus 設定に
remarkTermを追加し、必要な依存関係/型拡張を追加 - サンプルとして JavaScript ドキュメントの
<Term>を[[...]]に置換
Reviewed changes
Copilot reviewed 4 out of 7 changed files in this pull request and generated 3 comments.
Show a summary per file
| File | Description |
|---|---|
| tsconfig.json | TypeScript の strict を有効化 |
| src/types/mdast-mdx-jsx.d.ts | mdast に MDX JSX ノード型を追加するための型拡張 import を追加 |
| src/remark/remark-term.ts | [[...]] を mdxJsxTextElement (Term) に変換する remark プラグインを新規追加 |
| docusaurus.config.ts | docs の remarkPlugins に remarkTerm を追加 |
| package.json | プラグイン実装/型付けに必要な依存を追加 |
| package-lock.json | 依存追加に伴う lockfile 更新 |
| docs/1-trial-session/04-javascript/index.mdx | <Term> を [[...]] 記法へ置換 |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Termコンポーネントを書くための[[用語]]記法を導入しました。この記法にした理由としては、Wikipediaなどでも使用されているようによく使われている直感的な記法であること、入力が極めて容易であること、将来的に記法を拡張する余地があることが挙げられます。仕様は、TSDocの通りで、
[[用語]]のように中身がテキストの場合、あるいは[[**用語**]]のように中身が単一のASTノードである場合のみ、正しくパースされます。参考