diff --git a/CHANGELOG.md b/CHANGELOG.md index 66ef381..b73b959 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,12 @@ The format is based on Keep a Changelog and this project adheres to SemVer. ## [Unreleased] +### Changed + +- Logcat severity highlights now default-link to Neovim diagnostic highlight + groups so colorschemes can style them consistently without plugin-specific + overrides. + ## [0.6.0] - 2026-03-25 ### Added diff --git a/lua/android/logcat/highlight.lua b/lua/android/logcat/highlight.lua index a492c8e..bba33c3 100644 --- a/lua/android/logcat/highlight.lua +++ b/lua/android/logcat/highlight.lua @@ -7,6 +7,12 @@ local LEVEL_GROUPS = { I = "AndroidLogcatInfo", D = "AndroidLogcatDebug", } +local HIGHLIGHT_LINKS = { + { group = "AndroidLogcatError", link = "DiagnosticError" }, + { group = "AndroidLogcatWarn", link = "DiagnosticWarn" }, + { group = "AndroidLogcatInfo", link = "DiagnosticInfo" }, + { group = "AndroidLogcatDebug", link = "DiagnosticHint" }, +} local function detect_level(line) if type(line) ~= "string" then @@ -16,10 +22,12 @@ local function detect_level(line) end function M.setup() - vim.api.nvim_set_hl(0, "AndroidLogcatError", { fg = "Red" }) - vim.api.nvim_set_hl(0, "AndroidLogcatWarn", { fg = "Yellow" }) - vim.api.nvim_set_hl(0, "AndroidLogcatInfo", { fg = "Blue" }) - vim.api.nvim_set_hl(0, "AndroidLogcatDebug", { fg = "Green" }) + for _, highlight_link in ipairs(HIGHLIGHT_LINKS) do + vim.api.nvim_set_hl(0, highlight_link.group, { + default = true, + link = highlight_link.link, + }) + end end function M.clear(buf) diff --git a/lua/tests/android/logcat/highlight_test.lua b/lua/tests/android/logcat/highlight_test.lua new file mode 100644 index 0000000..d85353c --- /dev/null +++ b/lua/tests/android/logcat/highlight_test.lua @@ -0,0 +1,53 @@ +local M = {} + +local assert = require("tests.helpers.assert") +local highlight = require("android.logcat.highlight") + +local GROUPS = { + "AndroidLogcatError", + "AndroidLogcatWarn", + "AndroidLogcatInfo", + "AndroidLogcatDebug", +} + +local function clear_groups() + for _, group in ipairs(GROUPS) do + vim.api.nvim_set_hl(0, group, {}) + end +end + +local function assert_link(group, expected) + local definition = vim.api.nvim_get_hl(0, { name = group, link = true }) + + assert.eq(definition.link, expected, group .. " link") +end + +local function links_log_levels_to_diagnostic_groups() + clear_groups() + + highlight.setup() + + assert_link("AndroidLogcatError", "DiagnosticError") + assert_link("AndroidLogcatWarn", "DiagnosticWarn") + assert_link("AndroidLogcatInfo", "DiagnosticInfo") + assert_link("AndroidLogcatDebug", "DiagnosticHint") +end + +local function preserves_user_highlight_overrides() + clear_groups() + vim.api.nvim_set_hl(0, "AndroidLogcatError", { fg = "#123456" }) + + highlight.setup() + + local definition = vim.api.nvim_get_hl(0, { name = "AndroidLogcatError", link = true }) + + assert.eq(definition.link, nil, "override link") + assert.eq(definition.fg, tonumber("123456", 16), "override fg") +end + +function M.run() + links_log_levels_to_diagnostic_groups() + preserves_user_highlight_overrides() +end + +return M