[英]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.