iT邦幫忙

2026 iThome 鐵人賽

DAY 9
0
AI Engineering

[ opencode ] 開源 AI coding agent系列 第 9

09-opencode | LSP 與 formatters:讓 AI 改得更準

  • 分享至 

  • xImage
  •  

! 本篇文章將會介紹 LSP servers 與 formatters,幫 AI 裝上狙擊鏡:精準打擊 :D

TL;DR: https://dev.benben.me/slides/s/ironman-09-lsp-formatters

本篇目標

讀完這篇你會學到:

  • 開啟 LSP 與 formatters(以及為什麼它們預設是關的)
  • 認識內建支援清單與自訂方式
  • 知道什麼時候「不開」反而更好

LSP:給 AI 狙擊鏡

AI 讀 code,如果只把它當「文字」看,就少了型別、定義、引用這些結構資訊。LSP(Language Server Protocol)就是補上這塊:opencode 整合語言 server 之後,diagnostics(診斷資訊)會變成給 agent 的回饋——AI 改壞了型別,語言 server 馬上告訴它,它就會自己修。

開啟方式

LSP 預設關閉。打開只要一行,寫在 opencode.json

{"$schema": "https://opencode.ai/config.json", "lsp": true}

開啟後,當 opencode 開啟某個檔案,會比對副檔名、啟動對應的語言 server(需求滿足的話,很多還會自動安裝)。

內建支援有多廣?

內建清單涵蓋 30+ 語言,挑常見的給你看:TypeScript、gopls(Go)、rust-analyzer、pyright(Python)、eslint、Vue、Svelte、Astro、clangd(C/C++)、Java、Ruby、Elixir……族繁不及備載。

要關掉特定語言或自訂,用物件寫法:

{
  "lsp": {
    "typescript": {"disabled": true}, // 只關 TS 的 LSP
    "custom-lsp": {
      // 自訂 server
      "command": ["custom-lsp-server", "--stdio"],
      "extensions": [".custom"]
    }
  }
}

Formatters:讓 AI 自動瞄準

formatter 處理另一件事:AI 寫完 / 改完檔案,自動跑對應的 formatter 排版,產出直接符合專案格式,不用你再手動 prettier --write

同樣預設關閉,一行打開:

{"$schema": "https://opencode.ai/config.json", "formatter": true}

內建支援 prettier、biome、gofmt、rustfmt、ruff(Python)、shfmt 等。聰明的地方在於它會看專案現有設定:例如 package.json 裡有 prettier,就自動用 prettier 處理對應檔案。

自訂 formatter 也不難,$FILE 佔位符會被換成目標檔案:

{
  "formatter": {
    "custom-markdown-formatter": {
      "command": ["deno", "fmt", "$FILE"],
      "extensions": [".md"]
    }
  }
}

為什麼預設不開?官方的誠實提醒

想想你的 IDE 開大專案時的樣子……

答案官方文件寫得很白:語言 server 會吃記憶體、版本各異、可能跟專案狀態脫鉤、拖慢 agent 流程。很多專案更好的做法是——讓 agent 直接跑 lint / typecheck 的 CLI 指令,把這些指令寫進 AGENTS.md,錯誤一樣會回饋給 AI,而且沒有 LSP 的那些副作用。

所以口訣是:

  • 專案會因為即時診斷明顯受惠 → 開 LSP
  • 已經有順的 lint 流程 → 寫進 AGENTS.md 就好,LSP 不必開

常見問題 / 踩坑記錄

  • Q:開了 LSP 但好像沒作用?
    A:確認該語言的需求有滿足(例如 gopls 要有 go 指令、pyright 要裝在專案裡)。也可檢查是不是被 disabled 或被 "lsp": false 蓋掉。
  • Q:formatter 跟專案的 lint 規則打架?
    A: formatter 排版、lint 抓問題,職責不同但可能互衝。確認兩邊規則同步(例如 prettier 與 eslint 的設定對齊),或關掉內建 formatter 改用專案腳本。
  • Q:不想讓 opencode 自動下載 LSP server?
    A:設環境變數 OPENCODE_DISABLE_LSP_DOWNLOAD=true

小結

  • LSP 給 AI 狙擊鏡(diagnostics 回饋)、formatter 給 AI 自動瞄準(自動排版)
  • 兩者都預設關閉:"lsp": true / "formatter": true 一行開啟
  • 不是開好開滿才叫專業——有時 AGENTS.md 裡一行 lint 指令更省,看各專案的需求

明日預告

Day 10:/share 分享對話,加上新手篇十天總複習——用一個 30 分鐘小專案驗收你學到的一切!


參考資料:


有任何疑問但沒有 iT 邦幫忙帳號,或是想匿名提問?
歡迎到 https://dev.benben.me/q/P3C5U6 提問或加油打氣,沒意外的話會在完賽之後一起回答 :D


上一篇
08-opencode | 個人化你的 TUI:themes、keybinds 與 config
下一篇
10-opencode | /share 分享對話與新手篇總結
系列文
[ opencode ] 開源 AI coding agent24
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言