neovim/test/functional/ui/quickfix_spec.lua
Evgeni Chasnovski 64a14026d7
feat(highlight): update default color scheme
Problem: Default color scheme is suboptimal.

Solution: Start using new color scheme. Introduce new `vim` color scheme
for opt-in backward compatibility.

------
Main design ideas
- Be "Neovim branded".
- Be minimal for 256 colors with a bit more shades for true colors.
- Be accessible through high enough contrast ratios.
- Be suitable for dark and light backgrounds via exchange of dark and
  light palettes.

------
Palettes

- Have dark and light variants. Implemented through exporeted
  `NvimDark*` and `NvimLight*` hex colors.

- Palettes have 4 shades of grey for UI elements and 6 colors (red,
  yellow, green, cyan, blue, magenta).

- Actual values are computed procedurally in Oklch color space based on
  a handful of hyperparameters.

- Each color has a 256 colors variant with perceptually closest color.

------
Highlight groups

Use:

- Grey shades for general UI according to their design.

- Bold text for keywords (`Statement` highlight group). This is an
  important choice to increase accessibility for people with color
  deficiencies, as it doesn't rely on actual color.

- Green for strings, `DiffAdd` (as background), `DiagnosticOk`, and some
  minor text UI elements.

- Cyan as main syntax color, i.e. for function usage (`Function`
  highlight group), `DiffText`, `DiagnosticInfo`, and some minor text UI
  elements.

- Red to generally mean high user attention, i.e. errors; in particular
  for `ErrorMsg`, `DiffDelete`, `DiagnosticError`.

- Yellow very sparingly only with true colors to mean mild user
  attention, i.e. warnings. That is, `DiagnosticWarn` and `WarningMsg`.

- Blue very sparingly only with true colors as `DiagnosticHint` and some
  additional important syntax group (like `Identifier`).

- Magenta very carefully (if at all).

------
Notes

- To make tests work without relatively larege updates, each one is
  prepended with an equivalent of the call `:colorscheme vim`.

  Plus some tests which spawn new Neovim instances also now use 'vim'
  color scheme.

  In some cases tests are updated to fit new default color scheme.
2023-12-02 18:53:19 +02:00

197 lines
5.6 KiB
Lua

local helpers = require('test.functional.helpers')(after_each)
local Screen = require('test.functional.ui.screen')
local clear, feed, meths = helpers.clear, helpers.feed, helpers.meths
local insert, command = helpers.insert, helpers.command
describe('quickfix selection highlight', function()
local screen
before_each(function()
clear()
screen = Screen.new(25, 10)
screen:attach()
screen:set_default_attr_ids({
[1] = { bold = true, foreground = Screen.colors.Blue },
[2] = {reverse = true},
[3] = {foreground = Screen.colors.Brown},
[4] = {bold = true, reverse = true},
[5] = {background = Screen.colors.Green},
[6] = {foreground = Screen.colors.Brown, background = Screen.colors.Green},
[7] = {background = Screen.colors.Red},
[8] = {foreground = Screen.colors.Brown, background = Screen.colors.Red},
[9] = {background = Screen.colors.Fuchsia},
[10] = {foreground = Screen.colors.Red, background = Screen.colors.Fuchsia},
[11] = {foreground = Screen.colors.Red},
[12] = {foreground = Screen.colors.Brown, background = Screen.colors.Fuchsia},
})
meths.set_option_value('errorformat', '%m %l', {})
command('syntax on')
command('highlight Search guibg=Green')
insert([[
Line 1
Line 2
Line 3
Line 4
Line 5
]])
command('cad')
feed('gg')
screen:expect([[
^Line 1 |
Line 2 |
Line 3 |
Line 4 |
Line 5 |
|
{1:~ }|
{1:~ }|
{1:~ }|
|
]])
end)
it('using default Search highlight group', function()
command('copen')
screen:expect([[
Line 1 |
{2:[No Name] [+] }|
{5:^|}{6:1}{5:| Line }|
|{3:2}| Line |
|{3:3}| Line |
|{3:4}| Line |
|{3:5}| Line |
|| |
{4:[Quickfix List] }|
|
]])
command('cnext')
screen:expect([[
Line 1 |
{2:[No Name] [+] }|
|{3:1}| Line |
{5:^|}{6:2}{5:| Line }|
|{3:3}| Line |
|{3:4}| Line |
|{3:5}| Line |
|| |
{4:[Quickfix List] }|
|
]])
end)
it('using QuickFixLine highlight group', function()
command('highlight QuickFixLine guibg=Red guifg=NONE gui=NONE')
command('copen')
screen:expect([[
Line 1 |
{2:[No Name] [+] }|
{7:^|}{8:1}{7:| Line }|
|{3:2}| Line |
|{3:3}| Line |
|{3:4}| Line |
|{3:5}| Line |
|| |
{4:[Quickfix List] }|
|
]])
command('cnext')
screen:expect([[
Line 1 |
{2:[No Name] [+] }|
|{3:1}| Line |
{7:^|}{8:2}{7:| Line }|
|{3:3}| Line |
|{3:4}| Line |
|{3:5}| Line |
|| |
{4:[Quickfix List] }|
|
]])
end)
it('combines with CursorLine', function()
command('set cursorline')
command('highlight QuickFixLine guifg=Red guibg=NONE gui=NONE')
command('highlight CursorLine guibg=Fuchsia')
command('copen')
screen:expect([[
{9:Line 1 }|
{2:[No Name] [+] }|
{10:^|1| Line }|
|{3:2}| Line |
|{3:3}| Line |
|{3:4}| Line |
|{3:5}| Line |
|| |
{4:[Quickfix List] }|
|
]])
feed('j')
screen:expect([[
{9:Line 1 }|
{2:[No Name] [+] }|
{11:|1| Line }|
{9:^|}{12:2}{9:| Line }|
|{3:3}| Line |
|{3:4}| Line |
|{3:5}| Line |
|| |
{4:[Quickfix List] }|
|
]])
end)
it('QuickFixLine background takes precedence over CursorLine', function()
command('set cursorline')
command('highlight QuickFixLine guibg=Red guifg=NONE gui=NONE')
command('highlight CursorLine guibg=Fuchsia')
command('copen')
screen:expect([[
{9:Line 1 }|
{2:[No Name] [+] }|
{7:^|}{8:1}{7:| Line }|
|{3:2}| Line |
|{3:3}| Line |
|{3:4}| Line |
|{3:5}| Line |
|| |
{4:[Quickfix List] }|
|
]])
feed('j')
screen:expect([[
{9:Line 1 }|
{2:[No Name] [+] }|
{7:|}{8:1}{7:| Line }|
{9:^|}{12:2}{9:| Line }|
|{3:3}| Line |
|{3:4}| Line |
|{3:5}| Line |
|| |
{4:[Quickfix List] }|
|
]])
end)
end)