Remove user_options_store dependency

Directly define the ycmd options in the plugin.
This commit is contained in:
micbou 2018-11-25 16:11:00 +01:00
parent 8e33c3c644
commit e651d970ed
No known key found for this signature in database
GPG Key ID: C7E8FD1F3BDA1E05
10 changed files with 202 additions and 83 deletions

View File

@ -200,7 +200,6 @@ ycmd_third_party_folder = p.join( third_party_folder, 'ycmd', 'third_party' )
dependencies = [ p.join( root_folder, 'python' ), dependencies = [ p.join( root_folder, 'python' ),
p.join( third_party_folder, 'requests-futures' ), p.join( third_party_folder, 'requests-futures' ),
p.join( third_party_folder, 'ycmd' ), p.join( third_party_folder, 'ycmd' ),
p.join( ycmd_third_party_folder, 'frozendict' ),
p.join( ycmd_third_party_folder, 'requests' ) ] p.join( ycmd_third_party_folder, 'requests' ) ]
# The concurrent.futures module is part of the standard library on Python 3. # The concurrent.futures module is part of the standard library on Python 3.

View File

@ -72,11 +72,26 @@ endif
let g:loaded_youcompleteme = 1 let g:loaded_youcompleteme = 1
" NOTE: Most defaults are in third_party/ycmd/ycmd/default_settings.json. They "
" are loaded into Vim globals with the 'ycm_' prefix if such a key does not " List of YCM options.
" already exist; thus, the user can override the defaults. "
" The only defaults that are here are the ones that are only relevant to the YCM let g:ycm_filetype_whitelist =
" Vim client and not the ycmd server. \ get( g:, 'ycm_filetype_whitelist', { "*": 1 } )
let g:ycm_filetype_blacklist =
\ get( g:, 'ycm_filetype_blacklist', {
\ 'tagbar': 1,
\ 'qf': 1,
\ 'notes': 1,
\ 'markdown': 1,
\ 'netrw': 1,
\ 'unite': 1,
\ 'text': 1,
\ 'vimwiki': 1,
\ 'pandoc': 1,
\ 'infolog': 1,
\ 'mail': 1
\ } )
let g:ycm_open_loclist_on_ycm_diags = let g:ycm_open_loclist_on_ycm_diags =
\ get( g:, 'ycm_open_loclist_on_ycm_diags', 1 ) \ get( g:, 'ycm_open_loclist_on_ycm_diags', 1 )
@ -150,12 +165,106 @@ let g:ycm_warning_symbol =
\ get( g:, 'ycm_warning_symbol', \ get( g:, 'ycm_warning_symbol',
\ get( g:, 'syntastic_warning_symbol', '>>' ) ) \ get( g:, 'syntastic_warning_symbol', '>>' ) )
let g:ycm_complete_in_comments =
\ get( g:, 'ycm_complete_in_comments', 0 )
let g:ycm_complete_in_strings =
\ get( g:, 'ycm_complete_in_strings', 1 )
let g:ycm_collect_identifiers_from_tags_files =
\ get( g:, 'ycm_collect_identifiers_from_tags_files', 0 )
let g:ycm_seed_identifiers_with_syntax =
\ get( g:, 'ycm_seed_identifiers_with_syntax', 0 )
let g:ycm_goto_buffer_command = let g:ycm_goto_buffer_command =
\ get( g:, 'ycm_goto_buffer_command', 'same-buffer' ) \ get( g:, 'ycm_goto_buffer_command', 'same-buffer' )
let g:ycm_disable_for_files_larger_than_kb = let g:ycm_disable_for_files_larger_than_kb =
\ get( g:, 'ycm_disable_for_files_larger_than_kb', 1000 ) \ get( g:, 'ycm_disable_for_files_larger_than_kb', 1000 )
"
" List of ycmd options.
"
let g:ycm_filepath_completion_use_working_dir =
\ get( g:, 'ycm_filepath_completion_use_working_dir', 0 )
let g:ycm_auto_trigger =
\ get( g:, 'ycm_auto_trigger', 1 )
let g:ycm_min_num_of_chars_for_completion =
\ get( g:, 'ycm_min_num_of_chars_for_completion', 2 )
let g:ycm_min_identifier_candidate_chars =
\ get( g:, 'ycm_min_num_identifier_candidate_chars', 0 )
let g:ycm_semantic_triggers =
\ get( g:, 'ycm_semantic_triggers', {} )
let g:ycm_filetype_specific_completion_to_disable =
\ get( g:, 'ycm_filetype_specific_completion_to_disable',
\ { 'gitcommit': 1 } )
let g:ycm_collect_identifiers_from_comments_and_strings =
\ get( g:, 'ycm_collect_identifiers_from_comments_and_strings', 0 )
let g:ycm_max_num_identifier_candidates =
\ get( g:, 'ycm_max_num_identifier_candidates', 10 )
let g:ycm_max_num_candidates =
\ get( g:, 'ycm_max_num_candidates', 50 )
let g:ycm_extra_conf_globlist =
\ get( g:, 'ycm_extra_conf_globlist', [] )
let g:ycm_global_ycm_extra_conf =
\ get( g:, 'ycm_global_ycm_extra_conf', '' )
let g:ycm_confirm_extra_conf =
\ get( g:, 'ycm_confirm_extra_conf', 1 )
let g:ycm_max_diagnostics_to_display =
\ get( g:, 'ycm_max_diagnostics_to_display', 30 )
let g:ycm_filepath_blacklist =
\ get( g:, 'ycm_filepath_blacklist', {
\ 'html': 1,
\ 'jsx': 1,
\ 'xml': 1
\ } )
let g:ycm_auto_start_csharp_server =
\ get( g:, 'ycm_auto_start_csharp_server', 1 )
let g:ycm_auto_stop_csharp_server =
\ get( g:, 'ycm_auto_stop_csharp_server', 1 )
let g:ycm_use_ultisnips_completer =
\ get( g:, 'ycm_use_ultisnips_completer', 1 )
let g:ycm_csharp_server_port =
\ get( g:, 'ycm_csharp_server_port', 0 )
" These options are not documented.
let g:ycm_gocode_binary_path =
\ get( g:, 'ycm_gocode_binary_path', '' )
let g:ycm_godef_binary_path =
\ get( g:, 'ycm_godef_binary_path', '' )
let g:ycm_rust_src_path =
\ get( g:, 'ycm_rust_src_path', '' )
let g:ycm_racerd_binary_path =
\ get( g:, 'ycm_racerd_binary_path', '' )
let g:ycm_java_jdtls_use_clean_workspace =
\ get( g:, 'ycm_java_jdtls_use_clean_workspace', 1 )
" This option is deprecated.
let g:ycm_python_binary_path =
\ get( g:, 'ycm_python_binary_path', '' )
if has( 'vim_starting' ) " Loading at startup. if has( 'vim_starting' ) " Loading at startup.
" We defer loading until after VimEnter to allow the gui to fork (see " We defer loading until after VimEnter to allow the gui to fork (see
" `:h gui-fork`) and avoid a deadlock situation, as explained here: " `:h gui-fork`) and avoid a deadlock situation, as explained here:

