@@ -157,49 +157,84 @@ def wrapper(*args, **kwargs):
157
157
return func_receiver
158
158
159
159
160
+ # XXX: might use lru cache, given that you can configure it per buffer?!
160
161
current_environment = (None , None )
161
162
162
163
164
+ def set_environment (executable = None , bufnr = None ):
165
+ global current_environment
166
+
167
+ # print(repr(executable), repr(bufnr))
168
+
169
+ if not executable : # "unset"
170
+ executable = 'auto'
171
+ environment = None
172
+ else :
173
+ try :
174
+ # XXX: create_environment is not deterministic
175
+ # (https://github.com/davidhalter/jedi/issues/1155)
176
+ # jedi.create_environment(executable, safe=False)
177
+ environment = jedi .api .environment .Environment (executable )
178
+ except jedi .InvalidPythonEnvironment as exc :
179
+ echo_highlight ('executable=%s is not supported: %s.' % (
180
+ executable , str (exc )))
181
+ return
182
+ bufnr = int (bufnr )
183
+ if bufnr :
184
+ vim_command ("call setbufvar(%d, 'jedi_use_environment', %r)" % (
185
+ bufnr , executable ))
186
+ else :
187
+ vim_command ("let g:jedi#use_environment = %r" % executable )
188
+ current_environment = (executable , environment )
189
+
190
+
163
191
def get_environment (use_cache = True ):
164
192
global current_environment
165
193
166
- vim_force_python_version = vim_eval ("g:jedi#force_py_version" )
167
- if use_cache and vim_force_python_version == current_environment [0 ]:
194
+ use_environment = vim_eval (
195
+ "get(b:, 'jedi_use_environment', get(g:, 'jedi#use_environment', ''))" )
196
+ if use_cache and use_environment == current_environment [0 ]:
168
197
return current_environment [1 ]
169
198
170
199
environment = None
171
- if vim_force_python_version == "auto" :
200
+ if use_environment == "auto" :
172
201
environment = jedi .api .environment .get_cached_default_environment ()
173
202
else :
174
- force_python_version = vim_force_python_version
175
- if '0000' in force_python_version or '9999' in force_python_version :
176
- # It's probably a float that wasn't shortened.
177
- try :
178
- force_python_version = "{:.1f}" .format (float (force_python_version ))
179
- except ValueError :
180
- pass
181
- elif isinstance (force_python_version , float ):
182
- force_python_version = "{:.1f}" .format (force_python_version )
183
-
184
203
try :
185
- environment = jedi .get_system_environment (force_python_version )
204
+ # XXX: create_environment is not deterministic
205
+ # (https://github.com/davidhalter/jedi/issues/1155)
206
+ # jedi.create_environment(executable, safe=False)
207
+ environment = jedi .api .environment .Environment (use_environment )
186
208
except jedi .InvalidPythonEnvironment as exc :
187
209
environment = jedi .api .environment .get_cached_default_environment ()
188
210
echo_highlight (
189
- "force_python_version =%s is not supported: %s - using %s." % (
190
- vim_force_python_version , str (exc ), str (environment )))
211
+ 'use_environment =%s is not supported: %s - using %s.' % (
212
+ use_environment , str (exc ), str (environment )))
191
213
192
- current_environment = (vim_force_python_version , environment )
214
+ current_environment = (use_environment , environment )
193
215
return environment
194
216
195
217
196
218
def get_known_environments ():
197
219
"""Get known Jedi environments."""
198
- envs = list (jedi .api .environment .find_virtualenvs ())
220
+ paths = vim_eval ("g:jedi#environment_paths" )
221
+ envs = list (jedi .api .environment .find_virtualenvs (paths = paths , safe = False ))
199
222
envs .extend (jedi .api .environment .find_system_environments ())
200
223
return envs
201
224
202
225
226
+ def complete_environments ():
227
+ envs = get_known_environments ()
228
+ try :
229
+ current_executable = current_environment [1 ].executable
230
+ except AttributeError :
231
+ current_executable = None
232
+ vim .command ("return '%s'" % '\n ' .join (
233
+ ('%s (*)' if env .executable == current_executable else '%s' ) % (
234
+ env .executable
235
+ ) for env in envs ))
236
+
237
+
203
238
@catch_and_print_exceptions
204
239
def get_script (source = None , column = None ):
205
240
jedi .settings .additional_dynamic_modules = [
0 commit comments