This is an old revision of the document!


Rosegarden Coding Style

Rosegarden house style is as follows, in approximately descending order of importance:

  • Class names are UpperCamelCase, method names are lowerCamelCase, non-public member variables are m_prefixedCamelCase, slot names start with “slot”.
  • Indentation is by four spaces at a time. There should be no tab characters anywhere in Rosegarden source code. The indentation should look the same regardless of whether you read it in an IDE, in a terminal window with “cat” or “vi”, in Emacs, or quoted in an email. It must not depend on having the right settings for tab-to-space conversion in your IDE when you read it. (Emacs and vim users will note that we already start every source file with a meta-comment that sets up the right indentation mode in these editors.)
  • Use doxygen-style comments for class and function documentation
    /** ... */

    or

    ///
  • No extra indentation inside namespaces; set off inner code by two carriage returns on either side of namespace brackets
namespace Rosegarden
{
// 1
// 2
class SomeUsefulClass
{
    // code 
};
// 1
// 2
}
  • Braces are what you might call Java-style, which means:
int
SomeClass::someMethod(int f)
{
   int result = 0;
   if (f >= 0) {
       for (int i = 0; i < f; ++i) {
           result += i;
       }
   } else {
       result = -1;
   }
   return result;
}
  • Single statement blocks are preferably either “inline” or bracketed. Like this:
   if (something) somethingElse();
   if (something) {
       somethingElse();
   }

but not:

   if (something)
       somethingElse();
  • Whitespace is much as in the above examples (outside but not inside “()”, after but not before “;”, etc.):
    connect(detailsButton, SIGNAL(clicked(bool)), this, SLOT(slotDetails()));

but not:

    connect( detailsButton, SIGNAL( clicked(bool) ), this, SLOT( slotDetails() ) );
  • If you have more arguments than will fit on a reasonable length line (80 characters is a good figure, but this is not a hard rule), align the extra arguments below and just after the opening ( rather than at a new level of indentation:
    connect(m_pluginList, SIGNAL(activated(int)),
            this, SLOT(slotPluginSelected(int)));

but not:

    connect(m_pluginList, SIGNAL(activated(int)),
        this, SLOT(slotPluginSelected(int)));
  • Use comment codes in your comments when appropriate:
Code Meaning
//!!!
TODO, or “this code is probably crap”
//&&&
Code temporarily disabled
//@@@
This code might not actually work
//###
Qt4 port info
  • If in doubt, please err on the side of putting in too many comments. We have contributors of all ability levels working here, and what may seem obvious to you might be complete gibberish to someone else. Comments give everyone a better chance to be useful, and they are always welcome, while nobody will think you are a super code warrior or code gazelle for committing a thousand lines that have only three choice comments
  • When commenting out a large block of text, it is preferable to use C++ style
    //

    comments instead of C-style

    /* */

    comments (except as applies to writing comments specific to doxygen.)

//&&& This code was deleted temporarily
//    for (int m = 0; m <= n; ++m) {
//        int x = s.x() + (int)((m * ((double)m * ax + bx)) / n);
//        int y = s.y() + (int)((m * ((double)m * ay + by)) / n);
//    }

but not:

//&&& This code was deleted temporarily
/*  for (int m = 0; m <= n; ++m) {
        int x = s.x() + (int)((m * ((double)m * ax + bx)) / n);
        int y = s.y() + (int)((m * ((double)m * ay + by)) / n);
    } */

(The reason C++-style comments are preferred is not arbitrary. C++-style comments are much more obvious when viewing diffs on the rosegarden-bugs list, because they force the entire block of text to be displayed, instead of only the starting and ending lines.)

  • Includes should try to follow the following pattern:
#include "MyHeader.h"

#include "MyCousinClassHeader.h"
#include "MyOtherCousin.h"

#include "RosegardenHeader.h"
#include "base/SomeOtherHeader.h"

#include <QSomeClass>
#include <QSomeOtherClass>

#include <some_stl_class>
#include <some_other_stl_class>
 
 
dev/coding_style.1234174309.txt.gz · Last modified: 2022/05/06 16:07 (external edit)
Recent changes RSS feed Creative Commons License Valid XHTML 1.0 Valid CSS Driven by DokuWiki