Files
dotemacs/lisp/modes/python.el
2022-01-09 21:19:46 +01:00

164 lines
5.2 KiB
EmacsLisp

;;; python.el --- initializes Python modes -*- lexical-binding: t; -*-
;;; Commentary:
;;; Code:
(require 'lsp-pylsp)
(defun user--python-format-before-save ()
"Python cleanup and format before save buffer."
(lsp-format-buffer)
(delete-trailing-whitespace)
)
(defun user--python-mode-hook ()
"Python mode hook."
;; lsp python customization
(lsp-register-custom-settings
'(("pylsp.plugins.pyls_mypy.enabled" t t)
;; ("pylsp.plugins.flake8.maxLineLength" 120)
;; ("pylsp.plugins.pycodestyle.maxLineLength" 120)
("pylsp.plugins.yapf.enabled" t t)
("pylsp.plugins.pylint.enabled" t t)))
;; ("pyls.plugins.pyls_mypy.live_mode" nil t)
;; ("pyls.plugins.pyls_black.enabled" t t)
;; ("pyls.plugins.pyls_isort.enabled" t t)
;; ("pyls.plugins.flake8.enabled" t t)))
(setq lsp-pylsp-plugins-flake8-max-line-length 120)
(setq lsp-pylsp-plugins-pycodestyle-max-line-length 120)
;; Enable virtualenv support.
(when(feature-p 'pyvenv)
(pyvenv-mode t))
(when(feature-p 'anaconda-mode)
(anaconda-mode t))
;; Enable smart parenthesis handling.
(user/smartparens-enable)
;; Separate camel-case into separate words
(subword-mode t)
;; ElDoc shows function documentation as you type
(eldoc-mode t)
;; Select pylint for ckecing
;; (setq flycheck-checker nil)
;; (setq-default flycheck-disabled-checkers '(lsp))
;; (flycheck-add-mode 'python-flake8 'python-mode)
;; (flycheck-select-checker 'python-pycheckers)
;; (flycheck-add-next-checker 'lsp 'python-pycheckers)
;; (setq-local lsp-pylsp-plugins-pylint-enabled nil)
;; (with-eval-after-load "lsp-mode"
;; (add-to-list 'lsp-disabled-clients 'pyls)
;; (add-to-list 'lsp-enabled-clients 'pylsp))
;; (Bindings) ;;
;; (when(feature-p 'nose)
;; (user/bind-key-local: code: test 'nosetests-all))
;; (when(feature-p 'pyvenv)
;; (user/bind-key-local: code: virtual 'pyvenv-workon))
;; (when(feature-p 'lsp-pyright)
;; (require 'lsp-pyright)))
)
(use-package python
:if (executable-find "python")
:defer
:mode ("SCon\(struct\|script\)$" . python-mode)
:interpreter ("python[0-9.]*" . python-mode)
:hook
(python-mode-hook . lsp)
(python-mode-hook . user--python-mode-hook)
(python-mode-hook . (lambda ()
(add-hook 'before-save-hook #'user--python-format-before-save nil t)))
:config
(validate-setq
;; Don't try to guess the indentation.
python-indent-guess-indent-offset nil)
(with-executable 'ipython3
(validate-setq
;; Set IPython as default interpreter.
python-shell-interpreter "ipython3"
python-shell-interpreter-args ""
python-shell-prompt-regexp "In \\[[0-9]+\\]: "
python-shell-prompt-output-regexp "Out\\[[0-9]+\\]: "
python-shell-completion-setup-code "from IPython.core.completerlib import module_completion"
python-shell-completion-module-string-code "';'.join(module_completion('''%s'''))\n"
python-shell-completion-string-code "';'.join(get_ipython().Completer.all_completions('''%s'''))\n"))
(with-executable 'bpython
(defun user/bpython-term()
"Launch or switch to a `bpython' buffer."
(interactive)
(if (not (get-buffer "*bpython*"))
(progn
(ansi-term "bpython" "bpython"))
(switch-to-buffer "*bpython*"))))
;; (Packages) ;;
;; https://github.com/pythonic-emacs/anaconda-mode
;; Code navigation, documentation lookup and completion for Python.
(use-package anaconda-mode)
;; https://github.com/tsgates/pylookup
;; Emacs mode for searching python documents with convenience
(use-package pylookup
:disabled
:quelpa(pylookup
:fetcher github
:repo "tsgates/pylookup"))
;; https://github.com/syl20bnr/nose.el
;; This gives a bunch of functions that handle running nosetests on a particular buffer or part of a buffer.
(use-package nose
:disabled)
;; https://github.com/tkf/emacs-python-environment
;; Python virtualenv API for Emacs Lisp
(use-package python-environment
:disabled
:config
(validate-setq
;; Locate of Python environment store.
python-environment-directory(path-join *user-cache-directory*
"python-environment")))
;; https://github.com/pwalsh/pipenv.el
;; A Pipenv porcelain inside Emacs.
(use-package pipenv
:disabled
:if (executable-find "pipenv")
:hook(python-mode-hook . pipenv-mode))
;; https://github.com/msherry/flycheck-pycheckers
;; Multiple syntax checker for Python in Emacs, using Flycheck
(use-package flycheck-pycheckers
:disabled
:after flycheck
:hook (flycheck-mode-hook . flycheck-pycheckers-setup)
:config (setq flycheck-pycheckers-checkers (remove 'mypy2 flycheck-pycheckers-checkers))
)
;; https://github.com/chocoelho/flycheck-prospector
;; flycheck support for prospector
(use-package flycheck-prospector
:disabled
:if (executable-find "prospector")
:hook(flycheck-mode-hook . flycheck-prospector-setup))
;; https://github.com/jgosmann/pylint-venv
;; Make pylint respect virtualenvs.
(use-package pyvenv
:ensure t
:config
(pyvenv-mode 1))
;; https://github.com/emacsorphanage/helm-pydoc
;; helm-pydoc.el is pydoc helm interface
(use-package helm-pydoc
:pin "MELPA"))
(provide 'modes/python)
;;; python.el ends here