簡體   English   中英

在 python 源文件中對類定義進行排序的最佳方法是什么?

[英]What's the best way to sort class definitions in a python source file?

我有一個包含許多類定義的 .py 源,如下所示:

class C:
    # code c

class A:
    # code a

class B:
    # code b

我想把它變成:

class A:
    # code a

class B:
    # code b

class C:
    # code c

有這個工具嗎? 用 emacs 怎么做?

我為你編寫了它,但這只是因為我有興趣了解sort-subr是如何工作的。 寬恕原始問題的意圖。 :)

另外,如果您贊成這個答案,請也贊成@db48x 的教學回答。

使用與使用sort-paragraph相同的方式使用 python-sort-defs 。

(defun python-sort-defs (reverse beg end)
  (interactive "P\nr")
  (save-excursion
    (save-restriction
      (narrow-to-region beg end)
      (goto-char (point-min))
      (sort-subr reverse
                 (function
                  (lambda ()
                    (while (and (not (eobp)) (looking-at paragraph-separate))
                      (forward-line 1))))
                 'python-end-of-block-must-move))))

(defun python-end-of-block-must-move ()
  (when (eq (point) (progn
                      (python-end-of-block)
                      (point)))
    (forward-line 1)))

我同意 bobince 的觀點,即按字母順序排序不是對函數或其他代碼進行排序的有用方法,但您可以嘗試排序sort-paragraphs 它甚至可能起作用。

如果沒有,那么我可以通過查看sort-paragraphs的實現sort-paragraphs看到它是這樣做的:

  (sort-subr reverse
     (function
      (lambda ()
        (while (and (not (eobp)) (looking-at paragraph-separate))
          (forward-line 1))))
     'forward-paragraph))))

我敢打賭,你可以想出一些功能來插入那里,使其工作。 第一個將點移動到下一條記錄的開頭,第二個將點移動到當前記錄的末尾。 有一些函數的可選參數告訴它排序鍵在記錄中的位置,這也可能派上用場。

這些函數在 sort.el 中; 您可以使用Ch f sort-paragraphsCh f sort-subr來為它們提取文檔; 這將包括指向源的鏈接。

玩得開心 :)

在測試代​​碼中按字母順序排序是有意義的。 對於包含許多特定測試的測試用例,一些測試(或者可能只是測試名稱)將被復制。 在重復數據刪除之前按字母順序對測試進行排序是一個好主意。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM