From d30dfc89bf1b673b2fdc0638766b930adaec228c Mon Sep 17 00:00:00 2001 From: nsfisis Date: Sat, 29 Mar 2025 00:47:55 +0900 Subject: feat(blog/nuldoc): migrate syntax highlighter from highlight.js to shiki.js --- .../reparojson-fix-only-json-formatter/index.html | 113 +++++++++++---------- 1 file changed, 61 insertions(+), 52 deletions(-) (limited to 'vhosts/blog/public/posts/2024-07-19/reparojson-fix-only-json-formatter') diff --git a/vhosts/blog/public/posts/2024-07-19/reparojson-fix-only-json-formatter/index.html b/vhosts/blog/public/posts/2024-07-19/reparojson-fix-only-json-formatter/index.html index c5724274..6fb4f0d0 100644 --- a/vhosts/blog/public/posts/2024-07-19/reparojson-fix-only-json-formatter/index.html +++ b/vhosts/blog/public/posts/2024-07-19/reparojson-fix-only-json-formatter/index.html @@ -14,8 +14,7 @@ reparojson: 文法エラーを直すだけの JSON フォーマッタを作った|REPL: Rest-Eat-Program Loop - - +
@@ -91,17 +90,19 @@ 次のように動作する。

-
$ echo '[ 1 2 ]' | reparojson
-[ 1, 2 ]
-
-$ echo '[ 1, 2, ]' | reparojson
-[ 1, 2 ]
-
-$ echo '{ "foo": 1 "bar": 2 }' | reparojson
-{ "foo": 1, "bar": 2 }
-
-$ echo '{ "foo": 1, "bar": 2, }' | reparojson
-{ "foo": 1, "bar": 2 }
+
+
$ echo '[ 1 2 ]' | reparojson
+[ 1, 2 ]
+
+$ echo '[ 1, 2, ]' | reparojson
+[ 1, 2 ]
+
+$ echo '{ "foo": 1 "bar": 2 }' | reparojson
+{ "foo": 1, "bar": 2 }
+
+$ echo '{ "foo": 1, "bar": 2, }' | reparojson
+{ "foo": 1, "bar": 2 }
+

バージョン 0.1.1 時点で修正対象の文法エラーは次のとおり: @@ -140,33 +141,35 @@ $ echo '{ "foo": 1, "bar": 2, }' | reparojson ここでは、nvim-lspconfigefm-langserver を用いた設定例を紹介する。

-
local lspconfig = require('lspconfig')
-
-lspconfig.efm.setup({
-   init_options = { documentFormatting = true },
-   settings = {
-      rootMarkers = {".git/"},
-      languages = {
-         json = {
-            {
-               formatCommand = "reparojson -q",
-               formatStdin = true,
-            },
-         },
-      },
-   }
-})
-
-vim.api.nvim_create_autocmd('LspAttach', {
-   callback = function(e)
-      vim.api.nvim_create_autocmd('BufWritePre', {
-         buffer = e.buf,
-         callback = function()
-            vim.lsp.buf.format({ async = false })
-         end
-      })
-   end,
-})
+
+
local lspconfig = require('lspconfig')
+
+lspconfig.efm.setup({
+   init_options = { documentFormatting = true },
+   settings = {
+      rootMarkers = {".git/"},
+      languages = {
+         json = {
+            {
+               formatCommand = "reparojson -q",
+               formatStdin = true,
+            },
+         },
+      },
+   }
+})
+
+vim.api.nvim_create_autocmd('LspAttach', {
+   callback = function(e)
+      vim.api.nvim_create_autocmd('BufWritePre', {
+         buffer = e.buf,
+         callback = function()
+            vim.lsp.buf.format({ async = false })
+         end
+      })
+   end,
+})
+

ほとんどは nvim-lspconfig と efm-langserver を使う際のボイラープレートだが、formatCommand-q フラグを指定していることに注意してほしい。このツールは、デフォルトでは JSON が修正された場合 exit code 1 で終了する。これは、入力が最初から正しかった場合と修正して正しくなった場合を区別するためだが、異常終了してしまうと置き換えが発生しない。そのため、-q フラグを指定して、修正されたときも exit code 0 で終了するようにしている。 @@ -179,28 +182,34 @@ vim.api.nvim_create_autocmd('LspAttach' -

{
-   "a": true,
-   "b": false
-}
+
+
{
+   "a": true,
+   "b": false
+}
+

2行目と3行目を入れ換えて以下のように編集した。

-
{
-   "b": false
-   "a": true,
-}
+
+
{
+   "b": false
+   "a": true,
+}
+

これは不正な JSON だが、このツールを通せば次のようになる。

-
{
-   "b": false,
-   "a": true
-}
+
+
{
+   "b": false,
+   "a": true
+}
+

もちろん、このような操作を文法を壊さずにおこなう Vim プラグインは存在する。しかし、単なる行の入れ換えであれば ddp の3ストロークでおこなうことができ、専用のキーバインドを覚える必要もない。このツールを用いることで、より Vimmer-friendly な JSON 編集が可能となる。 -- cgit v1.2.3-70-g09d2