Re: [PATCH -mm] documentation: update CodingStyle tips for Emacs users

From: Johannes Weiner
Date: Wed Feb 18 2009 - 04:57:43 EST


On Wed, Feb 18, 2009 at 10:19:30AM +0100, Patrick Ohly wrote:
> On Fri, 2008-07-04 at 19:52 +0200, Johannes Weiner wrote:
> > Describe a setup that integrates better with Emacs' cc-mode and also
> > fixes up the alignment of continuation lines to really only use tabs.
> [...]
> > +(defun c-lineup-arglist-tabs-only (ignored)
> > + "Line up argument lists by tabs, not spaces"
> > + (let* ((anchor (c-langelem-pos c-syntactic-element))
> > + (column (c-langelem-2nd-pos c-syntactic-element))
> > + (offset (- (1+ column) anchor))
> > + (steps (floor offset c-basic-offset)))
> > + (* (max steps 1)
> > + c-basic-offset)))
> >+
> >+(add-hook 'c-mode-hook
> > + (lambda ()
> > + (let ((filename (buffer-file-name)))
> > + ;; Enable kernel mode for the appropriate files
> > + (when (and file
> > + (string-match "/usr/src/linux" filename))
> > + (setq indent-tabs-mode t)
> > + (c-set-style "linux")
> > + (c-set-offset 'arglist-cont-nonempty
> > + '(c-lineup-gcc-asm-reg
> > + c-lineup-arglist-tabs-only))))))
>
> When starting writing kernel source code last year (the hardware time
> stamping patch) I used this macro to format it. I very much liked the
> possibility to only switch on Linux style when editing Linux code
> (because I work on a variety of code bases with different formatting).
>
> But the macro above did not produce the result expected by some patch
> reviewers (John Stultz, Dave Miller). I had to redo the formatting
> manually.
>
> The sticky point is continuation after splitting a long parameter list -
> in other words, exactly what the "arglist-cont-nonempty" setting above
> changes. The macro formats it so that the continuation is aligned at the
> tab that is closest to the initial argument in the previous line:
>
> int a_very_long_function_name(int arg1, char *arg2,
> double arg3);
>
> The expected style was tab plus spaces to align with the first argument:
>
> int a_very_long_function_name(int arg1, char *arg2,
> double arg3);
>
> Is this a bug in the macro? I'm using emacs 22.1.1, in case that
> matters. Or are there different opinions in the Linux developer
> community about the right formatting?

Unfortunately, this seems to depend on the maintainer. Both styles
are used all over the kernel but Documentation/CodingStyle and
scripts/checkpatch.pl prefer what the above emacs configuration does.

I doubt that people do tab tab tab space space space space space by
hand, so I strongly suspect that the tab-only zealots don't use emacs
which does this adjustment automatically.

You should probably add linux-davem to the above or something. Or
name the coding style after the text-editor the target maintainer
uses :-)

Hannes
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/