emacs-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: refactoring DEFUN


From: Dmitry Antipov
Subject: Re: refactoring DEFUN
Date: Mon, 25 Mar 2013 17:48:41 +0400
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130307 Thunderbird/17.0.4

On 03/25/2013 04:55 PM, Andy Moreton wrote:

It would help to show the elisp program you used to generate the patch,
as that would make it easier to check that the results of the transform
are correct.

This is just about mastering the monster regexp:

(defun defun-replace ()
  (set-buffer (find-file-noselect (car (last command-line-args))))
  (while (re-search-forward
"DEFUN \(\\(\".+\"\\),[ \n\t]+F\\(\[A-Za-z0-9_\]+\\),[ 
\n\t]+S\\(\[A-Za-z0-9_\]+\\),[ \n\t]+\\([^,]+, [^,]+, [^,]+,\\)" nil t)
    (replace-match "DEFUN \(\\1, \\3, \\4"))
  (save-buffer))

And then do it in batch mode:

for f in src/*.[cm]; do emacs -Q -batch -l ../misc/defun-replace.el -f 
defun-replace $f; done

The regexp above can't handle complex interactive specs like in Frename_buffer.
However defun-replace doesn't change such a functions at all, so the whole
procedure yields to a few compilation errors which may be fixed manually.
Finally, too long lines may be found with something like:

grep -nH DEFUN *.[cm] | awk 'length > 70'

and fixed manually too.

The whole change passes full bootstrap and basic editing tests.

Did you find any cases where the names did not match up ?

I believe that I've fixed the last mismatch in r112124 :-).

Dmitry



reply via email to

[Prev in Thread] Current Thread [Next in Thread]