MojoMojo development best practices

Below are the currently agreed-upon development practices for writing MojoMojo code. Discussion are welcome at discussion.

Code tidiness

  1. In Perl code, abide by perlstyle: use 4-space indentation, no tabs, spaces around operators etc. Really read perlstyle.

  2. Follow the Perl Best Practices. Ideally, your code should pass Perl::Critic on at least the gentle setting.

  3. In Template::Toolkit code, use 4-space indentation for HTML code, and 2-space indentation for TT code. See rationale and examples at Indenting TT and HTML.

  4. Line length is 120 characters per line (this happens to also be about how many characters fit in the GitHub UI at 100% zoom). Nobody really uses 80-character lines any more, many existing lines are already longer than 80 characters (and perltidy wraps them horrendously), and we don't print out code. If you are using Perl::Tidy to automatically format your code, you can set a different line length via:

    perltidy --perl-best-practices -l=115
  5. However, in the tradition of Catalyst code, use of perltidy is discouraged. For example, Catalyst::Stats does not vertically align on '.', and Catalyst::Test does not wrap at anything less than 112 characters.

  6. Marcus' last word on this is "In general I want catalyst style code, if people run perltidy on stuff they write, I don't mind. I just want a readable codebase that is easy to contribute to."

Development best practices

  1. All testable functions should have tests
  2. Every module and function should have POD documentation
  3. For JavaScript, use jQuery.
  4. HTML output should be XHTML 1.0 Strict
  5. CSS 2.


  1. We use Test::More and Test::Differences. The latter is very handy for diffing long outputs side-by-side, such as full formatter outputs from formatter_all_*.t.
  2. If you write failing tests for upcoming features (TDD), put them in Test::More TODO sections.
  3. Do not put failing regression tests in TODO sections just to have tests pass and ship. Work on fixing the code to pass the tests.

See also

My tags:
Popular tags:
Powered by Catalyst