區塊配色與設定層級
所有自訂值仍寫入 SSMS Unified Settings,不另建設定檔。 工具 → 選項 → SqlAssist → 區塊配對;預設開關見區塊功能。
自訂色彩
| 項目 | 留空時 | 自訂方式 |
|---|---|---|
| 共用基準色 | SSMS 主題強調色 | 輸入 #RRGGBB 或按「選取色彩…」 |
| 全域高亮預設前景/背景 | 自動可讀字色/共用基準色 | 作用於所有配對端點,細項可覆寫 |
| 符號高亮前景/背景 | 繼承全域高亮預設 | 作用於 ( )、識別字的 [ ]、字串 '…'/N'…' |
| 結構導引線 | SSMS 原生設定 | 環境 → 字型與色彩 → 文字編輯器 →「結構輔助線/Structure Guide Lines」→ 背景色 |
有效的自訂前景色保持原 RGB;例如 #FFFFFF 不再被對比校正改為黑色或灰色。 前景留空才自動選色,符號留空則繼承全域設定。高亮背景會依編輯器底色與指定字色調整, 優先讓文字達到 4.5:1,並盡量保留與編輯器底色的 3:1 差異;無法兼得時文字可讀性優先。 因此背景 RGB 不保證與輸入完全相同,高對比模式仍使用系統配對色。 清空恢復自動;格式無效回退自動。高對比忽略自訂色,區間背景停用、端點使用反差配對色。 區間淡底不保證任意 SQL 分類色都達到相同對比,必要時可關閉區間背景而保留端點。
本機 Unified Settings 註冊 schema 沒有色彩型別/內嵌 picker;色彩欄位旁的按鈕使用 Windows 原生 ColorDialog。 按確定才寫入該欄位,取消不變更;寫入失敗會顯示訊息。這是系統原生對話框,外觀由 Windows 管理,不是自製 SSMS 色盤。
導引線本身由 SSMS 繪製,沒有每個 IStructureTag 的個別色彩欄位。上述「結構輔助線」 設定是原生共用設定,會同時影響其他語言/擴充提供的結構線;SqlAssist 不主動覆寫它。 其內部格式鍵為 Block Structure Adornments,顯示名稱已由 SSMS 22 的中英文資源確認。
為何這樣縮排
- 端點高亮排在種類之前,底下放全域預設前背景色;符號留空繼承全域基準值,再做對比校正。
- 納入配對種類:括號、方括號與字串引號底下放符號前背景色;只覆寫有填的通道。
- 區間淡色背景底下放「區塊內也顯示」及「同行背景」。預設只顯示最近一層, 不疊加多層背景,同行背景預設開啟;關閉時跳過同行小區塊,保留外層跨行區塊。
- 結構導引線底下放「補充區塊摺疊」,預設關閉,避免與 SSMS 原生摺疊重複。 它只補足原生缺少的摺疊,不是 SSMS 原生摺疊開關;已有 +/− 時可能看不出差異。
- 共用基準色也供端點、指示條、概覽、提示使用;不能縮排在背景底下,否則關閉背景 就無法替其他仍啟用的功能選色。
- 納入配對種類的括號與 CASE 開關影響所有呈現,不只是高亮;所以不是端點高亮的子項。 關掉種類只篩選顯示,不刪除解析結果,避免外層 END 配錯。
更新與驗收
新預設只影響未儲存的選項,不覆寫使用者偏好。舊「字型與色彩」中的 SqlAssist 區塊背景 不再作為輸入,請把原基準值移至新設定。新增選色命令與 MEF 分類後需依 安裝流程重裝 VSIX,不能只部署 DLL。
Core/Settings/SqlColorPreference 解析色碼;UI/SqlColorPicker 是唯一原生選色入口。 UI/BlockPalette 集中計算;UI/EditorBlockTheme 每個檢視共用凍結筆刷及合併通知。 BlockEndpointTagger 用分類提供真正字色,區間仍用 marker;換色不重新解析 SQL。 格式通知只處理相關鍵,避免自身回寫造成色票重算;最近區塊查詢共用一次結果,祖先篩選 直接沿索引走,不建立清單或捕捉設定的閉包。概覽只重用三個元素,不依區塊行數建立 UI。 跨頁提示只接滑鼠點擊,使用手形及對比校正的連結色,不占用 Tab 焦點或新增快捷鍵。 測試覆蓋多主題、極端自訂色、反覆切換、資源身分、提示按鈕及多 DPI/窄視窗。 WPF 渲染示意在 artifacts/theme-qa/block-qa/,不是 SSMS 實機截圖;驗收見 區塊配對驗收。