From 040582c1074ae5940fa00c69c127f8818c38ef03 Mon Sep 17 00:00:00 2001 From: micbou Date: Fri, 28 Sep 2018 22:06:26 +0200 Subject: [PATCH] Add minimal dependencies to Python path Only add pythonfutures on Python 2. The concurrent.futures module is part of the standard library on Python 3. --- .ycm_extra_conf.py | 29 +++++++++++++++++------------ autoload/youcompleteme.vim | 31 +++++++++++++++++++++---------- 2 files changed, 38 insertions(+), 22 deletions(-) diff --git a/.ycm_extra_conf.py b/.ycm_extra_conf.py index 51ca11bf..9c34bbae 100755 --- a/.ycm_extra_conf.py +++ b/.ycm_extra_conf.py @@ -29,6 +29,7 @@ # For more information, please refer to import os +import subprocess DIR_OF_THIS_SCRIPT = os.path.abspath( os.path.dirname( __file__ ) ) DIR_OF_THIRD_PARTY = os.path.join( DIR_OF_THIS_SCRIPT, 'third_party' ) @@ -46,19 +47,23 @@ def GetStandardLibraryIndexInSysPath( sys_path ): def PythonSysPath( **kwargs ): sys_path = kwargs[ 'sys_path' ] - for folder in os.listdir( DIR_OF_THIRD_PARTY ): - sys_path.insert( 0, os.path.realpath( os.path.join( DIR_OF_THIRD_PARTY, - folder ) ) ) + dependencies = [ os.path.join( DIR_OF_THIS_SCRIPT, 'python' ), + os.path.join( DIR_OF_THIRD_PARTY, 'requests-futures' ), + os.path.join( DIR_OF_THIRD_PARTY, 'ycmd' ), + os.path.join( DIR_OF_YCMD_THIRD_PARTY, 'frozendict' ), + os.path.join( DIR_OF_YCMD_THIRD_PARTY, 'requests' ) ] - for folder in os.listdir( DIR_OF_YCMD_THIRD_PARTY ): - if folder == 'python-future': - folder = os.path.join( folder, 'src' ) - sys_path.insert( GetStandardLibraryIndexInSysPath( sys_path ) + 1, - os.path.realpath( os.path.join( DIR_OF_YCMD_THIRD_PARTY, - folder ) ) ) - continue + # The concurrent.futures module is part of the standard library on Python 3. + interpreter_path = kwargs[ 'interpreter_path' ] + major_version = int( subprocess.check_output( [ + interpreter_path, '-c', 'import sys; print( sys.version_info[ 0 ] )' ] + ).rstrip().decode( 'utf8' ) ) + if major_version == 2: + dependencies.append( os.path.join( DIR_OF_THIRD_PARTY, 'pythonfutures' ) ) - sys_path.insert( 0, os.path.realpath( os.path.join( DIR_OF_YCMD_THIRD_PARTY, - folder ) ) ) + sys_path[ 0:0 ] = dependencies + sys_path.insert( GetStandardLibraryIndexInSysPath( sys_path ) + 1, + os.path.join( DIR_OF_YCMD_THIRD_PARTY, 'python-future', + 'src' ) ) return sys_path diff --git a/autoload/youcompleteme.vim b/autoload/youcompleteme.vim index 64bf5614..4e9d149e 100644 --- a/autoload/youcompleteme.vim +++ b/autoload/youcompleteme.vim @@ -186,23 +186,34 @@ from __future__ import print_function from __future__ import division from __future__ import absolute_import -import os +import os.path as p import sys import traceback import vim -# Add python sources folder to the system path. -script_folder = vim.eval( 's:script_folder_path' ) -sys.path.insert( 0, os.path.join( script_folder, '..', 'python' ) ) -sys.path.insert( 0, os.path.join( script_folder, '..', 'third_party', 'ycmd' ) ) +root_folder = p.normpath( p.join( vim.eval( 's:script_folder_path' ), '..' ) ) +third_party_folder = p.join( root_folder, 'third_party' ) +ycmd_third_party_folder = p.join( third_party_folder, 'ycmd', 'third_party' ) + +# Add dependencies to Python path. +dependencies = [ p.join( root_folder, 'python' ), + p.join( third_party_folder, 'requests-futures' ), + p.join( third_party_folder, 'ycmd' ), + p.join( ycmd_third_party_folder, 'frozendict' ), + p.join( ycmd_third_party_folder, 'requests' ) ] + +# The concurrent.futures module is part of the standard library on Python 3. +if sys.version_info[ 0 ] == 2: + dependencies.append( p.join( third_party_folder, 'pythonfutures' ) ) + +sys.path[ 0:0 ] = dependencies # We enclose this code in a try/except block to avoid backtraces in Vim. try: - from ycmd import server_utils as su - su.AddNearestThirdPartyFoldersToSysPath( script_folder ) - # We need to import ycmd's third_party folders as well since we import and - # use ycmd code in the client. - su.AddNearestThirdPartyFoldersToSysPath( su.__file__ ) + # The python-future module must be inserted after the standard library path. + from ycmd.server_utils import GetStandardLibraryIndexInSysPath + sys.path.insert( GetStandardLibraryIndexInSysPath() + 1, + p.join( ycmd_third_party_folder, 'python-future', 'src' ) ) # Import the modules used in this file. from ycm import base, vimsupport, youcompleteme