Indent top-level labels by one space.
Add the rule to HACKING and enforce it by syntax-check.
---
HACKING | 31 ++++++++++++++-----------------
cfg.mk | 6 ++++++
docs/hacking.html.in | 37 ++++++++++++++++++-------------------
3 files changed, 38 insertions(+), 36 deletions(-)
diff --git a/HACKING b/HACKING
index 5d9cdca..586b960 100644
--- a/HACKING
+++ b/HACKING
@@ -232,22 +232,9 @@ but we do prefer that contributed code be formatted similarly. In
short, use
spaces-not-TABs for indentation, use 4 spaces for each indentation level, and
other than that, follow the K&R style.
-If you use Emacs, add the following to one of one of your start-up files
-(e.g., ~/.emacs), to help ensure that you get indentation right:
-
- ;;; When editing C sources in libvirt, use this style.
- (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))))
-
-If you use vim, append the following to your ~/.vimrc file:
+If you use Emacs, the project includes a file .dir-locals.el that sets up the
+preferred indentation. If you use vim, append the following to your ~/.vimrc
+file:
set nocompatible
filetype on
@@ -257,7 +244,7 @@ If you use vim, append the following to your ~/.vimrc file:
set tabstop=8
set shiftwidth=4
set expandtab
- set cinoptions=(0,:0,l1,t0
+ set cinoptions=(0,:0,l1,t0,L3
filetype plugin indent on
au FileType make setlocal noexpandtab
au BufRead,BufNewFile *.am setlocal noexpandtab
@@ -928,6 +915,16 @@ When using goto, please use one of these standard labels if it makes
sense:
no_memory: A path only taken upon return with an OOM error code
retry: If needing to jump upwards (e.g., retry on EINTR)
+Top-level labels should be indented by one space (putting them on the
+beginning of the line confuses function context detection in git):
+
+int foo()
+{
+ /* ... do stuff ... */
+ cleanup:
+ /* ... do other stuff ... */
+}
+
Libvirt committer guidelines
============================
diff --git a/cfg.mk b/cfg.mk
index 559f719..cbcf40b 100644
--- a/cfg.mk
+++ b/cfg.mk
@@ -898,6 +898,12 @@ sc_prohibit_virConnectOpen_in_virsh:
halt='Use vshConnect() in virsh instead of virConnectOpen*' \
$(_sc_search_regexp)
+sc_require_space_before_label:
+ @prohibit='^[_a-zA-Z0-9]+:$$' \
+ in_vc_files='\.[ch]$$' \
+ halt="Top-level labels should be indented by one space" \
+ $(_sc_search_regexp)
+
sc_curly_braces_style:
@files=$$($(VC_LIST_EXCEPT) | grep '\.[ch]$$'); \
$(GREP) -nHP \
diff --git a/docs/hacking.html.in b/docs/hacking.html.in
index 0febee2..b2ef85a 100644
--- a/docs/hacking.html.in
+++ b/docs/hacking.html.in
@@ -273,26 +273,11 @@
In short, use spaces-not-TABs for indentation, use 4 spaces for each
indentation level, and other than that, follow the K&R style.
</p>
- <p>
- If you use Emacs, add the following to one of one of your start-up files
- (e.g., ~/.emacs), to help ensure that you get indentation right:
- </p>
-<pre>
- ;;; When editing C sources in libvirt, use this style.
- (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))))
-</pre>
<p>
- If you use vim, append the following to your ~/.vimrc file:
+ If you use Emacs, the project includes a file .dir-locals.el
+ that sets up the preferred indentation. If you use vim,
+ append the following to your ~/.vimrc file:
</p>
<pre>
set nocompatible
@@ -303,7 +288,7 @@
set tabstop=8
set shiftwidth=4
set expandtab
- set cinoptions=(0,:0,l1,t0
+ set cinoptions=(0,:0,l1,t0,L3
filetype plugin indent on
au FileType make setlocal noexpandtab
au BufRead,BufNewFile *.am setlocal noexpandtab
@@ -1139,6 +1124,20 @@
retry: If needing to jump upwards (e.g., retry on EINTR)
</pre>
+ <p>
+ Top-level labels should be indented by one space (putting them on
+ the beginning of the line confuses function context detection in git):
+ </p>
+
+<pre>
+int foo()
+{
+ /* ... do stuff ... */
+ cleanup:
+ /* ... do other stuff ... */
+}
+</pre>
+
<h2><a name="committers">Libvirt committer
guidelines</a></h2>
--
1.8.3.2