#author("2024-01-22T00:07:15+09:00","","")
#author("2024-01-22T00:08:49+09:00","","")
#topicpath

///////////////////////////////////////////////////////////////////////////////
* 目次 [#n1d49368]
#contents();

////////////////////////////////////////////////////////////////////////////////
* python 開発環境 [#n0ecd234]
- emacs 上での python 開発環境としては以下を導入することが出来る。
-- lint
-- フォーマッタ
- また、 emacs では python コードを編集するための python-mode があるので、これが起動するときのフック ''python-mode-hook'' に引っ掛けて動作するようにしていく。

////////////////////////////////////////////////////////////////////////////////
* 環境構築 [#q342595b]
//==============================================================================
** lint の設定(flycheck を使用) [#z01db224]
+ flycheck の導入
-- flycheck が導入済みであれば、flycheck のみで静的解析が実行される為、他に特に設定は必要ない。
-- flycheck が導入済みであれば、flycheck のみで静的解析が実行される為、他に特に設定は必要ない。(別途手動インストールなどした pylint を flycheck で使うようにしたければ、そのように設定することもできる)
-- debian パッケージを導入する場合は、 ''elpa-flycheck'' をインストールする。
-- 又は、開発リポジトリを取ってきて、宜しく配置する(但し、依存するリポジトリも取ってくる必要がある):
 https://github.com/flycheck/flycheck.git
 https://github.com/magnars/dash.el.git
 https://git.savannah.gnu.org/git/emacs/elpa.git
+ flycheck を設定する
-- ディストリビューションのパッケージを導入する場合、特にすることはない筈。
-- 手動でリポジトリを取ってきた場合の設定例は以下の通り:
 (setq load-path (cons (expand-file-name "~/.emacs.d/site-lisp/elpa/packages/company") load-path)) ; depended: dash
 (setq load-path (cons (expand-file-name "~/.emacs.d/site-lisp/dash") load-path))
 (setq load-path (cons (expand-file-name "~/.emacs.d/site-lisp/flycheck") load-path))      ; flycheck
 (require 'flycheck)
 
 ;; エラーをツールチップ表示する
 (with-eval-after-load 'flycheck
   (flycheck-pos-tip-mode))
 
 (add-hook 'after-init-hook #'global-flycheck-mode)

//==============================================================================
** formatter の設定 [#cd0de45d]
- pytohn フォーマッタは幾つかあるが、ここでは、以下を前提とした環境構築を行う。
-- autopep8 --- フォーマッタ
-- isort --- import 文の妥当性を解析する

//------------------------------------------------------------------------------
*** autopep8 の導入 [#j5a38d10]
- emacs には py-autopep8.el があるので導入する。
-- debian パッケージを導入する場合は ''elpa-py-autopep8''
-- 手動でリポジトリを取得する場合は
 https://github.com/fujimisakari/py-autopep8.el.git

//------------------------------------------------------------------------------
*** isort の導入 [#o91f34b7]
- emacs には py-isort.el があるので導入する。
-- debian パッケージの場合は ''elpa-py-isort'' を導入する。
-- 手動でリポジトリを取得する場合は
 https://github.com/paetzke/py-isort.el.git

//------------------------------------------------------------------------------
*** autopep8 と isort の設定 [#c8ae4823]
+ python-mode 固有の設定になるので、ひとまとめにした設定ファイル ''python-mode.conf.el'' を作る。
 ;;; python-mode.conf.el --- settings for python-mode
 ;;; Commentary:
 ;;;    see also: https://qiita.com/fujimisakari/items/74e32eddb78dff4be585
 ;;; Code:
  (setq python-mode-hook
        #'(lambda ()
            (if (which-function-mode nil) (which-function-mode)) ; ; 現在の関数名をモードラインに表示
 
            ;; formatter
            (require 'py-autopep8.conf)
            ;; clang-format.conf.el で設定したキーに合わせておく
            (define-key python-mode-map (kbd "C-c i") 'py-autopep8-region)   ; 選択リジョン内のコード整形
            (define-key python-mode-map (kbd "C-c u") 'py-autopep8)          ; バッファ全体のコード整形
 
            ;; import 文を適切な順序に自動で sort する
            (require 'py-isort.conf)
 
            ;; linter
            ;; (when (expand-file-name "pylint") ; システム上に pylint があるときだけ
            ;;   ;; flycheck で使う linter の設定
            ;;   ;; flycheck では勝手に linter を探してくれるらしく、パスの通ってない
            ;;   ;; ところに置かれている物を使うのでない限り、以下の linter を指定する設定は不要な模様
            ;;   ; (setq flycheck-python-pylint-executable "pylint") ; for flycheck
            ;;   ; (setq flycheck-python-flake8-executable "flake8") ; for flycheck
            ;;   ; (setq flycheck-python-mypy-executable "mypy") ; for flycheck
            ;;   )
            )
        )
 
 (provide 'python-mode.conf)
 ;;; python-mode.conf.el ends here
+ これを、${HOME}/.emacs.d/init.el 等から適当に呼ぶようにする。
 ; python-mode 関係の設定
 (require 'python-mode.conf)

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS