\documentclass{article} \usepackage{metatron} \title{LedgerSMB Coding Standards} \author{The LedgerSMB Development Team} \begin{document} \maketitle \tableofcontents \section{Introduction} Consistent coding style contributes to readability of code. This contributes in turn to fewer bugs and easier debugging. While consultants which implement custom solutions for their customers are not required to follow these coding guidelines, doing so will likely contribute to efficiency of the project and, if desired, the likelihood of having the changes accepted in the main source tree. \section{File Organization and Whitespace} Files should be organized according to three principles: atomicity, performance, and readability. While there is no stated maximum file size, there is no reason to group large amounts of code together when only a small subset of that code will be executed on any given run of the program. Similarly, core API for a single data structure entity may be grouped together even if each run may touch only a small part of the code so that these functions can be maintained together in a logical way. Nested blocks of code should be indented with a single tab. This way, programmers can adjust the tab width of their editors to their preferences. Lines longer than 79 characters are not handled well by many terminals and should generally be avoided. Continued lines should be indented by one more tab than either the line above or below (i.e. if the line above is indented by two tabs and the line below by three, indent the continued segment by four). Lines longer than 79 characters cause problems in some terminals and should be avoided. \section{Comments} In an ideal world, the code should be sufficiently readable to be entirely understandable without comments. Unfortunately, this sort of ideal is seldom attained. Comments should be used to annotate code and add information that is not already a part of code or programming logic itself. Comments may include arguments and return values of functions (for easy reference), a summary as to why a particular design choice was made, or a note to alert future programmers that a particular chunk of code deserves additional attention. Comments should not, however, merely indicate what the program is doing or how it does something. If such comments are required, that is a good indication that a block of code requires rewriting. Additionally it is a good idea to provide a brief description at the top of each file describing, in general terms, what its function is. \section{Function Organization} Functions should be atomic. While there is no maximum length to functions, long functions may be an indication that a function may be non-atomic. In general, when more than one line of code is being copied and pasted, it should instead be moved into its own function where it can be called by all entry points. \section{Security Practices} \subsection{Open} Perl's Open command should be called using its 3-argument form. The 2-argument form is considered dangerous because input could be used to override the file mode. \end{document}