use allowlist and blocklist instead (#847)

* use allowlist and blocklist instead
* add lsp#get_allowed_servers()
This commit is contained in:
Prabir Shrestha
2020-06-26 16:13:09 -07:00
committed by GitHub
parent 9389c28ae2
commit 32fae1f0e9
14 changed files with 69 additions and 55 deletions

View File

@@ -21,7 +21,7 @@ if executable('pyls')
au User lsp_setup call lsp#register_server({
\ 'name': 'pyls',
\ 'cmd': {server_info->['pyls']},
\ 'whitelist': ['python'],
\ 'allowlist': ['python'],
\ })
endif

View File

@@ -151,8 +151,8 @@ endfunction
" @params {server_info} = {
" 'name': 'go-langserver', " requried, must be unique
" 'whitelist': ['go'], " optional, array of filetypes to whitelist, * for all filetypes
" 'blacklist': [], " optional, array of filetypes to blacklist, * for all filetypes,
" 'allowlist': ['go'], " optional, array of filetypes to allow, * for all filetypes
" 'blocklist': [], " optional, array of filetypes to block, * for all filetypes,
" 'cmd': {server_info->['go-langserver]} " function that takes server_info and returns array of cmd and args, return empty if you don't want to start the server
" }
function! lsp#register_server(server_info) abort
@@ -232,7 +232,7 @@ function! s:on_text_document_did_open() abort
" So we should refresh highlights when buffer opened.
call lsp#ui#vim#diagnostics#force_refresh(l:buf)
for l:server_name in lsp#get_whitelisted_servers(l:buf)
for l:server_name in lsp#get_allowed_servers(l:buf)
call s:ensure_flush(l:buf, l:server_name, function('s:fire_lsp_buffer_enabled', [l:server_name, l:buf]))
endfor
endfunction
@@ -245,7 +245,7 @@ function! s:on_text_document_did_save() abort
let l:buf = bufnr('%')
if getbufvar(l:buf, '&buftype') ==# 'terminal' | return | endif
call lsp#log('s:on_text_document_did_save()', l:buf)
for l:server_name in lsp#get_whitelisted_servers(l:buf)
for l:server_name in lsp#get_allowed_servers(l:buf)
if g:lsp_text_document_did_save_delay >= 0
" We delay the callback by one loop iteration as calls to ensure_flush
" can introduce mmap'd file locks that linger on Windows and collide
@@ -802,10 +802,14 @@ function! s:handle_initialize(server_name, data) abort
doautocmd User lsp_server_init
endfunction
" call lsp#get_whitelisted_servers()
" call lsp#get_whitelisted_servers(bufnr('%'))
" call lsp#get_whitelisted_servers('typescript')
function! lsp#get_whitelisted_servers(...) abort
return call(function('lsp#get_allowed_servers'), a:000)
endfunction
" call lsp#get_allowed_servers()
" call lsp#get_allowed_servers(bufnr('%'))
" call lsp#get_allowed_servers('typescript')
function! lsp#get_allowed_servers(...) abort
if a:0 == 0
let l:buffer_filetype = &filetype
else
@@ -821,23 +825,33 @@ function! lsp#get_whitelisted_servers(...) abort
for l:server_name in keys(s:servers)
let l:server_info = s:servers[l:server_name]['server_info']
let l:blacklisted = 0
let l:blocked = 0
if has_key(l:server_info, 'blacklist')
for l:filetype in l:server_info['blacklist']
if has_key(l:server_info, 'blocklist')
let l:blocklistkey = 'blocklist'
else
let l:blocklistkey = 'blacklist'
endif
if has_key(l:server_info, l:blocklistkey)
for l:filetype in l:server_info[l:blocklistkey]
if l:filetype ==? l:buffer_filetype || l:filetype ==# '*'
let l:blacklisted = 1
let l:blocked = 1
break
endif
endfor
endif
if l:blacklisted
if l:blocked
continue
endif
if has_key(l:server_info, 'whitelist')
for l:filetype in l:server_info['whitelist']
if has_key(l:server_info, 'allowlist')
let l:allowlistkey = 'allowlist'
else
let l:allowlistkey = 'whitelist'
endif
if has_key(l:server_info, l:allowlistkey)
for l:filetype in l:server_info[l:allowlistkey]
if l:filetype ==? l:buffer_filetype || l:filetype ==# '*'
let l:active_servers += [l:server_name]
break
@@ -982,7 +996,7 @@ let s:didchange_timer = -1
function! s:add_didchange_queue(buf) abort
if g:lsp_use_event_queue == 0
for l:server_name in lsp#get_whitelisted_servers(a:buf)
for l:server_name in lsp#get_allowed_servers(a:buf)
call s:ensure_flush(a:buf, l:server_name, function('s:Noop'))
endfor
return
@@ -1003,7 +1017,7 @@ function! s:send_didchange_queue(...) abort
if !bufexists(l:buf)
continue
endif
for l:server_name in lsp#get_whitelisted_servers(l:buf)
for l:server_name in lsp#get_allowed_servers(l:buf)
call s:ensure_flush(l:buf, l:server_name, function('s:Noop'))
endfor
endfor

