Warning, /frameworks/ktexteditor/src/script/data/indentation/cppstyle.README.md is written in an unsupported language. File is not indexed.
0001 C++/boost Style Indenter
0002 ========================
0003
0004 This indenter (initially) was designed to help code typing in a boost::mpl style
0005 (i.e. w/ leading comma in formatted parameters list). One may read rationale of such
0006 approach in the "C++ Template Metaprogramming: Concepts, Tools, and Techniques from Boost and Beyond"
0007 by David Abrahams and Aleksey Gurtovoy. It is really easy to miss a comma when "calling" templates and
0008 it would leads to really complicated compile errors. This technique helps to visually control syntax
0009 in a stricter way.
0010
0011 Example:
0012
0013 typedef typename boost::mpl::eval_if<
0014 boost::is_same<iter, boost::mpl::end<types_map>::type>
0015 , boost::mpl::int_<-1>
0016 , boost::mpl::distance<boost::mpl::begin<types_map>::type, iter>
0017 >::type type;
0018
0019 In practice I've noticed that this style can be used to format long function calls or even
0020 `for` statements. Actually everything that can be split into several lines could be formatted that way.
0021 And yes, it is convenient to have a delimiter (comma, semicolon, whatever) as leading character to
0022 make it visually noticeable.
0023
0024 // Inheritance list formatting
0025 struct sample
0026 : public base_1
0027 , public base_2
0028 , ...
0029 , public base_N
0030 {
0031 // Parameter list formatting
0032 void foo(
0033 const std::string& param_1 ///< A string parameter
0034 , double param_2 ///< A double parameter
0035 , ...
0036 , const some_type& param_N ///< An user defined type parameter
0037 )
0038 {
0039 //
0040 for (
0041 auto first = std::begin(param_1)
0042 , last = std::end(param_1)
0043 ; it != last
0044 ; ++it
0045 )
0046 {
0047 auto val = check_some_condition()
0048 ? get_then_value()
0049 : get_else_value()
0050 ;
0051 }
0052 }
0053 };
0054
0055 It looks unusual for awhile :) but later it become "normal" and easily to read and edit :)
0056 Really! When you want to add one more parameter to a function declaration or change order it will
0057 takes less typing comparing to "traditional" way :) (especially if you have some help from editor,
0058 like moving current line or selected block up/down by hotkey or having indenter like this :)
0059
0060 Features
0061 --------
0062
0063 * support for boost-like formatting style everywhere is possible
0064 * align inline comments to 60th position after typing `'//'`
0065 * turn `'///'` into `'/// '` or `'///< '` depending on comment placement
0066 * take care of inline comments when `ENTER` pressed on a commented line (before, middle or after comment start)
0067 * turn `'/*'` or `'/**'` into multiline (doxygen style) comment
0068 * auto continue multiline comment on `ENTER`
0069 * indent preprocessor directives according nesting level of `#if`/`#endif`
0070 * take care about backslashes alignment in preprocessor macro definitions
0071 * append a space after comma or some keywords (like `if`, `for`, `while`, etc...) or `operator<<`
0072 * align access modifiers
0073
0074
0075 TODO
0076 ----
0077
0078 Initially it was designed as typing helper and nowadays it lacks of align functionality (it's capable to
0079 align only few basic constructs). But I have plans to add some logic here to better align source code keeping
0080 C++/boost style in mind.