mirror of https://github.com/neovim/neovim.git
Compare commits
7 Commits
abeed3ec78
...
60ebd5f468
Author | SHA1 | Date |
---|---|---|
Tom Praschan | 60ebd5f468 | |
zeertzjq | 435dee74bb | |
zeertzjq | 694756252b | |
zeertzjq | e81eb34aa1 | |
zeertzjq | a1568f5df0 | |
zeertzjq | f1f5fb911b | |
tom-anders | f86e3ab804 |
|
@ -8208,6 +8208,10 @@ synconcealed({lnum}, {col}) *synconcealed()*
|
|||
synconcealed(lnum, 5) [1, 'X', 2]
|
||||
synconcealed(lnum, 6) [0, '', 0]
|
||||
|
||||
Note: Doesn't consider |matchadd()| highlighting items,
|
||||
since syntax and matching highlighting are two different
|
||||
mechanisms |syntax-vs-match|.
|
||||
|
||||
synstack({lnum}, {col}) *synstack()*
|
||||
Return a |List|, which is the stack of syntax items at the
|
||||
position {lnum} and {col} in the current window. {lnum} is
|
||||
|
|
|
@ -1434,13 +1434,14 @@ type_definition({options}) *vim.lsp.buf.type_definition()*
|
|||
Parameters: ~
|
||||
• {options} (`vim.lsp.LocationOpts?`) See |vim.lsp.LocationOpts|.
|
||||
|
||||
typehierarchy({kind}) *vim.lsp.buf.typehierarchy()*
|
||||
typehierarchy({kind}, {options}) *vim.lsp.buf.typehierarchy()*
|
||||
Lists all the subtypes or supertypes of the symbol under the cursor in the
|
||||
|quickfix| window. If the symbol can resolve to multiple items, the user
|
||||
can pick one using |vim.ui.select()|.
|
||||
|
||||
Parameters: ~
|
||||
• {kind} (`"subtypes"|"supertypes"`)
|
||||
• {kind} (`"subtypes"|"supertypes"`)
|
||||
• {options} (`vim.lsp.ListOpts?`) See |vim.lsp.ListOpts|.
|
||||
|
||||
workspace_symbol({query}, {options}) *vim.lsp.buf.workspace_symbol()*
|
||||
Lists all symbols in the current workspace in the quickfix window.
|
||||
|
|
|
@ -1375,6 +1375,19 @@ Finally, these constructs are unique to Perl:
|
|||
==============================================================================
|
||||
10. Highlighting matches *match-highlight*
|
||||
|
||||
*syntax-vs-match*
|
||||
Note that the match highlight mechanism is independent
|
||||
of |syntax-highlighting|, which is (usually) a buffer-local
|
||||
highlighting, while matching is window-local, both methods
|
||||
can be freely mixed. Match highlighting functions give you
|
||||
a bit more flexibility in when and how to apply, but are
|
||||
typically only used for temporary highlighting, without strict
|
||||
rules. Both methods can be used to conceal text.
|
||||
|
||||
Thus the matching functions like |matchadd()| won't consider
|
||||
syntax rules and functions like |synconcealed()| and the
|
||||
other way around.
|
||||
|
||||
*:mat* *:match*
|
||||
:mat[ch] {group} /{pattern}/
|
||||
Define a pattern to highlight in the current window. It will
|
||||
|
|
|
@ -3825,7 +3825,9 @@ Whether or not it is actually concealed depends on the value of the
|
|||
'conceallevel' option. The 'concealcursor' option is used to decide whether
|
||||
concealable items in the current line are displayed unconcealed to be able to
|
||||
edit the line.
|
||||
Another way to conceal text is with |matchadd()|.
|
||||
|
||||
Another way to conceal text is with |matchadd()|, but internally this works a
|
||||
bit differently |syntax-vs-match|.
|
||||
|
||||
concealends *:syn-concealends*
|
||||
|
||||
|
@ -3833,7 +3835,9 @@ When the "concealends" argument is given, the start and end matches of
|
|||
the region, but not the contents of the region, are marked as concealable.
|
||||
Whether or not they are actually concealed depends on the setting on the
|
||||
'conceallevel' option. The ends of a region can only be concealed separately
|
||||
in this way when they have their own highlighting via "matchgroup"
|
||||
in this way when they have their own highlighting via "matchgroup". The
|
||||
|synconcealed()| function can be used to retrieve information about conealed
|
||||
items.
|
||||
|
||||
cchar *:syn-cchar*
|
||||
*E844*
|
||||
|
|
|
@ -948,7 +948,7 @@ Syntax and highlighting: *syntax-functions* *highlighting-functions*
|
|||
synIDattr() get a specific attribute of a syntax ID
|
||||
synIDtrans() get translated syntax ID
|
||||
synstack() get list of syntax IDs at a specific position
|
||||
synconcealed() get info about concealing
|
||||
synconcealed() get info about (syntax) concealing
|
||||
diff_hlID() get highlight ID for diff mode at a position
|
||||
matchadd() define a pattern to highlight (a "match")
|
||||
matchaddpos() define a list of positions to highlight
|
||||
|
|
|
@ -9752,6 +9752,10 @@ function vim.fn.synIDtrans(synID) end
|
|||
--- synconcealed(lnum, 5) [1, 'X', 2]
|
||||
--- synconcealed(lnum, 6) [0, '', 0]
|
||||
---
|
||||
--- Note: Doesn't consider |matchadd()| highlighting items,
|
||||
--- since syntax and matching highlighting are two different
|
||||
--- mechanisms |syntax-vs-match|.
|
||||
---
|
||||
--- @param lnum integer
|
||||
--- @param col integer
|
||||
--- @return {[1]: integer, [2]: string, [3]: integer}
|
||||
|
|
|
@ -47,6 +47,16 @@ local function request_with_options(name, params, options)
|
|||
request(name, params, req_handler)
|
||||
end
|
||||
|
||||
local function client_request_with_options(client, name, params, options, bufnr)
|
||||
local req_handler --- @type function?
|
||||
if options then
|
||||
req_handler = function(err, result, ctx, config)
|
||||
local handler = client.handlers[name] or vim.lsp.handlers[name]
|
||||
handler(err, result, ctx, vim.tbl_extend('force', config or {}, options))
|
||||
end
|
||||
end
|
||||
client.request(name, params, req_handler, bufnr)
|
||||
end
|
||||
--- @class vim.lsp.ListOpts
|
||||
---
|
||||
--- list-handler replacing the default handler.
|
||||
|
@ -499,7 +509,8 @@ end
|
|||
--- cursor in the |quickfix| window. If the symbol can resolve to
|
||||
--- multiple items, the user can pick one using |vim.ui.select()|.
|
||||
---@param kind "subtypes"|"supertypes"
|
||||
function M.typehierarchy(kind)
|
||||
---@param options? vim.lsp.ListOpts
|
||||
function M.typehierarchy(kind, options)
|
||||
local method = kind == 'subtypes' and ms.typeHierarchy_subtypes or ms.typeHierarchy_supertypes
|
||||
|
||||
--- Merge results from multiple clients into a single table. Client-ID is preserved.
|
||||
|
@ -534,7 +545,8 @@ function M.typehierarchy(kind)
|
|||
local item = merged_results[1]
|
||||
local client = vim.lsp.get_client_by_id(item[1])
|
||||
if client then
|
||||
client.request(method, { item = item[2] }, nil, bufnr)
|
||||
--- @type lsp.TypeHierarchyItem
|
||||
client_request_with_options(client, method, { item = item[2] }, options, bufnr)
|
||||
else
|
||||
vim.notify(
|
||||
string.format('Client with id=%d disappeared during call hierarchy request', item[1]),
|
||||
|
@ -557,7 +569,7 @@ function M.typehierarchy(kind)
|
|||
local client = vim.lsp.get_client_by_id(item[1])
|
||||
if client then
|
||||
--- @type lsp.TypeHierarchyItem
|
||||
client.request(method, { item = item[2] }, nil, bufnr)
|
||||
client_request_with_options(client, method, { item = item[2] }, options, bufnr)
|
||||
else
|
||||
vim.notify(
|
||||
string.format('Client with id=%d disappeared during call hierarchy request', item[1]),
|
||||
|
|
|
@ -568,7 +568,7 @@ M[ms.callHierarchy_outgoingCalls] = make_call_hierarchy_handler('to')
|
|||
--- Displays type hierarchy in the quickfix window.
|
||||
local function make_type_hierarchy_handler()
|
||||
--- @param result lsp.TypeHierarchyItem[]
|
||||
return function(_, result, ctx, _)
|
||||
return function(_, result, ctx, config)
|
||||
if not result then
|
||||
return
|
||||
end
|
||||
|
@ -593,8 +593,19 @@ local function make_type_hierarchy_handler()
|
|||
col = col + 1,
|
||||
})
|
||||
end
|
||||
vim.fn.setqflist({}, ' ', { title = 'LSP type hierarchy', items = items })
|
||||
api.nvim_command('botright copen')
|
||||
config = config or {}
|
||||
local title = 'LSP type hierarchy'
|
||||
|
||||
if config.loclist then
|
||||
vim.fn.setloclist(0, {}, ' ', { title = title, items = items, context = ctx })
|
||||
api.nvim_command('lopen')
|
||||
elseif config.on_list then
|
||||
assert(type(config.on_list) == 'function', 'on_list is not a function')
|
||||
config.on_list({ title = title, items = items, context = ctx })
|
||||
else
|
||||
vim.fn.setqflist({}, ' ', { title = title, items = items, context = ctx })
|
||||
api.nvim_command('botright copen')
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
@ -47,8 +47,8 @@ typedef struct {
|
|||
#define VALID_VIRTCOL 0x04 // w_virtcol (file col) is valid
|
||||
#define VALID_CHEIGHT 0x08 // w_cline_height and w_cline_folded valid
|
||||
#define VALID_CROW 0x10 // w_cline_row is valid
|
||||
#define VALID_BOTLINE 0x20 // w_botine and w_empty_rows are valid
|
||||
#define VALID_BOTLINE_AP 0x40 // w_botine is approximated
|
||||
#define VALID_BOTLINE 0x20 // w_botline and w_empty_rows are valid
|
||||
#define VALID_BOTLINE_AP 0x40 // w_botline is approximated
|
||||
#define VALID_TOPLINE 0x80 // w_topline is valid (for cursor position)
|
||||
|
||||
// flags for b_flags
|
||||
|
|
|
@ -11621,6 +11621,10 @@ M.funcs = {
|
|||
synconcealed(lnum, 4) [1, 'X', 2]
|
||||
synconcealed(lnum, 5) [1, 'X', 2]
|
||||
synconcealed(lnum, 6) [0, '', 0]
|
||||
|
||||
Note: Doesn't consider |matchadd()| highlighting items,
|
||||
since syntax and matching highlighting are two different
|
||||
mechanisms |syntax-vs-match|.
|
||||
]=],
|
||||
name = 'synconcealed',
|
||||
params = { { 'lnum', 'integer' }, { 'col', 'integer' } },
|
||||
|
|
|
@ -2467,6 +2467,7 @@ void win_init_empty(win_T *wp)
|
|||
wp->w_topline = 1;
|
||||
wp->w_topfill = 0;
|
||||
wp->w_botline = 2;
|
||||
wp->w_valid = 0;
|
||||
wp->w_s = &wp->w_buffer->b_s;
|
||||
}
|
||||
|
||||
|
|
|
@ -4105,4 +4105,16 @@ func Test_SwapExists_set_other_buf_modified()
|
|||
bwipe!
|
||||
endfunc
|
||||
|
||||
func Test_BufEnter_botline()
|
||||
set hidden
|
||||
call writefile(range(10), 'Xxx1', 'D')
|
||||
call writefile(range(20), 'Xxx2', 'D')
|
||||
edit Xxx1
|
||||
edit Xxx2
|
||||
au BufEnter Xxx1 call assert_true(line('w$') > 1)
|
||||
edit Xxx1
|
||||
au! BufEnter Xxx1
|
||||
set hidden&vim
|
||||
endfunc
|
||||
|
||||
" vim: shiftwidth=2 sts=2 expandtab
|
||||
|
|
Loading…
Reference in New Issue