View File

@ -22,38 +22,28 @@ from __future__ import absolute_import
# Not installing aliases from python-future; it's unreliable and slow. # Not installing aliases from python-future; it's unreliable and slow.
from builtins import * # noqa from builtins import * # noqa
from future.utils import iteritems
from ycm import vimsupport from ycm import vimsupport
from ycmd import user_options_store
from ycmd import identifier_utils from ycmd import identifier_utils
YCM_VAR_PREFIX = 'ycm_' YCM_VAR_PREFIX = 'ycm_'
def BuildServerConf(): def GetUserOptions():
"""Builds a dictionary mapping YCM Vim user options to values. Option names """Builds a dictionary mapping YCM Vim user options to values. Option names
don't have the 'ycm_' prefix.""" don't have the 'ycm_' prefix."""
# We only evaluate the keys of the vim globals and not the whole dictionary # We only evaluate the keys of the vim globals and not the whole dictionary
# to avoid unicode issues. # to avoid unicode issues.
# See https://github.com/Valloric/YouCompleteMe/pull/2151 for details. # See https://github.com/Valloric/YouCompleteMe/pull/2151 for details.
keys = vimsupport.GetVimGlobalsKeys() keys = vimsupport.GetVimGlobalsKeys()
server_conf = {} user_options = {}
for key in keys: for key in keys:
if not key.startswith( YCM_VAR_PREFIX ): if not key.startswith( YCM_VAR_PREFIX ):
continue continue
new_key = key[ len( YCM_VAR_PREFIX ): ] new_key = key[ len( YCM_VAR_PREFIX ): ]
new_value = vimsupport.VimExpressionToPythonType( 'g:' + key ) new_value = vimsupport.VimExpressionToPythonType( 'g:' + key )
server_conf[ new_key ] = new_value user_options[ new_key ] = new_value
return server_conf return user_options
def LoadJsonDefaultsIntoVim():
defaults = user_options_store.DefaultOptions()
for key, value in iteritems( defaults ):
new_key = 'g:ycm_' + key
if not vimsupport.VariableExists( new_key ):
vimsupport.SetVariableValue( new_key, value )
def CurrentIdentifierFinished(): def CurrentIdentifierFinished():

View File

@ -34,10 +34,14 @@ def _EnsureBackwardsCompatibility( arguments ):
class CommandRequest( BaseRequest ): class CommandRequest( BaseRequest ):
def __init__( self, arguments, extra_data = None ): def __init__( self,
arguments,
buffer_command = 'same-buffer',
extra_data = None ):
super( CommandRequest, self ).__init__() super( CommandRequest, self ).__init__()
self._arguments = _EnsureBackwardsCompatibility( arguments ) self._arguments = _EnsureBackwardsCompatibility( arguments )
self._command = arguments and arguments[ 0 ] self._command = arguments and arguments[ 0 ]
self._buffer_command = buffer_command
self._extra_data = extra_data self._extra_data = extra_data
self._response = None self._response = None
@ -91,7 +95,8 @@ class CommandRequest( BaseRequest ):
vimsupport.JumpToLocation( self._response[ 'filepath' ], vimsupport.JumpToLocation( self._response[ 'filepath' ],
self._response[ 'line_num' ], self._response[ 'line_num' ],
self._response[ 'column_num' ], self._response[ 'column_num' ],
modifiers ) modifiers,
self._buffer_command )
def _HandleFixitResponse( self ): def _HandleFixitResponse( self ):
@ -129,8 +134,11 @@ class CommandRequest( BaseRequest ):
vimsupport.WriteToPreviewWindow( self._response[ 'detailed_info' ] ) vimsupport.WriteToPreviewWindow( self._response[ 'detailed_info' ] )
def SendCommandRequest( arguments, modifiers, extra_data = None ): def SendCommandRequest( arguments,
request = CommandRequest( arguments, extra_data ) modifiers,
buffer_command,
extra_data = None ):
request = CommandRequest( arguments, buffer_command, extra_data )
# This is a blocking call. # This is a blocking call.
request.Start() request.Start()
request.RunPostCommandActionsIfNeeded( modifiers ) request.RunPostCommandActionsIfNeeded( modifiers )

View File

@ -37,19 +37,28 @@ from ycm.tests import test_utils
from ycm.youcompleteme import YouCompleteMe from ycm.youcompleteme import YouCompleteMe
from ycmd.utils import CloseStandardStreams, WaitUntilProcessIsTerminated from ycmd.utils import CloseStandardStreams, WaitUntilProcessIsTerminated
# The default options which are only relevant to the client, not the server and # The default options which are required for a working YouCompleteMe object.
# thus are not part of default_options.json, but are required for a working
# YouCompleteMe object.
DEFAULT_CLIENT_OPTIONS = { DEFAULT_CLIENT_OPTIONS = {
'g:ycm_server_python_interpreter': '', # YCM options
'g:ycm_log_level': 'info', 'g:ycm_log_level': 'info',
'g:ycm_keep_logfiles': 0, 'g:ycm_keep_logfiles': 0,
'g:ycm_extra_conf_vim_data': [], 'g:ycm_extra_conf_vim_data': [],
'g:ycm_server_python_interpreter': '',
'g:ycm_show_diagnostics_ui': 1, 'g:ycm_show_diagnostics_ui': 1,
'g:ycm_echo_current_diagnostic': 1,
'g:ycm_enable_diagnostic_signs': 1, 'g:ycm_enable_diagnostic_signs': 1,
'g:ycm_enable_diagnostic_highlighting': 0, 'g:ycm_enable_diagnostic_highlighting': 0,
'g:ycm_echo_current_diagnostic': 1,
'g:ycm_always_populate_location_list': 0, 'g:ycm_always_populate_location_list': 0,
'g:ycm_collect_identifiers_from_tags_files': 0,
'g:ycm_seed_identifiers_with_syntax': 0,
'g:ycm_goto_buffer_command': 'same-buffer',
# ycmd options
'g:ycm_auto_trigger': 1,
'g:ycm_min_num_of_chars_for_completion': 2,
'g:ycm_semantic_triggers': {},
'g:ycm_filetype_specific_completion_to_disable': { 'gitcommit': 1 },
'g:ycm_max_num_candidates': 50,
'g:ycm_max_diagnostics_to_display': 30
} }

View File

@ -268,7 +268,8 @@ class Response_Detection_test( object ):
response[ 'filepath' ], response[ 'filepath' ],
response[ 'line_num' ], response[ 'line_num' ],
response[ 'column_num' ], response[ 'column_num' ],
'rightbelow' ) 'rightbelow',
'same-buffer' )
def GoToListTest( command, response ): def GoToListTest( command, response ):
# Note: the detail of these called are tested by # Note: the detail of these called are tested by

View File

@ -43,6 +43,7 @@ def SendCommandRequest_ExtraConfVimData_Works_test( ycm ):
contains( contains(
contains( 'GoTo' ), contains( 'GoTo' ),
'aboveleft', 'aboveleft',
'same-buffer',
has_entries( { has_entries( {
'options': has_entries( { 'options': has_entries( {
'tab_size': 2, 'tab_size': 2,
@ -68,6 +69,7 @@ def SendCommandRequest_ExtraConfData_UndefinedValue_test( ycm ):
contains( contains(
contains( 'GoTo' ), contains( 'GoTo' ),
'belowright', 'belowright',
'same-buffer',
has_entries( { has_entries( {
'options': has_entries( { 'options': has_entries( {
'tab_size': 2, 'tab_size': 2,
@ -88,6 +90,7 @@ def SendCommandRequest_BuildRange_NoVisualMarks_test( ycm, *args ):
send_request.assert_called_once_with( send_request.assert_called_once_with(
[ 'GoTo' ], [ 'GoTo' ],
'', '',
'same-buffer',
{ {
'options': { 'options': {
'tab_size': 2, 'tab_size': 2,
@ -120,6 +123,7 @@ def SendCommandRequest_BuildRange_VisualMarks_test( ycm, *args ):
send_request.assert_called_once_with( send_request.assert_called_once_with(
[ 'GoTo' ], [ 'GoTo' ],
'tab', 'tab',
'same-buffer',
{ {
'options': { 'options': {
'tab_size': 2, 'tab_size': 2,
@ -146,6 +150,7 @@ def SendCommandRequest_IgnoreFileTypeOption_test( ycm, *args ):
expected_args = ( expected_args = (
[ 'GoTo' ], [ 'GoTo' ],
'', '',
'same-buffer',
{ {
'options': { 'options': {
'tab_size': 2, 'tab_size': 2,

View File

@ -1680,8 +1680,6 @@ def InsertNamespace_append_test( vim_current, *args ):
AssertBuffersAreEqualAsBytes( expected_buffer, vim_current.buffer ) AssertBuffersAreEqualAsBytes( expected_buffer, vim_current.buffer )
@patch( 'ycmd.user_options_store._USER_OPTIONS',
{ 'goto_buffer_command': 'same-buffer' } )
@patch( 'vim.command', new_callable = ExtendedMock ) @patch( 'vim.command', new_callable = ExtendedMock )
def JumpToLocation_SameFile_SameBuffer_NoSwapFile_test( vim_command ): def JumpToLocation_SameFile_SameBuffer_NoSwapFile_test( vim_command ):
# No 'u' prefix for the current buffer name string to simulate Vim returning # No 'u' prefix for the current buffer name string to simulate Vim returning
@ -1691,7 +1689,8 @@ def JumpToLocation_SameFile_SameBuffer_NoSwapFile_test( vim_command ):
vimsupport.JumpToLocation( os.path.realpath( u'uni¢𐍈d€' ), vimsupport.JumpToLocation( os.path.realpath( u'uni¢𐍈d€' ),
2, 2,
5, 5,
'aboveleft' ) 'aboveleft',
'same-buffer' )
assert_that( vim.current.window.cursor, equal_to( ( 2, 4 ) ) ) assert_that( vim.current.window.cursor, equal_to( ( 2, 4 ) ) )
vim_command.assert_has_exact_calls( [ vim_command.assert_has_exact_calls( [
@ -1700,15 +1699,13 @@ def JumpToLocation_SameFile_SameBuffer_NoSwapFile_test( vim_command ):
] ) ] )
@patch( 'ycmd.user_options_store._USER_OPTIONS',
{ 'goto_buffer_command': 'same-buffer' } )
@patch( 'vim.command', new_callable = ExtendedMock ) @patch( 'vim.command', new_callable = ExtendedMock )
def JumpToLocation_DifferentFile_SameBuffer_Unmodified_test( vim_command ): def JumpToLocation_DifferentFile_SameBuffer_Unmodified_test( vim_command ):
current_buffer = VimBuffer( 'uni¢𐍈d€' ) current_buffer = VimBuffer( 'uni¢𐍈d€' )
with MockVimBuffers( [ current_buffer ], [ current_buffer ] ) as vim: with MockVimBuffers( [ current_buffer ], [ current_buffer ] ) as vim:
target_name = os.path.realpath( u'different_uni¢𐍈d€' ) target_name = os.path.realpath( u'different_uni¢𐍈d€' )
vimsupport.JumpToLocation( target_name, 2, 5, 'belowright' ) vimsupport.JumpToLocation( target_name, 2, 5, 'belowright', 'same-buffer' )
assert_that( vim.current.window.cursor, equal_to( ( 2, 4 ) ) ) assert_that( vim.current.window.cursor, equal_to( ( 2, 4 ) ) )
vim_command.assert_has_exact_calls( [ vim_command.assert_has_exact_calls( [
@ -1718,8 +1715,6 @@ def JumpToLocation_DifferentFile_SameBuffer_Unmodified_test( vim_command ):
] ) ] )
@patch( 'ycmd.user_options_store._USER_OPTIONS',
{ 'goto_buffer_command': 'same-buffer' } )
@patch( 'vim.command', new_callable = ExtendedMock ) @patch( 'vim.command', new_callable = ExtendedMock )
def JumpToLocation_DifferentFile_SameBuffer_Modified_CannotHide_test( def JumpToLocation_DifferentFile_SameBuffer_Modified_CannotHide_test(
vim_command ): vim_command ):
@ -1728,7 +1723,7 @@ def JumpToLocation_DifferentFile_SameBuffer_Modified_CannotHide_test(
with MockVimBuffers( [ current_buffer ], [ current_buffer ] ) as vim: with MockVimBuffers( [ current_buffer ], [ current_buffer ] ) as vim:
target_name = os.path.realpath( u'different_uni¢𐍈d€' ) target_name = os.path.realpath( u'different_uni¢𐍈d€' )
vimsupport.JumpToLocation( target_name, 2, 5, 'botright' ) vimsupport.JumpToLocation( target_name, 2, 5, 'botright', 'same-buffer' )
assert_that( vim.current.window.cursor, equal_to( ( 2, 4 ) ) ) assert_that( vim.current.window.cursor, equal_to( ( 2, 4 ) ) )
vim_command.assert_has_exact_calls( [ vim_command.assert_has_exact_calls( [
@ -1738,8 +1733,6 @@ def JumpToLocation_DifferentFile_SameBuffer_Modified_CannotHide_test(
] ) ] )
@patch( 'ycmd.user_options_store._USER_OPTIONS',
{ 'goto_buffer_command': 'same-buffer' } )
@patch( 'vim.command', new_callable = ExtendedMock ) @patch( 'vim.command', new_callable = ExtendedMock )
def JumpToLocation_DifferentFile_SameBuffer_Modified_CanHide_test( def JumpToLocation_DifferentFile_SameBuffer_Modified_CanHide_test(
vim_command ): vim_command ):
@ -1748,7 +1741,7 @@ def JumpToLocation_DifferentFile_SameBuffer_Modified_CanHide_test(
with MockVimBuffers( [ current_buffer ], [ current_buffer ] ) as vim: with MockVimBuffers( [ current_buffer ], [ current_buffer ] ) as vim:
target_name = os.path.realpath( u'different_uni¢𐍈d€' ) target_name = os.path.realpath( u'different_uni¢𐍈d€' )
vimsupport.JumpToLocation( target_name, 2, 5, 'leftabove' ) vimsupport.JumpToLocation( target_name, 2, 5, 'leftabove', 'same-buffer' )
assert_that( vim.current.window.cursor, equal_to( ( 2, 4 ) ) ) assert_that( vim.current.window.cursor, equal_to( ( 2, 4 ) ) )
vim_command.assert_has_exact_calls( [ vim_command.assert_has_exact_calls( [
@ -1758,8 +1751,6 @@ def JumpToLocation_DifferentFile_SameBuffer_Modified_CanHide_test(
] ) ] )
@patch( 'ycmd.user_options_store._USER_OPTIONS',
{ 'goto_buffer_command': 'same-buffer' } )
@patch( 'vim.command', @patch( 'vim.command',
side_effect = [ None, VimError( 'Unknown code' ), None ] ) side_effect = [ None, VimError( 'Unknown code' ), None ] )
def JumpToLocation_DifferentFile_SameBuffer_SwapFile_Unexpected_test( def JumpToLocation_DifferentFile_SameBuffer_SwapFile_Unexpected_test(
@ -1769,13 +1760,15 @@ def JumpToLocation_DifferentFile_SameBuffer_SwapFile_Unexpected_test(
with MockVimBuffers( [ current_buffer ], [ current_buffer ] ): with MockVimBuffers( [ current_buffer ], [ current_buffer ] ):
assert_that( assert_that(
calling( vimsupport.JumpToLocation ).with_args( calling( vimsupport.JumpToLocation ).with_args(
os.path.realpath( u'different_uni¢𐍈d€' ), 2, 5, 'rightbelow' ), os.path.realpath( u'different_uni¢𐍈d€' ),
2,
5,
'rightbelow',
'same-buffer' ),
raises( VimError, 'Unknown code' ) raises( VimError, 'Unknown code' )
) )
@patch( 'ycmd.user_options_store._USER_OPTIONS',
{ 'goto_buffer_command': 'same-buffer' } )
@patch( 'vim.command', @patch( 'vim.command',
new_callable = ExtendedMock, new_callable = ExtendedMock,
side_effect = [ None, VimError( 'E325' ), None ] ) side_effect = [ None, VimError( 'E325' ), None ] )
@ -1784,7 +1777,7 @@ def JumpToLocation_DifferentFile_SameBuffer_SwapFile_Quit_test( vim_command ):
with MockVimBuffers( [ current_buffer ], [ current_buffer ] ): with MockVimBuffers( [ current_buffer ], [ current_buffer ] ):
target_name = os.path.realpath( u'different_uni¢𐍈d€' ) target_name = os.path.realpath( u'different_uni¢𐍈d€' )
vimsupport.JumpToLocation( target_name, 2, 5, 'topleft' ) vimsupport.JumpToLocation( target_name, 2, 5, 'topleft', 'same-buffer' )
vim_command.assert_has_exact_calls( [ vim_command.assert_has_exact_calls( [
call( 'normal! m\'' ), call( 'normal! m\'' ),
@ -1792,8 +1785,6 @@ def JumpToLocation_DifferentFile_SameBuffer_SwapFile_Quit_test( vim_command ):
] ) ] )
@patch( 'ycmd.user_options_store._USER_OPTIONS',
{ 'goto_buffer_command': 'same-buffer' } )
@patch( 'vim.command', @patch( 'vim.command',
new_callable = ExtendedMock, new_callable = ExtendedMock,
side_effect = [ None, KeyboardInterrupt, None ] ) side_effect = [ None, KeyboardInterrupt, None ] )
@ -1802,7 +1793,7 @@ def JumpToLocation_DifferentFile_SameBuffer_SwapFile_Abort_test( vim_command ):
with MockVimBuffers( [ current_buffer ], [ current_buffer ] ): with MockVimBuffers( [ current_buffer ], [ current_buffer ] ):
target_name = os.path.realpath( u'different_uni¢𐍈d€' ) target_name = os.path.realpath( u'different_uni¢𐍈d€' )
vimsupport.JumpToLocation( target_name, 2, 5, 'vertical' ) vimsupport.JumpToLocation( target_name, 2, 5, 'vertical', 'same-buffer' )
vim_command.assert_has_exact_calls( [ vim_command.assert_has_exact_calls( [
call( 'normal! m\'' ), call( 'normal! m\'' ),
@ -1810,8 +1801,6 @@ def JumpToLocation_DifferentFile_SameBuffer_SwapFile_Abort_test( vim_command ):
] ) ] )
@patch( 'ycmd.user_options_store._USER_OPTIONS',
{ 'goto_buffer_command': 'split-or-existing-window' } )
@patch( 'vim.command', new_callable = ExtendedMock ) @patch( 'vim.command', new_callable = ExtendedMock )
def JumpToLocation_DifferentFile_Split_CurrentTab_NotAlreadyOpened_test( def JumpToLocation_DifferentFile_Split_CurrentTab_NotAlreadyOpened_test(
vim_command ): vim_command ):
@ -1824,7 +1813,11 @@ def JumpToLocation_DifferentFile_Split_CurrentTab_NotAlreadyOpened_test(
target_name = os.path.realpath( u'different_uni¢𐍈d€' ) target_name = os.path.realpath( u'different_uni¢𐍈d€' )
vimsupport.JumpToLocation( target_name, 2, 5, 'aboveleft' ) vimsupport.JumpToLocation( target_name,
2,
5,
'aboveleft',
'split-or-existing-window' )
vim_command.assert_has_exact_calls( [ vim_command.assert_has_exact_calls( [
call( 'normal! m\'' ), call( 'normal! m\'' ),
@ -1833,8 +1826,6 @@ def JumpToLocation_DifferentFile_Split_CurrentTab_NotAlreadyOpened_test(
] ) ] )
@patch( 'ycmd.user_options_store._USER_OPTIONS',
{ 'goto_buffer_command': 'split-or-existing-window' } )
@patch( 'vim.command', new_callable = ExtendedMock ) @patch( 'vim.command', new_callable = ExtendedMock )
def JumpToLocation_DifferentFile_Split_CurrentTab_AlreadyOpened_test( def JumpToLocation_DifferentFile_Split_CurrentTab_AlreadyOpened_test(
vim_command ): vim_command ):
@ -1849,7 +1840,10 @@ def JumpToLocation_DifferentFile_Split_CurrentTab_AlreadyOpened_test(
vim.current.tabpage = current_tab vim.current.tabpage = current_tab
vimsupport.JumpToLocation( os.path.realpath( u'different_uni¢𐍈d€' ), vimsupport.JumpToLocation( os.path.realpath( u'different_uni¢𐍈d€' ),
2, 5, 'belowright' ) 2,
5,
'belowright',
'split-or-existing-window' )
assert_that( vim.current.tabpage, equal_to( current_tab ) ) assert_that( vim.current.tabpage, equal_to( current_tab ) )
assert_that( vim.current.window, equal_to( different_window ) ) assert_that( vim.current.window, equal_to( different_window ) )
@ -1860,8 +1854,6 @@ def JumpToLocation_DifferentFile_Split_CurrentTab_AlreadyOpened_test(
] ) ] )
@patch( 'ycmd.user_options_store._USER_OPTIONS',
{ 'goto_buffer_command': 'split-or-existing-window' } )
@patch( 'vim.command', new_callable = ExtendedMock ) @patch( 'vim.command', new_callable = ExtendedMock )
def JumpToLocation_DifferentFile_Split_AllTabs_NotAlreadyOpened_test( def JumpToLocation_DifferentFile_Split_AllTabs_NotAlreadyOpened_test(
vim_command ): vim_command ):
@ -1870,7 +1862,11 @@ def JumpToLocation_DifferentFile_Split_AllTabs_NotAlreadyOpened_test(
with MockVimBuffers( [ current_buffer ], [ current_buffer ] ): with MockVimBuffers( [ current_buffer ], [ current_buffer ] ):
target_name = os.path.realpath( u'different_uni¢𐍈d€' ) target_name = os.path.realpath( u'different_uni¢𐍈d€' )
vimsupport.JumpToLocation( target_name, 2, 5, 'tab' ) vimsupport.JumpToLocation( target_name,
2,
5,
'tab',
'split-or-existing-window' )
vim_command.assert_has_exact_calls( [ vim_command.assert_has_exact_calls( [
call( 'normal! m\'' ), call( 'normal! m\'' ),
@ -1879,8 +1875,6 @@ def JumpToLocation_DifferentFile_Split_AllTabs_NotAlreadyOpened_test(
] ) ] )
@patch( 'ycmd.user_options_store._USER_OPTIONS',
{ 'goto_buffer_command': 'split-or-existing-window' } )
@patch( 'vim.command', new_callable = ExtendedMock ) @patch( 'vim.command', new_callable = ExtendedMock )
def JumpToLocation_DifferentFile_Split_AllTabs_AlreadyOpened_test( def JumpToLocation_DifferentFile_Split_AllTabs_AlreadyOpened_test(
vim_command ): vim_command ):
@ -1894,7 +1888,10 @@ def JumpToLocation_DifferentFile_Split_AllTabs_AlreadyOpened_test(
with MockVimBuffers( [ current_buffer, different_buffer ], with MockVimBuffers( [ current_buffer, different_buffer ],
[ current_buffer ] ) as vim: [ current_buffer ] ) as vim:
vimsupport.JumpToLocation( os.path.realpath( u'different_uni¢𐍈d€' ), vimsupport.JumpToLocation( os.path.realpath( u'different_uni¢𐍈d€' ),
2, 5, 'tab' ) 2,
5,
'tab',
'split-or-existing-window' )
assert_that( vim.current.tabpage, equal_to( current_tab ) ) assert_that( vim.current.tabpage, equal_to( current_tab ) )
assert_that( vim.current.window, equal_to( different_window ) ) assert_that( vim.current.window, equal_to( different_window ) )
@ -1905,8 +1902,6 @@ def JumpToLocation_DifferentFile_Split_AllTabs_AlreadyOpened_test(
] ) ] )
@patch( 'ycmd.user_options_store._USER_OPTIONS',
{ 'goto_buffer_command': 'new-or-existing-tab' } )
@patch( 'vim.command', new_callable = ExtendedMock ) @patch( 'vim.command', new_callable = ExtendedMock )
def JumpToLocation_DifferentFile_NewOrExistingTab_NotAlreadyOpened_test( def JumpToLocation_DifferentFile_NewOrExistingTab_NotAlreadyOpened_test(
vim_command ): vim_command ):
@ -1915,7 +1910,11 @@ def JumpToLocation_DifferentFile_NewOrExistingTab_NotAlreadyOpened_test(
with MockVimBuffers( [ current_buffer ], [ current_buffer ] ): with MockVimBuffers( [ current_buffer ], [ current_buffer ] ):
target_name = os.path.realpath( u'different_uni¢𐍈d€' ) target_name = os.path.realpath( u'different_uni¢𐍈d€' )
vimsupport.JumpToLocation( target_name, 2, 5, 'aboveleft vertical' ) vimsupport.JumpToLocation( target_name,
2,
5,
'aboveleft vertical',
'new-or-existing-tab' )
vim_command.assert_has_exact_calls( [ vim_command.assert_has_exact_calls( [
call( 'normal! m\'' ), call( 'normal! m\'' ),
@ -1924,8 +1923,6 @@ def JumpToLocation_DifferentFile_NewOrExistingTab_NotAlreadyOpened_test(
] ) ] )
@patch( 'ycmd.user_options_store._USER_OPTIONS',
{ 'goto_buffer_command': 'new-or-existing-tab' } )
@patch( 'vim.command', new_callable = ExtendedMock ) @patch( 'vim.command', new_callable = ExtendedMock )
def JumpToLocation_DifferentFile_NewOrExistingTab_AlreadyOpened_test( def JumpToLocation_DifferentFile_NewOrExistingTab_AlreadyOpened_test(
vim_command ): vim_command ):
@ -1939,7 +1936,10 @@ def JumpToLocation_DifferentFile_NewOrExistingTab_AlreadyOpened_test(
with MockVimBuffers( [ current_buffer, different_buffer ], with MockVimBuffers( [ current_buffer, different_buffer ],
[ current_buffer ] ) as vim: [ current_buffer ] ) as vim:
vimsupport.JumpToLocation( os.path.realpath( u'different_uni¢𐍈d€' ), vimsupport.JumpToLocation( os.path.realpath( u'different_uni¢𐍈d€' ),
2, 5, 'belowright tab' ) 2,
5,
'belowright tab',
'new-or-existing-tab' )
assert_that( vim.current.tabpage, equal_to( current_tab ) ) assert_that( vim.current.tabpage, equal_to( current_tab ) )
assert_that( vim.current.window, equal_to( different_window ) ) assert_that( vim.current.window, equal_to( different_window ) )

View File

@ -31,7 +31,6 @@ import re
from collections import defaultdict, namedtuple from collections import defaultdict, namedtuple
from ycmd.utils import ( ByteOffsetToCodepointOffset, GetCurrentDirectory, from ycmd.utils import ( ByteOffsetToCodepointOffset, GetCurrentDirectory,
JoinLinesAsUnicode, ToBytes, ToUnicode ) JoinLinesAsUnicode, ToBytes, ToUnicode )
from ycmd import user_options_store
BUFFER_COMMAND_MAP = { 'same-buffer' : 'edit', BUFFER_COMMAND_MAP = { 'same-buffer' : 'edit',
'split' : 'split', 'split' : 'split',
@ -511,7 +510,7 @@ def JumpToFile( filename, command, modifiers ):
# Both |line| and |column| need to be 1-based # Both |line| and |column| need to be 1-based
def JumpToLocation( filename, line, column, modifiers ): def JumpToLocation( filename, line, column, modifiers, command ):
# Add an entry to the jumplist # Add an entry to the jumplist
vim.command( "normal! m'" ) vim.command( "normal! m'" )
@ -522,24 +521,22 @@ def JumpToLocation( filename, line, column, modifiers ):
# location, not to the start of the newly opened file. # location, not to the start of the newly opened file.
# Sadly this fails on random occasions and the undesired jump remains in the # Sadly this fails on random occasions and the undesired jump remains in the
# jumplist. # jumplist.
user_command = user_options_store.Value( 'goto_buffer_command' ) if command == 'split-or-existing-window':
if user_command == 'split-or-existing-window':
if 'tab' in modifiers: if 'tab' in modifiers:
if TryJumpLocationInTabs( filename, line, column ): if TryJumpLocationInTabs( filename, line, column ):
return return
elif TryJumpLocationInTab( vim.current.tabpage, filename, line, column ): elif TryJumpLocationInTab( vim.current.tabpage, filename, line, column ):
return return
user_command = 'split' command = 'split'
# This command is kept for backward compatibility. :tab should be used with # This command is kept for backward compatibility. :tab should be used with
# the 'split-or-existing-window' command instead. # the 'split-or-existing-window' command instead.
if user_command == 'new-or-existing-tab': if command == 'new-or-existing-tab':
if TryJumpLocationInTabs( filename, line, column ): if TryJumpLocationInTabs( filename, line, column ):
return return
user_command = 'new-tab' command = 'new-tab'
if not JumpToFile( filename, user_command, modifiers ): if not JumpToFile( filename, command, modifiers ):
return return
vim.current.window.cursor = ( line, column - 1 ) vim.current.window.cursor = ( line, column - 1 )

View File

@ -35,7 +35,7 @@ from ycm import base, paths, vimsupport
from ycm.buffer import ( BufferDict, from ycm.buffer import ( BufferDict,
DIAGNOSTIC_UI_FILETYPES, DIAGNOSTIC_UI_FILETYPES,
DIAGNOSTIC_UI_ASYNC_FILETYPES ) DIAGNOSTIC_UI_ASYNC_FILETYPES )
from ycmd import server_utils, user_options_store, utils from ycmd import server_utils, utils
from ycmd.request_wrap import RequestWrap from ycmd.request_wrap import RequestWrap
from ycm.omni_completer import OmniCompleter from ycm.omni_completer import OmniCompleter
from ycm import syntax_parse from ycm import syntax_parse
@ -133,9 +133,7 @@ class YouCompleteMe( object ):
self._server_is_ready_with_cache = False self._server_is_ready_with_cache = False
self._message_poll_request = None self._message_poll_request = None
base.LoadJsonDefaultsIntoVim() self._user_options = base.GetUserOptions()
user_options_store.SetAll( base.BuildServerConf() )
self._user_options = user_options_store.GetAll()
self._omnicomp = OmniCompleter( self._user_options ) self._omnicomp = OmniCompleter( self._user_options )
self._buffers = BufferDict( self._user_options ) self._buffers = BufferDict( self._user_options )
@ -344,7 +342,10 @@ class YouCompleteMe( object ):
extra_data.update( vimsupport.BuildRange( start_line, end_line ) ) extra_data.update( vimsupport.BuildRange( start_line, end_line ) )
self._AddExtraConfDataIfNeeded( extra_data ) self._AddExtraConfDataIfNeeded( extra_data )
return SendCommandRequest( final_arguments, modifiers, extra_data ) return SendCommandRequest( final_arguments,
modifiers,
self._user_options[ 'goto_buffer_command' ],
extra_data )
def GetDefinedSubcommands( self ): def GetDefinedSubcommands( self ):