在python源文件中对类定义进行排序的最佳方法是什么?

时间:2011-09-30 23:02:21

标签: python emacs organization

我有一个带有许多类定义的.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做什么呢?

3 个答案:

答案 0 :(得分:4)

我为你编写了代码,但这只是因为我有兴趣了解sort-subr的工作原理。我宽恕原始问题的意图。 :)

另外,如果你赞成这个答案,也请提出@ db48x的教学答案。

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

(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)))

答案 1 :(得分:3)

我同意bobince的说法,字母顺序不是排序函数或其他代码的有用方法,但你可以给sort-paragraphs一个。它甚至可能有效。

如果没有,那么我可以通过查看sort-paragraphs的实现来看到它是这样做的:

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

我打赌你可以提出一些功能来插入那些可以使它工作的功能。第一个将点移动到下一个记录的开头,第二个将点移动到当前记录的末尾。函数有一些可选的参数,告诉它在记录中哪个排序键也可以派上用场。

这些函数在sort.el中;您可以使用C-h f sort-paragraphsC-h f sort-subr为他们提取文档;这将包括指向源的链接。

玩得开心:)

答案 2 :(得分:0)

在测试代码中按字母顺序排序是有意义的。对于包含许多特定测试的测试用例,一些测试(或者可能只是测试名称)将被复制。在重复数据删除之前按字母顺序对测试进行排序是一个好主意。