[libvirt] [PATCH][RFC] Add a rule for indenting labels

Eric Blake eblake at redhat.com
Fri Mar 21 17:13:31 UTC 2014


On 03/21/2014 08:49 AM, Daniel P. Berrange wrote:
> On Fri, Mar 21, 2014 at 08:19:42AM -0600, Eric Blake wrote:
>> On 03/21/2014 07:11 AM, Ján Tomko wrote:
>>> Indent labels by one space.
>>>
>>> Add the rule to HACKING and enforce it by syntax-check.
>>> ---
>>> Adding a space helps git's function context detection, but the fallout
>>> patch is over 800K.
>>>
>>> My reasoning for also indenting labels in nested code is that
>>> vim's cinoptions don't have a separate option for these labels
>>> (or I haven't searched hard enough?).
>>
>> Alas, I don't know enough on vim to help there.

Okay, I've spent some more time on the emacs side; emacs has the option
of a c-label-minimum-indent, but applies it only to top-level labels
(and not to nested code labels).  Where it gets weird is that
c-label-minimum-indent is applied by default only for gnu mode indent,
but not other modes.  We want libvirt in K&R mode indent.  Emacs is
customizable, so you can request other indent modes to also use label
minimum indent by setting c-special-indent-hook, but as a hook it is
deemed dangerous when set via .dir-locals.el and warns the user on every
file that you open, making that particular customization harder to set
as a project-level default.

>> This doesn't do what you want; it sounds like you want to require all
>> labels to have (4n+1) spaces, so you want 4n+{0,2,3} to be forbidden.

Emacs does not have an easy way to enforce (4n+1) spaces, only a minimum
indent.  Furthermore, it is only the top-level labels that interfere
with git function locations; so at this point, I'm leaning towards a simpler

@prohibit='^[_a-zA-Z0-9]+):$$'

and just not worry about nested indent (we have fewer nested labels anyway).

>> The rest of this makes sense, if I can figure out why my emacs settings
>> aren't doing this already, and if we update .dir-locals.el in the same
>> patch.
> 
> FWIW, my emacs is doing the right thing wrt this proposed hacking
> rule and I don't have any .emacsrc file at all on this machine - just
> plain default settings.

I found the difference between Dan's setup and mine - in my ~/.emacs, I
actually created a new style mode libvirt-c-mode (I created it back in
2010, with Jim Meyering's help, before we had .dir-locals.el).  Although
my mode and the settings in .dir-locals.el appear identical [basically:
(defun libvirt-c-mode ()
  "C mode with adjusted defaults for use with libvirt."
  (interactive)
  (c-set-style "K&R")
  (setq indent-tabs-mode nil) ; indent using spaces, not TABs
  (setq c-indent-level 4)
  (setq c-basic-offset 4))
(add-hook 'c-mode-hook
	  '(lambda () (if (string-match "/libvirt" (buffer-file-name))
			  (libvirt-c-mode))))
], where it gets different is that c-label-minimum-indent defaults to
only applying to gnu style.  In creating my own style, I left gnu style,
so the minimum no longer applied to me.  But adding:
  (setq c-special-indent-hook c-gnu-impose-minimum) in the list of
settings in my mode fixed things so it behaves the way Dan was seeing;
as did completely removing my custom mode and instead relying on
.dir-locals.el.  c-special-indent-hook won't work in .dir-locals.el, but
now that I know the cause of the difference and how to work around it on
my end, I'm okay if we force a minimum indent.

-- 
Eric Blake   eblake redhat com    +1-919-301-3266
Libvirt virtualization library http://libvirt.org

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 604 bytes
Desc: OpenPGP digital signature
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20140321/b2fea932/attachment-0001.sig>


More information about the libvir-list mailing list