Quantumleap
461 words
2 minutes
Denoにシンタックスハイライトをつける

シンタックスハイライト#

シンタックスハイライトとは、コードブロックに書かれたコードに対していい感じに色を付けてくれる仕組みのこと。

これをやるにはコードブロック内のコードの解析が必要なので Javascript の手を借りる必要がありますが、シンタックスハイライトをするためのプラグインというものは既に開発されて普及しており、

あたりが有名なものかと思います。

で、Deno は Prism.js をサポートしているはずなのですが、何故かシンタックスハイライトが効きません。おかしいですね。

main.ts#

// Add syntax highlighting support for C by default
import "https://esm.sh/[email protected]/components/prism-c?no-check";

export { UnoCSS };
export type UnoConfig = typeof UnoCSS extends (
  arg: infer P | undefined
) => unknown
  ? P
  : never;

それもそのはずで、deps.tsを確認してみると、デフォルトで対応しているのは C 言語のみで(一応 js 指定で Javascript などもシンタックスハイライトが効くが ts は効かない)、それ以外はオプショナルだからです。

なお、この章の執筆にあたっては@p1atdev氏にご助力を頂きました。

よって、ユーザーが個別にシンタックスハイライトを効かせたいのであれば、それをmain.tsに伝える必要があります。

で、サポートしている言語についてはGitHubで公開されているので、同じような感じでmain.tsに追記するだけです。

うちのブログではSwift, Python, Typescript, JSONを扱うことが多かったので、

import "https://esm.sh/[email protected]/components/prism-swift.min?no-check";
import "https://esm.sh/[email protected]/components/prism-typescript.min?no-check";
import "https://esm.sh/[email protected]/components/prism-python.min?no-check";
import "https://esm.sh/[email protected]/components/prism-bash.min?no-check";
import "https://esm.sh/[email protected]/components/prism-json.min?no-check";
import "https://esm.sh/[email protected]/components/prism-scheme.min?no-check";

を追記しました。

これで問題なく Typescript などに対してもシンタックスハイライトが効くようになります。シンタックスハイライトが効くか効かないかでコードブロックの可読性に大きく関わるので、うまく対応させられてよかったです。

記事は以上。

Denoにシンタックスハイライトをつける
https://fuwari.vercel.app/posts/2022/08/syntaxhighlight/
Author
tkgling
Published at
2022-08-29