View File

@@ -216,7 +216,7 @@ endfunction
function! s:find_complete_servers() abort
let l:server_names = []
for l:server_name in lsp#get_whitelisted_servers()
for l:server_name in lsp#get_allowed_servers()
let l:init_capabilities = lsp#get_server_capabilities(l:server_name)
if has_key(l:init_capabilities, 'completionProvider')
" TODO: support triggerCharacters

View File

@@ -77,7 +77,7 @@ function! s:tag_view_sub(ctx, method, params) abort
let l:operation = substitute(a:method, '\u', ' \l\0', 'g')
let l:capabilities_func = printf('lsp#capabilities#has_%s_provider(v:val)', substitute(l:operation, ' ', '_', 'g'))
let l:servers = filter(lsp#get_whitelisted_servers(), l:capabilities_func)
let l:servers = filter(lsp#get_allowed_servers(), l:capabilities_func)
if empty(l:servers)
call s:not_supported('retrieving ' . l:operation)
return v:false
@@ -104,7 +104,7 @@ function! s:tag_view(ctx) abort
endfunction
function! s:tag_search(ctx) abort
let l:servers = filter(lsp#get_whitelisted_servers(), 'lsp#capabilities#has_workspace_symbol_provider(v:val)')
let l:servers = filter(lsp#get_allowed_servers(), 'lsp#capabilities#has_workspace_symbol_provider(v:val)')
if empty(l:servers)
call s:not_supported('retrieving workspace symbols')
return v:false

View File

@@ -19,7 +19,7 @@ function! lsp#ui#vim#type_definition(in_preview, ...) abort
endfunction
function! lsp#ui#vim#type_hierarchy() abort
let l:servers = filter(lsp#get_whitelisted_servers(), 'lsp#capabilities#has_type_hierarchy_provider(v:val)')
let l:servers = filter(lsp#get_allowed_servers(), 'lsp#capabilities#has_type_hierarchy_provider(v:val)')
let l:command_id = lsp#_new_command()
if len(l:servers) == 0
@@ -71,7 +71,7 @@ function! s:list_location(method, ctx, ...) abort
let l:operation = substitute(a:method, '\u', ' \l\0', 'g')
let l:capabilities_func = printf('lsp#capabilities#has_%s_provider(v:val)', substitute(l:operation, ' ', '_', 'g'))
let l:servers = filter(lsp#get_whitelisted_servers(), l:capabilities_func)
let l:servers = filter(lsp#get_allowed_servers(), l:capabilities_func)
let l:command_id = lsp#_new_command()
@@ -120,10 +120,10 @@ function! s:rename(server, new_name, pos) abort
endfunction
function! lsp#ui#vim#rename() abort
let l:servers = filter(lsp#get_whitelisted_servers(), 'lsp#capabilities#has_rename_prepare_provider(v:val)')
let l:servers = filter(lsp#get_allowed_servers(), 'lsp#capabilities#has_rename_prepare_provider(v:val)')
let l:prepare_support = 1
if len(l:servers) == 0
let l:servers = filter(lsp#get_whitelisted_servers(), 'lsp#capabilities#has_rename_provider(v:val)')
let l:servers = filter(lsp#get_allowed_servers(), 'lsp#capabilities#has_rename_provider(v:val)')
let l:prepare_support = 0
endif
@@ -153,7 +153,7 @@ function! lsp#ui#vim#rename() abort
endfunction
function! s:document_format(sync) abort
let l:servers = filter(lsp#get_whitelisted_servers(), 'lsp#capabilities#has_document_formatting_provider(v:val)')
let l:servers = filter(lsp#get_allowed_servers(), 'lsp#capabilities#has_document_formatting_provider(v:val)')
let l:command_id = lsp#_new_command()
if len(l:servers) == 0
@@ -196,7 +196,7 @@ endfunction
function! lsp#ui#vim#stop_server(...) abort
let l:name = get(a:000, 0, '')
for l:server in lsp#get_whitelisted_servers()
for l:server in lsp#get_allowed_servers()
if !empty(l:name) && l:server != l:name
continue
endif
@@ -233,7 +233,7 @@ function! s:get_selection_pos(type) abort
endfunction
function! s:document_format_range(sync, type) abort
let l:servers = filter(lsp#get_whitelisted_servers(), 'lsp#capabilities#has_document_range_formatting_provider(v:val)')
let l:servers = filter(lsp#get_allowed_servers(), 'lsp#capabilities#has_document_range_formatting_provider(v:val)')
let l:command_id = lsp#_new_command()
if len(l:servers) == 0
@@ -279,7 +279,7 @@ function! lsp#ui#vim#document_range_format_opfunc(type) abort
endfunction
function! lsp#ui#vim#workspace_symbol() abort
let l:servers = filter(lsp#get_whitelisted_servers(), 'lsp#capabilities#has_workspace_symbol_provider(v:val)')
let l:servers = filter(lsp#get_allowed_servers(), 'lsp#capabilities#has_workspace_symbol_provider(v:val)')
let l:command_id = lsp#_new_command()
if len(l:servers) == 0
@@ -307,7 +307,7 @@ function! lsp#ui#vim#workspace_symbol() abort
endfunction
function! lsp#ui#vim#document_symbol() abort
let l:servers = filter(lsp#get_whitelisted_servers(), 'lsp#capabilities#has_document_symbol_provider(v:val)')
let l:servers = filter(lsp#get_allowed_servers(), 'lsp#capabilities#has_document_symbol_provider(v:val)')
let l:command_id = lsp#_new_command()
if len(l:servers) == 0

View File

@@ -1,7 +1,7 @@
" vint: -ProhibitUnusedVariable
function! lsp#ui#vim#code_action#complete(input, command, len) abort
let l:server_names = filter(lsp#get_whitelisted_servers(), 'lsp#capabilities#has_code_action_provider(v:val)')
let l:server_names = filter(lsp#get_allowed_servers(), 'lsp#capabilities#has_code_action_provider(v:val)')
let l:kinds = []
for l:server_name in l:server_names
let l:kinds += lsp#capabilities#get_code_action_kinds(l:server_name)
@@ -21,7 +21,7 @@ function! lsp#ui#vim#code_action#do(option) abort
let l:sync = get(a:option, 'sync', v:false)
let l:query = get(a:option, 'query', '')
let l:server_names = filter(lsp#get_whitelisted_servers(), 'lsp#capabilities#has_code_action_provider(v:val)')
let l:server_names = filter(lsp#get_allowed_servers(), 'lsp#capabilities#has_code_action_provider(v:val)')
if len(l:server_names) == 0
return lsp#utils#error('Code action not supported for ' . &filetype)
endif

View File

@@ -8,7 +8,7 @@
function! lsp#ui#vim#code_lens#do(option) abort
let l:sync = get(a:option, 'sync', v:false)
let l:server_names = filter(lsp#get_whitelisted_servers(), 'lsp#capabilities#has_code_lens_provider(v:val)')
let l:server_names = filter(lsp#get_allowed_servers(), 'lsp#capabilities#has_code_lens_provider(v:val)')
if len(l:server_names) == 0
return lsp#utils#error('Code lens not supported for ' . &filetype)
endif

View File

@@ -2,7 +2,7 @@ let s:folding_ranges = {}
let s:textprop_name = 'vim-lsp-folding-linenr'
function! s:find_servers() abort
return filter(lsp#get_whitelisted_servers(), 'lsp#capabilities#has_folding_range_provider(v:val)')
return filter(lsp#get_allowed_servers(), 'lsp#capabilities#has_folding_range_provider(v:val)')
endfunction
function! lsp#ui#vim#folding#fold(sync) abort

View File

@@ -3,7 +3,7 @@ function! s:not_supported(what) abort
endfunction
function! lsp#ui#vim#hover#get_hover_under_cursor() abort
let l:servers = filter(lsp#get_whitelisted_servers(), 'lsp#capabilities#has_hover_provider(v:val)')
let l:servers = filter(lsp#get_allowed_servers(), 'lsp#capabilities#has_hover_provider(v:val)')
if len(l:servers) == 0
call s:not_supported('Retrieving hover')

View File

@@ -150,7 +150,7 @@ function! lsp#ui#vim#references#highlight(force_refresh) abort
" Check if any server provides document highlight
let l:capability = 'lsp#capabilities#has_document_highlight_provider(v:val)'
let l:servers = filter(lsp#get_whitelisted_servers(), l:capability)
let l:servers = filter(lsp#get_allowed_servers(), l:capability)
if len(l:servers) == 0
return

View File

@@ -180,7 +180,7 @@ endfunction
" Display scope tree {{{1
function! lsp#ui#vim#semantic#display_scope_tree(...) abort
let l:servers = filter(lsp#get_whitelisted_servers(), 'lsp#capabilities#has_semantic_highlight(v:val)')
let l:servers = filter(lsp#get_allowed_servers(), 'lsp#capabilities#has_semantic_highlight(v:val)')
if len(l:servers) == 0
call lsp#utils#error('Semantic highlighting not supported for ' . &filetype)

View File

@@ -6,7 +6,7 @@ function! s:not_supported(what) abort
endfunction
function! lsp#ui#vim#signature_help#get_signature_help_under_cursor() abort
let l:servers = filter(lsp#get_whitelisted_servers(), 'lsp#capabilities#has_signature_help_provider(v:val)')
let l:servers = filter(lsp#get_allowed_servers(), 'lsp#capabilities#has_signature_help_provider(v:val)')
if len(l:servers) == 0
call s:not_supported('Retrieving signature help')
@@ -132,7 +132,7 @@ function! s:on_text_changed_after(bufnr, timer) abort
" Cache trigger chars since this loop is heavy
let l:chars = get(b:, 'lsp_signature_help_trigger_character', [])
if empty(l:chars)
for l:server_name in lsp#get_whitelisted_servers(a:bufnr)
for l:server_name in lsp#get_allowed_servers(a:bufnr)
let l:chars += lsp#capabilities#get_signature_help_trigger_characters(l:server_name)
endfor
let b:lsp_signature_help_trigger_character = l:chars

View File

@@ -175,7 +175,7 @@ on pyls (https://github.com/palantir/python-language-server)
au User lsp_setup call lsp#register_server({
\ 'name': 'pyls',
\ 'cmd': {server_info->['pyls']},
\ 'whitelist': ['python']
\ 'allowlist': ['python']
\ })
endif
<
@@ -705,8 +705,8 @@ one parameter which is a vim |dict| and is refered to as |vim-lsp-server_info|
au User lsp_setup call lsp#register_server({
\ 'name': 'name-of-server',
\ 'cmd': {server_info->['server-exectuable']},
\ 'whitelist': ['filetype to whitelist'],
\ 'blacklist': ['filetype to blacklist'],
\ 'allowlist': ['filetype to allowlist'],
\ 'blocklist': ['filetype to blocklist'],
\ 'config': {},
\ 'workspace_config': {'param': {'enabled': v:true}},
\ })
@@ -725,8 +725,8 @@ The vim |dict| containing information about the server.
{
'name': 'name of the server',
'cmd': {server_info->['server_executable']},
'whitelist': ['filetype'],
'blacklist': ['filetype'],
'allowlist': ['filetype'],
'blocklist': ['filetype'],
'config': {},
'workspace_config': {},
}
@@ -773,30 +773,30 @@ The vim |dict| containing information about the server.
'cmd': {server_info->
\ [&shell, &shellcmdflag, 'typescript-language-server --stdio']}
<
* whitelist:
* allowlist:
optional
String array of filetypes to run the language server.
Example: >
'whitelist': ['javascript', 'typescript']
'allowlist': ['javascript', 'typescript']
<
'*' is treated as any filetype.
* blacklist:
* blocklist:
optional
String array of filetypes not to run the language server.
Example: >
'blacklist': ['javascript', 'typescript']
'blocklist': ['javascript', 'typescript']
<
'*' is treated as any filetype.
whitelist and blacklist can be used together. The following example
allowlist and blocklist can be used together. The following example
says to run the language server for all filetypes except javascript
and typescript. blacklist always takes higher priority over whitelist.
and typescript. blocklist always takes higher priority over allowlist.
>
'whitelist': ['*']
'blacklist': ['javascript', 'typescript']
'allowlist': ['*']
'blocklist': ['javascript', 'typescript']
<
* workspace_config:
optional vim |dict|
@@ -1022,7 +1022,7 @@ This method is mainly used to generate 'root_uri' when registering server.
\ ['.ccls', 'compile_commands.json', '.git/']
\ ))},
\ 'initialization_options': {},
\ 'whitelist': ['c', 'cpp', 'objc', 'objcpp', 'cc'],
\ 'allowlist': ['c', 'cpp', 'objc', 'objcpp', 'cc'],
\ })
endif
<
@@ -1519,7 +1519,7 @@ Suppose we want to highlight classes using |Identifier| and functions using
autocmd User lsp_setup call lsp#register_server({
\ 'name': 'eclipse.jdt.ls',
\ 'cmd': {server_info->[...]},
\ 'whitelist': ['java'],
\ 'allowlist': ['java'],
\ 'semantic_highlight': {
\ 'entity.name.type.class.java': 'Identifier',
\ 'entity.name.function.java': 'Label'
@@ -1533,7 +1533,7 @@ want function calls to still use the |Label| group, but use |Identifier| for
autocmd User lsp_setup call lsp#register_server({
\ 'name': 'eclipse.jdt.ls',
\ 'cmd': {server_info->[...]},
\ 'whitelist': ['java'],
\ 'allowlist': ['java'],
\ 'semantic_highlight': {
\ 'entity.name.type.class.java': 'Identifier',
\ 'entity.name.function.java': {

View File

@@ -30,6 +30,6 @@ if executable('pyls')
au User lsp_setup call lsp#register_server({
\ 'name': 'pyls',
\ 'cmd': {server_info->['pyls']},
\ 'whitelist': ['python'],
\ 'allowlist': ['python'],
\ })
endif