podiumを使ってdocとreadmeを生成する

2023-08-26 @ゴリラ.vim #28

あなたは誰

Name: Omochice
Twitter: @omochicemgr
GitHub: Omochice
Hobby: Vim Deno
$ vim-startuptime -vimpath ~/.local/nvim/bin/nvim
Extra options: []
Measured: 10 times

Total Average: 23.684300 msec
Total Max:     26.716000 msec
Total Min:     21.802000 msec

ヘルプ、引いていますか?

https://vim-jp.org/vimdoc-ja/helphelp.html

:help helphelp

プラグインのドキュメントは2箇所ありうる

  • doc/foo.txt
    • Vim scriptで書かれているプラグインだとこっちが多い?
  • README.md
    • 最近のLuaだとこっちが多い気がする

READMEしかないプラグインのスクリーンショット

Vimmer的には

  • doc/foo.txtだと:help foo.txtで引けて便利

    • Vimでヘルプが見れる、すばらしい
  • プラグインを作る側としては2箇所に同じドキュメントを書くのは面倒

    • README側をsee :h foo.txt more...としておくのも1つの手ではあるが...

最近こんなものが出てきたよ

tani/podium

  • Plain Old Document(POD)で書いた.podファイルを変換
    • HTML
    • Markdown
    • LaTeX
    • Vimdoc

例えば(pod => markdown)

---
name: pod-sample
description: sample pod text
--

=pod

=head1 sample X<sample-index>

sample

=head2 Contents

    Hello gorilla vim!!

=over 0

=item * L<gooogle|https://google.com>

=back

=cut
# sample

sample

## Contents

```
    Hello gorilla vim!!
```

- [gooogle](https://google.com)

例えば(pod => vimdoc)


*pod-sample.txt*                                              sample pod text
=============================================================================
sample ~
                                                               *sample-index*

sample

Contents~

>
    Hello gorilla vim!!
<

- gooogle |https://google.com|


vim:tw=78:ts=8:noet:ft=help:norl:

個人的に気になったところ

  • ハイライトつきコードブロックが出力できない
```vim
:echo 42
```
:echo 42
  • ↑のmarkdownに相当するpodの構文がない
=pod

    ここがコードブロックになる

=cut
```
:echo 42
```

ラッパーを作った

Omochice/podeno

  • highlight.jsとshiki.jsのハイライト言語に対応

  • 現状、pod => Markdownとpod => Vimdocに対応

begin vim

:echo 42

end vim
```vim
:echo 42
```
>
    :echo 42
<

使い方

$ deno install --allow-net --allow-read --allow-write \
    https://pax.deno.dev/Omochice/podeno/cli.ts

$ podeno markdown --in sample.pod

CIでつかう

https://github.com/Omochice/tataku-processor-deepl/blob/main/.github/workflows/doc.yml

要改善点(知見求)

  • インデックス: X<foo>とリンク: L<foo>の扱い

まとめ

  • :helpは便利
  • Vimプラグインのドキュメントはちゃんとやろうとすると2箇所に必要
  • podiumを使うと.podファイル1つから2つのヘルプを生成できる
  • podiumはコードハイライトできない
    • コードブロックにハイライトが付かないのが気になったのでラッパ(podeno)を書いた
    • podenoはまだ課題があるので詳しい人、教えてください 🙇

以下、補足資料

補足: Alternative

自己紹介 - GitHubやってる - VimとDenoがすき - 後はformatterとかlinterとかCIとか

- Vimでヘルプ引いてる? - `:help`でドキュメントがみれる - ヘルプが引けるととても便利 - ここだけでも覚えて帰ってほしい

- helpでプラグインのドキュメントも引ける - Vimでドキュメントと言ったとき、2種類あるよ - doc/下にあるとvimでヘルプがみれて便利だけどgithubでプラグイン漁るときはREADMEに動画とかついてるとわかりやすい - 2種類ドキュメントがある

- たまにどちらかしかないプラグインもある

- MarkdownとVimdocを生成する`podium`というのが最近できた - perlのドキュメント形式のPODのファイルをhtmlとかに変換する - PODだけ書けばそれを変換してドキュメント2つが作れる - Luaで書かれていて、依存がほぼない(luaのランタイムが必要) - webapiでも用意されている

- 例えば、podからmarkdownへの変換はこんな感じ

- 例えば、podからvimdocへの変換はこんな感じ

- markdownだとコードブロックにシンタックスハイライトをつける構文があるが、対応するpodの構文はないので出力したmarkdownのコードブロックにハイライトが付かない - podだとインデントがコードブロックになるが、言語指定ができない

- ハイライトをつけたかったのでラッパを書いた - hilight.jsとshiki.jsで対応しているハイライト言語に対応している - 私が使う前提で書いているのでpod => markdownとvimdocだけ対応している

- Githubのreadmeからの引用 - Denoに依存している - luaのwasmランタイムを内部で呼んでいるのでユーザランドにluaは必要ない

- vimプラグインに対して使う場合、CIで使うのが便利だと思っている - README.podだけ書いておいてCIでMarkdownとVimdocを生成させている

- まだいまいち - リンクの扱いがうまくいっていない - vimdocのドキュメント内リンクを書くとmarkdownで無効なリンクが生成されてしまう