Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 10 additions & 7 deletions lsp-mode.el
Original file line number Diff line number Diff line change
Expand Up @@ -5418,7 +5418,7 @@ WORKSPACE is the active workspace."
(lsp--error "Failed to apply edits with message %s" (error-message-string err))
:json-false))))
((string= method "workspace/configuration")
(lsp--build-workspace-configuration-response params))
(with-lsp-workspace workspace (lsp--build-workspace-configuration-response params)))
((string= method "workspace/workspaceFolders")
(let ((folders (or (-> workspace
(lsp--workspace-client)
Expand Down Expand Up @@ -6490,10 +6490,11 @@ changing the value of `foo'."

(defun lsp-register-custom-settings (props)
"Register PROPS.
PROPS is list of triple (path value boolean?) where PATH is the
PROPS is list of triple (path value boolean? ignore-on-nil?) where PATH is the
path to the property, VALUE is either a literal value or symbol
used to retrieve the value, and BOOLEAN? is an optional flag that
should be non-nil for boolean settings."
used to retrieve the value, BOOLEAN? is an optional flag that should be non-nil
for boolean settings, and IGNORE-ON-NIL? is an optional flag that ignores the
setting if its evaluated value is nil."
(let ((-compare-fn #'lsp--compare-setting-path))
(setq lsp-client-settings (-uniq (append props lsp-client-settings)))))

Expand All @@ -6516,15 +6517,17 @@ TBL - a hash table, PATHS is the path to the nested VALUE."
(defun lsp-configuration-section (section)
"Get settings for SECTION."
(let ((ret (ht-create)))
(mapc (-lambda ((path variable boolean?))
(mapc (-lambda ((path variable boolean? ignore-on-nil?))
(when (s-matches? (concat section "\\..*") path)
(let* ((symbol-value (if (symbolp variable)
(symbol-value variable)
variable))
(if (functionp variable)
(funcall variable) variable)))
(value (if (and boolean? (not symbol-value))
:json-false
symbol-value)))
(lsp-ht-set ret (s-split "\\." path) value))))
(unless (and ignore-on-nil? (not value))
(lsp-ht-set ret (s-split "\\." path) value)))))
lsp-client-settings)
ret))

Expand Down
122 changes: 76 additions & 46 deletions lsp-pyls.el
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,12 @@
:group 'lsp-pyls
:package-version '(lsp-mode . "6.1"))

(defcustom lsp-pyls-pyenv-command-path "pyenv"
"Executable path to pyenv"
:type 'string
:group 'lsp-pyls
:package-version '(lsp-mode . "6.3"))

(defcustom lsp-pyls-plugins-jedi-completion-enabled t
"Enable or disable the plugin."
:type 'boolean
Expand Down Expand Up @@ -353,53 +359,77 @@ parameters referenced in config."
:group 'lsp-pyls
:package-version '(lsp-mode . "6.3"))

(defcustom lsp-pyls-plugins-jedi-use-pyenv-environment t
"If enabled, pass the environment got by pyenv to jedi"
:type 'boolean
:group 'lsp-pyls
:package-version '(lsp-mode . "6.3"))

(lsp-register-custom-settings
'(("pyls.rope.ropeFolder" lsp-pyls-rope-rope-folder)
("pyls.rope.extensionModules" lsp-pyls-rope-extension-modules)
("pyls.plugins.autopep8.enabled" lsp-pyls-plugins-autopep8-enabled t)
("pyls.plugins.yapf.enabled" lsp-pyls-plugins-yapf-enabled t)
("pyls.plugins.rope_completion.enabled" lsp-pyls-plugins-rope-completion-enabled t)
("pyls.plugins.pyflakes.enabled" lsp-pyls-plugins-pyflakes-enabled t)
("pyls.plugins.pydocstyle.matchDir" lsp-pyls-plugins-pydocstyle-match-dir)
("pyls.plugins.pydocstyle.match" lsp-pyls-plugins-pydocstyle-match)
("pyls.plugins.pydocstyle.select" lsp-pyls-plugins-pydocstyle-select)
("pyls.plugins.pydocstyle.ignore" lsp-pyls-plugins-pydocstyle-ignore)
("pyls.plugins.pydocstyle.addSelect" lsp-pyls-plugins-pydocstyle-add-select)
("pyls.plugins.pydocstyle.addIgnore" lsp-pyls-plugins-pydocstyle-add-ignore)
("pyls.plugins.pydocstyle.convention" lsp-pyls-plugins-pydocstyle-convention)
("pyls.plugins.pydocstyle.enabled" lsp-pyls-plugins-pydocstyle-enabled t)
("pyls.plugins.pycodestyle.maxLineLength" lsp-pyls-plugins-pycodestyle-max-line-length)
("pyls.plugins.pycodestyle.hangClosing" lsp-pyls-plugins-pycodestyle-hang-closing t)
("pyls.plugins.pycodestyle.ignore" lsp-pyls-plugins-pycodestyle-ignore)
("pyls.plugins.pycodestyle.select" lsp-pyls-plugins-pycodestyle-select)
("pyls.plugins.pycodestyle.filename" lsp-pyls-plugins-pycodestyle-filename)
("pyls.plugins.pycodestyle.exclude" lsp-pyls-plugins-pycodestyle-exclude)
("pyls.plugins.pycodestyle.enabled" lsp-pyls-plugins-pycodestyle-enabled t)
("pyls.plugins.pylint.enabled" lsp-pyls-plugins-pylint-enabled t)
("pyls.plugins.pylint.args" lsp-pyls-plugins-pylint-args)
("pyls.plugins.flake8.enabled" lsp-pyls-plugins-flake8-enabled)
("pyls.plugins.flake8.exclude" lsp-pyls-plugins-flake8-exclude)
("pyls.plugins.flake8.filename" lsp-pyls-plugins-flake8-filename)
("pyls.plugins.flake8.hangClosing" lsp-pyls-plugins-flake8-hang-closing)
("pyls.plugins.flake8.ignore" lsp-pyls-plugins-flake8-ignore)
("pyls.plugins.flake8.maxLineLength" lsp-pyls-plugins-flake8-max-line-length)
("pyls.plugins.flake8.select" lsp-pyls-plugins-flake8-select)
("pyls.plugins.flake8.config" lsp-pyls-plugins-flake8-config)
("pyls.plugins.preload.modules" lsp-pyls-plugins-preload-modules)
("pyls.plugins.preload.enabled" lsp-pyls-plugins-preload-enabled t)
("pyls.plugins.mccabe.threshold" lsp-pyls-plugins-mccabe-threshold)
("pyls.plugins.mccabe.enabled" lsp-pyls-plugins-mccabe-enabled t)
("pyls.plugins.jedi_symbols.all_scopes" lsp-pyls-plugins-jedi-symbols-all-scopes t)
("pyls.plugins.jedi_symbols.enabled" lsp-pyls-plugins-jedi-symbols-enabled t)
("pyls.plugins.jedi_signature_help.enabled" lsp-pyls-plugins-jedi-signature-help-enabled t)
("pyls.plugins.jedi_references.enabled" lsp-pyls-plugins-jedi-references-enabled t)
("pyls.plugins.jedi_hover.enabled" lsp-pyls-plugins-jedi-hover-enabled t)
("pyls.plugins.jedi_definition.follow_builtin_imports" lsp-pyls-plugins-jedi-definition-follow-builtin-imports t)
("pyls.plugins.jedi_definition.follow_imports" lsp-pyls-plugins-jedi-definition-follow-imports t)
("pyls.plugins.jedi_definition.enabled" lsp-pyls-plugins-jedi-definition-enabled t)
("pyls.plugins.jedi_completion.include_params" lsp-pyls-plugins-jedi-completion-include-params t)
("pyls.plugins.jedi_completion.enabled" lsp-pyls-plugins-jedi-completion-enabled t)
("pyls.configurationSources" lsp-pyls-configuration-sources)))
(append '(("pyls.rope.ropeFolder" lsp-pyls-rope-rope-folder)
("pyls.rope.extensionModules" lsp-pyls-rope-extension-modules)
("pyls.plugins.autopep8.enabled" lsp-pyls-plugins-autopep8-enabled t)
("pyls.plugins.yapf.enabled" lsp-pyls-plugins-yapf-enabled t)
("pyls.plugins.rope_completion.enabled" lsp-pyls-plugins-rope-completion-enabled t)
("pyls.plugins.pyflakes.enabled" lsp-pyls-plugins-pyflakes-enabled t)
("pyls.plugins.pydocstyle.matchDir" lsp-pyls-plugins-pydocstyle-match-dir)
("pyls.plugins.pydocstyle.match" lsp-pyls-plugins-pydocstyle-match)
("pyls.plugins.pydocstyle.select" lsp-pyls-plugins-pydocstyle-select)
("pyls.plugins.pydocstyle.ignore" lsp-pyls-plugins-pydocstyle-ignore)
("pyls.plugins.pydocstyle.addSelect" lsp-pyls-plugins-pydocstyle-add-select)
("pyls.plugins.pydocstyle.addIgnore" lsp-pyls-plugins-pydocstyle-add-ignore)
("pyls.plugins.pydocstyle.convention" lsp-pyls-plugins-pydocstyle-convention)
("pyls.plugins.pydocstyle.enabled" lsp-pyls-plugins-pydocstyle-enabled t)
("pyls.plugins.pycodestyle.maxLineLength" lsp-pyls-plugins-pycodestyle-max-line-length)
("pyls.plugins.pycodestyle.hangClosing" lsp-pyls-plugins-pycodestyle-hang-closing t)
("pyls.plugins.pycodestyle.ignore" lsp-pyls-plugins-pycodestyle-ignore)
("pyls.plugins.pycodestyle.select" lsp-pyls-plugins-pycodestyle-select)
("pyls.plugins.pycodestyle.filename" lsp-pyls-plugins-pycodestyle-filename)
("pyls.plugins.pycodestyle.exclude" lsp-pyls-plugins-pycodestyle-exclude)
("pyls.plugins.pycodestyle.enabled" lsp-pyls-plugins-pycodestyle-enabled t)
("pyls.plugins.pylint.enabled" lsp-pyls-plugins-pylint-enabled t)
("pyls.plugins.pylint.args" lsp-pyls-plugins-pylint-args)
("pyls.plugins.flake8.enabled" lsp-pyls-plugins-flake8-enabled)
("pyls.plugins.flake8.exclude" lsp-pyls-plugins-flake8-exclude)
("pyls.plugins.flake8.filename" lsp-pyls-plugins-flake8-filename)
("pyls.plugins.flake8.hangClosing" lsp-pyls-plugins-flake8-hang-closing)
("pyls.plugins.flake8.ignore" lsp-pyls-plugins-flake8-ignore)
("pyls.plugins.flake8.maxLineLength" lsp-pyls-plugins-flake8-max-line-length)
("pyls.plugins.flake8.select" lsp-pyls-plugins-flake8-select)
("pyls.plugins.flake8.config" lsp-pyls-plugins-flake8-config)
("pyls.plugins.preload.modules" lsp-pyls-plugins-preload-modules)
("pyls.plugins.preload.enabled" lsp-pyls-plugins-preload-enabled t)
("pyls.plugins.mccabe.threshold" lsp-pyls-plugins-mccabe-threshold)
("pyls.plugins.mccabe.enabled" lsp-pyls-plugins-mccabe-enabled t)
("pyls.plugins.jedi_symbols.all_scopes" lsp-pyls-plugins-jedi-symbols-all-scopes t)
("pyls.plugins.jedi_symbols.enabled" lsp-pyls-plugins-jedi-symbols-enabled t)
("pyls.plugins.jedi_signature_help.enabled" lsp-pyls-plugins-jedi-signature-help-enabled t)
("pyls.plugins.jedi_references.enabled" lsp-pyls-plugins-jedi-references-enabled t)
("pyls.plugins.jedi_hover.enabled" lsp-pyls-plugins-jedi-hover-enabled t)
("pyls.plugins.jedi_definition.follow_builtin_imports" lsp-pyls-plugins-jedi-definition-follow-builtin-imports t)
("pyls.plugins.jedi_definition.follow_imports" lsp-pyls-plugins-jedi-definition-follow-imports t)
("pyls.plugins.jedi_definition.enabled" lsp-pyls-plugins-jedi-definition-enabled t)
("pyls.plugins.jedi_completion.include_params" lsp-pyls-plugins-jedi-completion-include-params t)
("pyls.plugins.jedi_completion.enabled" lsp-pyls-plugins-jedi-completion-enabled t)
("pyls.configurationSources" lsp-pyls-configuration-sources))
(when lsp-pyls-plugins-jedi-use-pyenv-environment
(let ((pyenv-get-python-executable
(lambda ()
(let* ((pyenv-version (getenv "PYENV_VERSION"))
(root (nth 0 (lsp-find-roots-for-workspace lsp--cur-workspace (lsp-session)))))
(when root
(setenv "PYENV_VERSION" nil)
(let ((python-env (f-parent
(f-parent
(shell-command-to-string
(format "PYENV_DIR='%s' %s which python"
root lsp-pyls-pyenv-command-path))))))
(message (format "Configure pyls with environment: %s" python-env))
(setenv "PYENV_VERSION" pyenv-version)
python-env)
)))))
`(("pyls.plugins.jedi.environment" ,pyenv-get-python-executable nil t))
))))

(lsp-register-client
(make-lsp-client :new-connection (lsp-stdio-connection
Expand Down