From bc6ac461f37dec7de2eb84bab910faf6fd04c0c8 Mon Sep 17 00:00:00 2001 From: Ben Jackson Date: Sun, 17 Sep 2017 00:22:36 +0100 Subject: [PATCH] Always supply working directory This allows completer servers to detect the correct directory to launch no matter what request initialises the completer server. --- python/ycm/client/base_request.py | 5 ++- python/ycm/tests/client/base_request_test.py | 45 ++++++++++++++++++++ python/ycm/youcompleteme.py | 2 - 3 files changed, 49 insertions(+), 3 deletions(-) create mode 100644 python/ycm/tests/client/base_request_test.py diff --git a/python/ycm/client/base_request.py b/python/ycm/client/base_request.py index 5b526366..36a763a6 100644 --- a/python/ycm/client/base_request.py +++ b/python/ycm/client/base_request.py @@ -28,7 +28,7 @@ import json from future.utils import native from base64 import b64decode, b64encode from ycm import vimsupport -from ycmd.utils import ToBytes, urljoin, urlparse +from ycmd.utils import ToBytes, urljoin, urlparse, GetCurrentDirectory from ycmd.hmac_utils import CreateRequestHmac, CreateHmac, SecureBytesEqual from ycmd.responses import ServerError, UnknownExtraConf @@ -156,6 +156,7 @@ def BuildRequestData( filepath = None ): """Build request for the current buffer or the buffer corresponding to |filepath| if specified.""" current_filepath = vimsupport.GetCurrentBufferFilepath() + working_dir = GetCurrentDirectory() if filepath and current_filepath != filepath: # Cursor position is irrelevant when filepath is not the current buffer. @@ -163,6 +164,7 @@ def BuildRequestData( filepath = None ): 'filepath': filepath, 'line_num': 1, 'column_num': 1, + 'working_dir': working_dir, 'file_data': vimsupport.GetUnsavedAndSpecifiedBufferData( filepath ) } @@ -172,6 +174,7 @@ def BuildRequestData( filepath = None ): 'filepath': current_filepath, 'line_num': line + 1, 'column_num': column + 1, + 'working_dir': working_dir, 'file_data': vimsupport.GetUnsavedAndSpecifiedBufferData( current_filepath ) } diff --git a/python/ycm/tests/client/base_request_test.py b/python/ycm/tests/client/base_request_test.py new file mode 100644 index 00000000..a0fa89d5 --- /dev/null +++ b/python/ycm/tests/client/base_request_test.py @@ -0,0 +1,45 @@ +# Copyright (C) 2017 YouCompleteMe Contributors +# +# This file is part of YouCompleteMe. +# +# YouCompleteMe is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# YouCompleteMe is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with YouCompleteMe. If not, see . + +from __future__ import unicode_literals +from __future__ import print_function +from __future__ import division +from __future__ import absolute_import +# Not installing aliases from python-future; it's unreliable and slow. +from builtins import * # noqa + +from ycm.tests.test_utils import MockVimModule +MockVimModule() + +from hamcrest import assert_that, has_entry +from mock import patch +from ycm.client.base_request import BuildRequestData + + +@patch( 'ycm.client.base_request.GetCurrentDirectory', + return_value = '/some/dir' ) +@patch( 'ycm.vimsupport.CurrentLineAndColumn', return_value = ( 1, 1 ) ) +def BuildRequestData_AddWorkingDir_test( *args ): + assert_that( BuildRequestData(), has_entry( 'working_dir', '/some/dir' ) ) + + +@patch( 'ycm.client.base_request.GetCurrentDirectory', + return_value = '/some/dir' ) +@patch( 'ycm.vimsupport.CurrentLineAndColumn', return_value = ( 1, 1 ) ) +def BuildRequestData_AddWorkingDirWithFileName_test( *args ): + assert_that( BuildRequestData( 'foo' ), + has_entry( 'working_dir', '/some/dir' ) ) diff --git a/python/ycm/youcompleteme.py b/python/ycm/youcompleteme.py index c9ef35ed..c68ce645 100644 --- a/python/ycm/youcompleteme.py +++ b/python/ycm/youcompleteme.py @@ -299,8 +299,6 @@ class YouCompleteMe( object ): self._latest_completion_request.Start() return - request_data[ 'working_dir' ] = utils.GetCurrentDirectory() - self._AddExtraConfDataIfNeeded( request_data ) self._latest_completion_request = CompletionRequest( request_data ) self._latest_completion_request.Start()