当前位置: 首页 > news >正文

HoRain云--OpenCode 格式化工具

🎬 HoRain云小助手:个人主页

🔥 个人专栏: 《Linux 系列教程》《c语言教程》

⛺️生活的理想,就是为了理想的生活!


⛳️ 推荐

前些天发现了一个超棒的服务器购买网站,性价比超高,大内存超划算!忍不住分享一下给大家。点击跳转到网站。

专栏介绍

专栏名称

专栏介绍

《C语言》

本专栏主要撰写C干货内容和编程技巧,让大家从底层了解C,把更多的知识由抽象到简单通俗易懂。

《网络协议》

本专栏主要是注重从底层来给大家一步步剖析网络协议的奥秘,一起解密网络协议在运行中协议的基本运行机制!

《docker容器精解篇》

全面深入解析 docker 容器,从基础到进阶,涵盖原理、操作、实践案例,助您精通 docker。

《linux系列》

本专栏主要撰写Linux干货内容,从基础到进阶,知识由抽象到简单通俗易懂,帮你从新手小白到扫地僧。

《python 系列》

本专栏着重撰写Python相关的干货内容与编程技巧,助力大家从底层去认识Python,将更多复杂的知识由抽象转化为简单易懂的内容。

《试题库》

本专栏主要是发布一些考试和练习题库(涵盖软考、HCIE、HRCE、CCNA等)

目录

⛳️ 推荐

专栏介绍

工作原理

内置格式化工具

配置文件结构

实例

禁用格式化工具

1、禁用所有格式化工具

实例

2、禁用特定格式化工具

实例

自定义格式化工具

1、覆盖内置格式化工具的命令

实例

2、添加自定义格式化工具

实例

3、同时配置多个格式化工具

实例


OpenCode 会在每次写入或编辑文件后,自动使用对应语言的格式化工具对其进行格式化,确保生成的代码始终符合你项目的代码风格。整个过程在后台静默完成,无需任何手动操作。


工作原理

当 OpenCode 写入或编辑文件时,会按以下步骤自动执行格式化:

  1. 检测被写入或编辑的文件扩展名(如.ts.py.go等)
  2. 将扩展名与所有已启用的格式化工具进行匹配
  3. 对该文件运行匹配到的格式化命令
  4. 自动将格式化结果写回文件

例如,如果你的项目package.json中包含prettier依赖,OpenCode 就会自动检测到并在每次编辑.js.ts.css等文件后调用 prettier 进行格式化,无需任何额外配置。


内置格式化工具

OpenCode 内置了覆盖主流语言和框架的格式化工具支持,分为两类:

格式化工具支持的文件扩展名启用要求
air.Rair命令可用
biome.js.jsx.ts.tsx.html.css.md.json.yaml及更多项目中存在biome.jsonbiome.jsonc配置文件
cargofmt.rscargo fmt命令可用
clang-format.c.cpp.h.hpp.ino及更多项目中存在.clang-format配置文件
cljfmt.clj.cljs.cljc.edncljfmt命令可用
dart.dartdart命令可用
dfmt.ddfmt命令可用
gleam.gleamgleam命令可用
gofmt.gogofmt命令可用
htmlbeautifier.erb.html.erbhtmlbeautifier命令可用
ktlint.kt.ktsktlint命令可用
mix.ex.exs.eex.heex.leex.neex.sfacemix命令可用
nixfmt.nixnixfmt命令可用
ocamlformat.ml.mliocamlformat命令可用,且项目中存在.ocamlformat配置文件
ormolu.hsormolu命令可用
oxfmt(实验性).js.jsx.ts.tsxpackage.json中有oxfmt依赖,且设置了对应的实验性环境变量标志
pint.phpcomposer.json中有laravel/pint依赖
prettier.js.jsx.ts.tsx.html.css.md.json.yaml及更多package.json中有prettier依赖
rubocop.rb.rake.gemspec.rurubocop命令可用
ruff.py.pyiruff命令可用且存在相应配置
rustfmt.rsrustfmt命令可用
shfmt.sh.bashshfmt命令可用
standardrb.rb.rake.gemspec.rustandardrb命令可用
terraform.tf.tfvarsterraform命令可用
uv.py.pyiuv命令可用
zig.zig.zonzig命令可用

当多个格式化工具支持同一扩展名时(例如.rs同时被cargofmtrustfmt支持,.rb同时被rubocopstandardrb支持),OpenCode 会根据项目中已安装的工具自动选择。如需明确指定,可通过下方配置禁用不需要的格式化工具。


配置文件结构

格式化工具的自定义配置写在opencode.jsonformatter字段下,键名为格式化工具名称(与内置表格中的名称一致),值为该工具的配置对象:

实例

{
"$schema": "https://opencode.ai/config.json",
"formatter": {
// 格式化工具名称: 配置对象
"prettier": {
// 在此填写 prettier 的配置项
}
}
}

每个格式化工具支持以下配置项:

