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 插件

新建用户自定义插件

保存以下代码为 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 进行格式化,效果如下:

json5

插件逻辑非常简单,容错能力非常有限

TODO

生老病死过于平淡,唯有求知聊以慰藉。
原文地址:https://www.cnblogs.com/wangbs95/p/13993783.html