From ebaae7766ab5048c47e23bf754a022be82a6fda4 Mon Sep 17 00:00:00 2001 From: Maxime Coste Date: Tue, 7 Oct 2014 09:19:46 +0100 Subject: [PATCH] Add a coding style document Fixes #58 --- doc/coding-style.asciidoc | 72 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 doc/coding-style.asciidoc diff --git a/doc/coding-style.asciidoc b/doc/coding-style.asciidoc new file mode 100644 index 00000000..b6e126ef --- /dev/null +++ b/doc/coding-style.asciidoc @@ -0,0 +1,72 @@ +C++ Coding Style +================ + +Kakoune is written in C++11, here are the main coding style points: + + * Avoid external dependencies besides posix/stdc++/ncurses + + - That means avoid depending on boost, it is only allowed for regex + support until stdc++ regex are more widely available. + + * 4 spaces for indentation, no tabs + + * public interface before private methods/data when defining a class + + * use +override+ keyword for overriden virtual methods + + * opening brackets on their own lines by default, except when declaring + an object where the opening bracket follows the equal sign. + +----- +int func() +{ + if (condition) + { + ... + } + else + statement; +} + +int array[] = { +... +}; +----- + + * End lines with an operator when continuing on the next line + +---- +if (condition1 || + condition2) +---- + + * Try to keep under 80 columns, even though this is not a strict limit. + + * CamelCase for types, snake_case for variables/function names + + * prefix fields with m_, static ones with ms_ except for dumb structs + (struct with every field public) where these prefixes can be dropped. + + * use const and constexpr liberally + +Kakrc coding style +================== + + * kak scripts can depend on tools that can be reasonable expected for + their use context: + + - mime.kak which handles file type detection uses the +file+ command + which is deemed ubiquitous enough. + + - clang.kak provides c++ completion using clang, + + * It is better to keep kak scripts POSIX. Consider %sh{...} blocks + as executed by a POSIX shell. Avoid non posix extensions to common + tools. + + * Avoid too much comlexity/logic in kak scripts. They are not meant + to implement generic tools, only to transform a general tool output + to Kakoune commands. + + - Write generic, editor independent tools as a separate project, + Add kakoune support as a kak script.