From 4f46d262e6967c9c638b40f3b0246d21b7a9b9dc Mon Sep 17 00:00:00 2001 From: nsfisis Date: Wed, 9 Apr 2025 20:29:15 +0900 Subject: feat(blog/nuldoc): rebuild --- .../reparojson-fix-only-json-formatter/index.html | 130 +++++++++------------ 1 file changed, 55 insertions(+), 75 deletions(-) (limited to 'vhosts/blog/public/posts/2024-07-19/reparojson-fix-only-json-formatter/index.html') 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 6fb4f0d0..05050332 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 @@ -65,31 +65,28 @@ NOTE
- この記事は Vim 駅伝 #218 の記事です。 +

+ この記事は Vim 駅伝 #218 の記事です。 +

-
-

欲しかったもの

+

欲しかったもの

- Vim で JSON を編集しているときに、文法エラー (末尾カンマやカンマの不足) のみを修正して一切の整形をおこなわないプラグインが欲しかった。整形も同時におこなうプラグインは見つかっただけでも多数あったのだが、整形しないものは見つけられなかったので自作することにした。 + Vim で JSON を編集しているときに、文法エラー (末尾カンマやカンマの不足) のみを修正して一切の整形をおこなわないプラグインが欲しかった。 整形も同時におこなうプラグインは見つかっただけでも多数あったのだが、整形しないものは見つけられなかったので自作することにした。

-

- なお、作成したツール自体は単体の CLI として動作し、Vim とは無関係に使うことができる。この記事では Neovim と組み合わせる場合の設定を紹介するが、およそ任意のエディタで使えるだろう。 + なお、作成したツール自体は単体の CLI として動作し、Vim とは無関係に使うことができる。 この記事では Neovim と組み合わせる場合の設定を紹介するが、およそ任意のエディタで使えるだろう。

-
-

作ったもの

+

作ったもの

- 作成したものがこちら: ReparoJSON + 作成したものがこちら: ReparoJSON

-

- 次のように動作する。 + 次のように動作する。

-
$ echo '[ 1 2 ]' | reparojson
 [ 1, 2 ]
@@ -103,116 +100,99 @@
 $ echo '{ "foo": 1, "bar": 2, }' | reparojson
 { "foo": 1, "bar": 2 }
-

- バージョン 0.1.1 時点で修正対象の文法エラーは次のとおり: + バージョン 0.1.1 時点で修正対象の文法エラーは次のとおり:

- -

- 他にも自動で直せそうなエラーはいくつか思いつくが (オブジェクトのキーがクォートされていない等)、私自身があまり困っていないので優先度は低い。 + 他にも自動で直せそうなエラーはいくつか思いつくが (オブジェクトのキーがクォートされていない等)、私自身があまり困っていないので優先度は低い。

-
-

Neovim との連携

+

Neovim との連携

- Neovim で JSON ファイルを保存したときに、上記のツールを自動で走らせるように設定する。 + Neovim で JSON ファイルを保存したときに、上記のツールを自動で走らせるように設定する。

-

- ここでは、nvim-lspconfigefm-langserver を用いた設定例を紹介する。 + ここでは、 nvim-lspconfigefm-langserver を用いた設定例を紹介する。

-
-
local lspconfig = require('lspconfig')
+              
   local lspconfig = require('lspconfig')
 
-lspconfig.efm.setup({
-   init_options = { documentFormatting = true },
-   settings = {
-      rootMarkers = {".git/"},
-      languages = {
-         json = {
-            {
-               formatCommand = "reparojson -q",
-               formatStdin = true,
+   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,
-})
+ 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 で終了するようにしている。 + ほとんどは nvim-lspconfig と efm-langserver を使う際のボイラープレートだが、formatCommand-q フラグを指定していることに注意してほしい。 このツールは、デフォルトでは JSON が修正された場合 exit code 1 で終了する。 これは、入力が最初から正しかった場合と修正して正しくなった場合を区別するためだが、異常終了してしまうと置き換えが発生しない。 そのため、-q フラグを指定して、修正されたときも exit code 0 で終了するようにしている。

-
-

おわりに

+

おわりに

- このツールが威力を発揮するのは、行の入れ換え時である。次のような JSON があり、 + このツールが威力を発揮するのは、行の入れ換え時である。次のような JSON があり、

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

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

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

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

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

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

-- cgit v1.2.3-70-g09d2