zoukankan      html  css  js  c++  java
  • 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

    生老病死过于平淡,唯有求知聊以慰藉。
  • 相关阅读:
    Java中Date日期字符串格式的各种转换
    Redis集群搭建与简单使用
    Java中的Redis应用
    java的linux命令
    Lucene全文检索引擎
    设置Xshell中支持中文
    Java并发Fork-Join框架原理解析
    java线程
    Django-路由层
    Django简介
  • 原文地址:https://www.cnblogs.com/wangbs95/p/13993783.html
Copyright © 2011-2022 走看看