[英]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-paragraphs
和Ch f sort-subr
來為它們提取文檔; 這將包括指向源的鏈接。
玩得開心 :)
在測試代碼中按字母順序排序是有意義的。 對於包含許多特定測試的測試用例,一些測試(或者可能只是測試名稱)將被復制。 在重復數據刪除之前按字母順序對測試進行排序是一個好主意。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.