1. 程式人生 > 實用技巧 >sublime外掛——json5格式化工具

sublime外掛——json5格式化工具

前言

最近工作中使用 yapi 做介面定義,其中有 json5 格式定義介面引數和返回值的功能,認為特別方便,相對於在介面填寫或 json-schema各欄位而言:

  • 能夠完全實現json 定義資料結構並且包含註釋。
  • 在對同一個資源的 CRUD 介面中,能靈活複用已定義結構。

在對 json5 編寫過程中,經常需要格式化,普通 json 格式化工具(無論網頁版還是 sublime、idea 外掛)無法對 json5 標準文件格式化。

但是,搜遍全網 json5格式化的庫少之又少,並且基本是對 json5格式的字串格式化為 json,不能保留註釋,不能滿足要求。唯一找到的基本滿足要求的是rust語言實現的

json5format,故利用其命令,實現了 sublime 格式化 json5 的外掛——json5。

基本思路即為 sublime 外掛邏輯作粘合劑,呼叫 json5format 命令進行格式化並替換原文。

本人非 Python 技術棧,所以,外掛編寫基本是用啥查啥,程式碼也許不夠有涯,勿噴。

參考

SUBLIME TEXT 3 中文文件之外掛擴充套件API參考

初識python 檔案讀取 儲存

「Python」6種python中執行shell命令方法

版本

  • sublime 4(build 4087)
  • macos Big Sur 11.0.1

其他版本可以嘗試,應該沒啥相容性問題。

正文

Mac安裝 json5format命令

  • clonejson5format 專案
  • 構建可執行程式
  • mv 到 /usr/local/bin/
  • 賦予執行許可權
(base)  ~  cd ~/RustProject
(base)  ~/RustProject  git clone https://github.com/google/json5format.git
(base)  ~/RustProject  cd json5format
(base)  ~/RustProject/json5format  cargo build --examples
   Compiling json5format v0.1.4 (/Users/wangbaoshan/RustProject/json5format)
    Finished dev [unoptimized + debuginfo] target(s) in 3.15s
(base)  ~/RustProject/json5format  mv ./target/debug/examples/formatjson5 /usr/local/bin/

sublime安裝 json5 外掛

新建外掛

在/Users/wangbaoshan/Library/Application Support/Sublime Text/Packages/User/json5.py

儲存以下程式碼為 json5.py 檔案,並放到 /Users/yourusername/Library/Application Support/Sublime Text/Packages/User/ 下:

import sublime
import sublime_plugin
import os

class Json5Command(sublime_plugin.TextCommand):
	def run(self, edit):
		# 獲取全文
		contents = self.view.substr(sublime.Region(0, self.view.size()))
		# 建立中間資料夾
		os.mkdir('/var/tmp/json5/')
		# 建立中間檔案並寫入全文
		fw = open('/var/tmp/json5/format.json','w')
		fw.write(contents)
		fw.close()
		# 呼叫format命令格式化 json5 並且重寫中間檔案
		os.system("formatjson5 -r /var/tmp/json5/format.json")
		# 讀取中間檔案
		fr = open('/var/tmp/json5/format.json','r')
		formatContents = fr.read()
		# 刪除中間檔案
		os.remove('/var/tmp/json5/format.json')
		# 刪除中間資料夾
		os.rmdir('/var/tmp/json5/')
		# 刪除全文
		self.view.erase(edit, sublime.Region(0, self.view.size()))
		# 插入全文
		self.view.insert(edit, 0,  formatContents)

設定快捷鍵

sublime視窗下:首選項-快捷鍵設定

在調出視窗右側檔案填寫如下文字(可以設定你自己想要的快捷鍵)儲存即可。

[
	{ "keys": ["ctrl+command+5"], "command": "json5" },
]

使用

在正在編輯的tab 下,按ctrl+command+5對正在編輯的 json5 進行格式化。

外掛邏輯非常簡單,容錯能力非常有限

TODO

  • 修改json5format原始碼,保留keyName 雙引號。