====== Code Formatting Standards ======
FIXME This page is a work in progress and currently NOT official! FIXME
===== General Conventions =====
As a general rule, Evergreen contributions should follow these basic conventions.
* Indents - tabs vs. spaces
* The general rule for all files needing indentation is 4 space indents, no literal tabs
* The following file types are **exceptions** to this rule
- Code written in C
- Database schema/code files (.sql files)
- Makefiles
- Plain text files
* Tokens should be separated by whitespace (i.e '$this = 1' not '$this=1')
* Opening braces should be on the same line as the corresponding token and 'else' should be "cuddled"
if ($this) {
that();
} else {
something();
}
not
if ($this)
{
that();
}
else
{
something()
}
* Control structures should be followed by spaces, function names should not (see 'if' vs 'that' above)
===== Tool Specifics =====
==== Vim ====
The following Vim options or something similar (often set via .vimrc) will help with proper indentation:
set tabstop=4
set softtabstop=4
set shiftwidth=4
set expandtab
set backspace=indent,eol,start
autocmd BufEnter ?akefile*,*txt,*out,*csv,*.c,*.h,*.sql set noet "use real tabs in Makefiles, text files, C code, and SQL files
In addition, the following VIM options have been recommended by a prominent Evergreen developer but are not actually format related :-) :
set hlsearch
vnoremap < >gv
set nobk
set whichwrap=b,s,<,>,[,]
set smartcase
filetype on
syntax enable
au BufNewFile,BufRead *.xhtml setf html
au BufNewFile,BufRead *.bsh setf java
au BufNewFile,BufRead *.ftl setf html
set bg=dark
let loaded_matchparen = 1
==== GNU Emacs ====
Add the following lines to your .emacs file and your code will meet the above standards for Perl.
; Use cperl-mode by default
(defalias 'perl-mode 'cperl-mode)
; cperl-mode doesn't have an add-style command, so we create our
; style in a defun.
(defun evergreen-perl-style ()
"Set cperl-mode for Evergreen coding guidelines."
(setq cperl-indent-level 4
cperl-brace-offset 0
cperl-continued-brace-offset 0
cperl-label-offset -4
cperl-continued-statement-offset 4
cperl-close-paren-offset -4
cperl-indent-parens-as-block t
cperl-tab-always-indent t
cperl-merge-trailing-else t
cperl-left-aligned-indent-comments t
indent-tabs-mode nil))
; cperl-mode hook
(add-hook 'cperl-mode-hook
(lambda ()
(evergreen-perl-style)))
The above will use these style guidelines on all of your Perl sources. More advanced users might want to configure other styles for different projects and check buffer-file-name to switch styles on a per-buffer basis. You might also want to look into setting many of the cperl-electric-* variables or cperl-hairy. They add a lot of neat features for automatic code completion in Perl.
==== perltidy ====
The following options are recommended when using perltidy to format your Perl code:
* -b : Backup and modify in place
* -ce : Enable the "cuddled else" style
Example: perltidy -ce -b Object.pm
This will tidy Object.pm and move your original to Object.pm.bak. Note that this **will** clobber an existing Object.pm.bak file!