@@ -209,49 +209,84 @@ def wrapper(*args, **kwargs):
209
209
return func_receiver
210
210
211
211
212
+ # XXX: might use lru cache, given that you can configure it per buffer?!
212
213
current_environment = (None , None )
213
214
214
215
216
+ def set_environment (executable = None , bufnr = None ):
217
+ global current_environment
218
+
219
+ # print(repr(executable), repr(bufnr))
220
+
221
+ if not executable : # "unset"
222
+ executable = 'auto'
223
+ environment = None
224
+ else :
225
+ try :
226
+ # XXX: create_environment is not deterministic
227
+ # (https://github.com/davidhalter/jedi/issues/1155)
228
+ # jedi.create_environment(executable, safe=False)
229
+ environment = jedi .api .environment .Environment (executable )
230
+ except jedi .InvalidPythonEnvironment as exc :
231
+ echo_highlight ('executable=%s is not supported: %s.' % (
232
+ executable , str (exc )))
233
+ return
234
+ bufnr = int (bufnr )
235
+ if bufnr :
236
+ vim_command ("call setbufvar(%d, 'jedi_use_environment', %r)" % (
237
+ bufnr , executable ))
238
+ else :
239
+ vim_command ("let g:jedi#use_environment = %r" % executable )
240
+ current_environment = (executable , environment )
241
+
242
+
215
243
def get_environment (use_cache = True ):
216
244
global current_environment
217
245
218
- vim_force_python_version = vim_eval ("g:jedi#force_py_version" )
219
- if use_cache and vim_force_python_version == current_environment [0 ]:
246
+ use_environment = vim_eval (
247
+ "get(b:, 'jedi_use_environment', get(g:, 'jedi#use_environment', ''))" )
248
+ if use_cache and use_environment == current_environment [0 ]:
220
249
return current_environment [1 ]
221
250
222
251
environment = None
223
- if vim_force_python_version == "auto" :
252
+ if use_environment == "auto" :
224
253
environment = jedi .api .environment .get_cached_default_environment ()
225
254
else :
226
- force_python_version = vim_force_python_version
227
- if '0000' in force_python_version or '9999' in force_python_version :
228
- # It's probably a float that wasn't shortened.
229
- try :
230
- force_python_version = "{:.1f}" .format (float (force_python_version ))
231
- except ValueError :
232
- pass
233
- elif isinstance (force_python_version , float ):
234
- force_python_version = "{:.1f}" .format (force_python_version )
235
-
236
255
try :
237
- environment = jedi .get_system_environment (force_python_version )
256
+ # XXX: create_environment is not deterministic
257
+ # (https://github.com/davidhalter/jedi/issues/1155)
258
+ # jedi.create_environment(executable, safe=False)
259
+ environment = jedi .api .environment .Environment (use_environment )
238
260
except jedi .InvalidPythonEnvironment as exc :
239
261
environment = jedi .api .environment .get_cached_default_environment ()
240
262
echo_highlight (
241
- "force_python_version =%s is not supported: %s - using %s." % (
242
- vim_force_python_version , str (exc ), str (environment )))
263
+ 'use_environment =%s is not supported: %s - using %s.' % (
264
+ use_environment , str (exc ), str (environment )))
243
265
244
- current_environment = (vim_force_python_version , environment )
266
+ current_environment = (use_environment , environment )
245
267
return environment
246
268
247
269
248
270
def get_known_environments ():
249
271
"""Get known Jedi environments."""
250
- envs = list (jedi .api .environment .find_virtualenvs ())
272
+ paths = vim_eval ("g:jedi#environment_paths" )
273
+ envs = list (jedi .api .environment .find_virtualenvs (paths = paths , safe = False ))
251
274
envs .extend (jedi .api .environment .find_system_environments ())
252
275
return envs
253
276
254
277
278
+ def complete_environments ():
279
+ envs = get_known_environments ()
280
+ try :
281
+ current_executable = current_environment [1 ].executable
282
+ except AttributeError :
283
+ current_executable = None
284
+ vim .command ("return '%s'" % '\n ' .join (
285
+ ('%s (*)' if env .executable == current_executable else '%s' ) % (
286
+ env .executable
287
+ ) for env in envs ))
288
+
289
+
255
290
@catch_and_print_exceptions
256
291
def get_script (source = None , column = None ):
257
292
jedi .settings .additional_dynamic_modules = [
0 commit comments