Каков наилучший способ сортировки определений классов в исходном файле Python? - PullRequest
3 голосов
/ 01 октября 2011

У меня есть источник .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?

Ответы [ 2 ]

4 голосов
/ 01 октября 2011

Я кодировал его для вас, но только потому, что мне было интересно посмотреть, как работает sort-subr. Я не оправдываю намерение первоначального вопроса. :)

Кроме того, если вы проголосуете за этот ответ, поставьте также дидактический ответ upvote @ 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)))
3 голосов
/ 01 октября 2011

Я согласен с Бобинсом, что алфавитный порядок не является полезным способом сортировки функций или других фрагментов кода, но вы можете попробовать 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-paragraphs и C-h f sort-subr для получения документации для них;это будет включать ссылку на источник.

Веселитесь :)) 1014 *

...