繁体   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