配置项类型说明
disabledboolean设为true可禁用该格式化工具,其余配置项将被忽略
commandstring[]执行格式化的命令数组。命令中可使用$FILE占位符,运行时会被替换为待格式化文件的完整路径
environmentobject运行格式化工具时注入的环境变量,键值对形式
extensionsstring[]该格式化工具处理的文件扩展名列表(包含.,如".ts"

禁用格式化工具

1、禁用所有格式化工具

如果你不希望 OpenCode 对任何文件进行自动格式化,可以将formatter直接设为false

实例

{
"$schema": "https://opencode.ai/config.json",
"formatter": false // 全局禁用所有格式化工具,文件写入后不会进行任何格式化
}

2、禁用特定格式化工具

如果只需要禁用某一个格式化工具,在对应工具的配置对象中将disabled设为true,其他格式化工具不受影响:

实例

{
"$schema": "https://opencode.ai/config.json",
"formatter": {
"prettier": {
"disabled": true // 仅禁用 prettier,其他格式化工具(如 ruff、gofmt)仍正常工作
}
}
}


自定义格式化工具

通过commandenvironmentextensions配置项,可以覆盖内置格式化工具的默认行为,或添加 OpenCode 尚未内置的格式化工具。

1、覆盖内置格式化工具的命令

例如,为 prettier 指定特定的参数,并限制它只处理特定扩展名:

实例

{
"$schema": "https://opencode.ai/config.json",
"formatter": {
"prettier": {
"command": ["npx", "prettier", "--write", "$FILE"],
// command 数组中的 $FILE 是占位符,运行时会被替换为待格式化文件的完整路径
// 例如实际执行:npx prettier --write /your/project/src/index.ts
"environment": {
"NODE_ENV": "development" // 运行 prettier 时注入的环境变量
},
"extensions": [".js", ".ts", ".jsx", ".tsx"]
// 覆盖默认扩展名:只对这四种文件运行 prettier,不处理 .html、.css 等
}
}
}

2、添加自定义格式化工具

如果你使用的格式化工具不在内置列表中,可以通过指定任意名称来添加。只需提供启动命令和需要处理的文件扩展名即可:

实例

{
"$schema": "https://opencode.ai/config.json",
"formatter": {
"custom-markdown-formatter": { // 自定义名称(任意命名,不与内置工具冲突即可)
"command": ["deno", "fmt", "$FILE"],
// 使用 deno fmt 格式化文件,$FILE 会被替换为实际文件路径
"extensions": [".md"] // 只对 .md 文件运行此格式化工具
}
}
}

3、同时配置多个格式化工具

实例

{
"$schema": "https://opencode.ai/config.json",
"formatter": {
"prettier": {
"command": ["npx", "prettier", "--write", "$FILE"],
"environment": {
"NODE_ENV": "development"
},
"extensions": [".js", ".ts", ".jsx", ".tsx"]
},
"ruff": {
"disabled": true // 项目中不使用 ruff,将其禁用
},
"custom-markdown-formatter": {
"command": ["deno", "fmt", "$FILE"],
"extensions": [".md"]
}
}
}

❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄

💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍

🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙

http://www.zskr.cn/news/1417937.html

相关文章:

  • 2026年一键生成论文工具实测排行,哪款真正适合写论文?
  • 从Sort到DeepSort的平滑升级指南:用Python和YOLOv5复现级联匹配,实测ID保持率提升效果
  • 基于Arduino与MQTT的智能花粉监测系统:从传感器到机械联动的物联网实践
  • 2026年5月市面上旧房翻新公司找哪家厂家推荐榜,旧房翻新、局部改造、全屋整装厂家选择指南 - 海棠依旧大
  • 从医疗诊断到金融风控:混淆矩阵与F1分数在实际业务中到底怎么用?
  • 基于Arduino的自动寻星望远镜DIY:从机电一体化到天文观测实践
  • 【Elasticsearch从入门到精通】第56篇:Elasticsearch写入性能优化——批量写入与异步索引技巧
  • 2026年当下,聚焦麻城芝麻白源头实力与专业服务如何选择 - 2026年企业资讯
  • 基于MPU6050与Arduino的智能自行车转向灯:姿态感知与自动控制
  • Z 芙莉莲S02
  • 告别重复劳动:用KeymouseGo鼠标键盘录制工具实现自动化办公
  • 【字节跳动】seed 基座全套工程源码、锁死配置、自治内核代码泄密
  • 知网AIGC检测升级,2026年比话降论文AI率15%以内实测
  • 为什么你的RAG系统总是答非所问?90%的人都踩了这个坑
  • NPU模拟器搭建与深度学习硬件加速优化实践
  • FPGA轻量级NTT故障检测架构设计与实现
  • 树莓派复古点唱机DIY:融合装饰艺术与可编程LED的音乐播放器
  • 酒店门锁V10SDK接口vb窗口-幽冥大陆(一百28)—东方仙盟
  • 跨域请求测试
  • 手把手配置Aurix Development Studio的lsl文件:让TC397的变量乖乖住进你指定的‘内存房间’
  • Matlab simulink 仿真FOC专题--(Park变换)
  • XRootD在400Gbps高带宽下的性能优化与实践
  • macOS文件预览效率低?QuickLook插件集让您的工作流焕然一新
  • 从零构建复古翻页显示器:Arduino步进电机与激光切割的机械艺术
  • 中兴B860AV1.2刷机避坑指南:S905M-B线刷固件选择、短接失败排查与刷砖救回
  • 别再为Qt程序中文输入发愁了!一份通用的 fcitx5-qt 插件编译指南(覆盖Qt5/Qt6)
  • 终极指南:如何免费重置Navicat Premium 17.x在macOS上的试用期
  • LoRA vs QLoRA实战:4bit量化让GPU显存暴降60%,单卡微调7B模型全流程详解
  • 别再空谈LTV了!用Python实战BG/NBD模型,手把手教你预测用户未来价值
  • [论文学习] 基于 Tile Tensors 的大规模神经网路加密资料框架