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

    生老病死过于平淡,唯有求知聊以慰藉。
  • 相关阅读:
    ASP.NET Web API 控制器执行过程(一)
    ASP.NET Web API 控制器创建过程(二)
    ASP.NET Web API 控制器创建过程(一)
    ASP.NET Web API WebHost宿主环境中管道、路由
    ASP.NET Web API Selfhost宿主环境中管道、路由
    ASP.NET Web API 管道模型
    ASP.NET Web API 路由对象介绍
    ASP.NET Web API 开篇示例介绍
    ASP.NET MVC 视图(五)
    ASP.NET MVC 视图(四)
  • 原文地址:https://www.cnblogs.com/wangbs95/p/13993783.html
Copyright © 2011-2022 走看看