mirror of
				https://github.com/subsurface/subsurface.git
				synced 2025-02-19 22:16:15 +00:00 
			
		
		
		
	With the current suggested settings in `CodingStyle` content of class blocks gets indented. To avoid this, value `g0` is added to cinoptions. In addition to this `TODO` thing, few additional options are suggested. - Included the value `(0` to cinoptions, to comply with the discontinuation of continuous lines as per Subsurface coding style recommendations. Add two options that aren't exactly about coding style but about convenience: - `hls` option to highlight all search options. - `is` option to do incremental search Signed-off-by: Lakshman Anumolu <acrlakshman@gmail.com> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
		
			
				
	
	
		
			229 lines
		
	
	
	
		
			6.8 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			229 lines
		
	
	
	
		
			6.8 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
| Coding Style
 | |
| ============
 | |
| 
 | |
| Here are some of the basics that we are trying to enforce for our coding
 | |
| style. The existing code (as of the commit that adds these lines) is not
 | |
| yet fully consistent to these rules, but following these rules will make
 | |
| sure that no one yells at you about your patches.
 | |
| 
 | |
| We have a script that can be used to reformat code to be reasonably close
 | |
| to these rules; it's in scripts/whitespace.pl - this script requires
 | |
| clang-format to be installed (which sadly isn't installed by default on
 | |
| any of our platforms; even on Mac where clang is the default compiler).
 | |
| 
 | |
| At the end of this file are some ideas for your .emacs file (if that's
 | |
| your editor of choice) as well as for QtCreator. If you have settings for
 | |
| other editors that implement this coding style, please add them here.
 | |
| 
 | |
| Basic rules
 | |
| ===========
 | |
| 
 | |
| - all indentation is tabs (set to 8 char) with the exception of
 | |
|   continuation lines that are alligned with tabs and then spaces
 | |
| 
 | |
| - all keywords followed by a '(' have a space in between
 | |
| 
 | |
| 	if (condition)
 | |
| 
 | |
| 	for (i = 0; i < 5; i++)
 | |
| 
 | |
| - function calls do NOT have a space between their name and argument
 | |
| 
 | |
| 	i = some_function(argument);
 | |
| 
 | |
| - usually there is no space on the inside of parenthesis (see examples
 | |
|   above)
 | |
| 
 | |
| - function / method implementations have their opening curly braces in
 | |
|   column 1
 | |
| 
 | |
| - all other opening curly braces follow at the end of the line, with a
 | |
|   space separating them:
 | |
| 
 | |
| 	if (condition) {
 | |
| 		dosomething();
 | |
| 	}
 | |
| 
 | |
| - both sides of an if / else clause either use or do not use curly braces:
 | |
| 
 | |
| 	if (condition)
 | |
| 		i = 4;
 | |
| 	else
 | |
| 		j = 6;
 | |
| 
 | |
| 	if (condition) {
 | |
| 		i = 6;
 | |
| 	} else {
 | |
| 		i = 4;
 | |
| 		j = 6;
 | |
| 	}
 | |
| 
 | |
| - use space to make visual separation easier
 | |
| 
 | |
| 	a = b + 3 + e / 4;
 | |
| 
 | |
| - continuation lines have the operator / comma at the end
 | |
| 
 | |
| 	if (very_long_conditiont_1 ||
 | |
| 	    condition_2)
 | |
| 
 | |
| 	b = a + (c + d +
 | |
| 		 f + z);
 | |
| 
 | |
| - in a C++ constructor initialization list, the colon is on the same line and
 | |
|   continuation lines are aligned as the rule above:
 | |
| 
 | |
| 	ClassName::ClassName() : x(1), y(2),
 | |
| 				 z(3)
 | |
| 	{
 | |
| 	}
 | |
| 
 | |
| - unfortunate inconsistency:
 | |
|   -- C code usually uses underscores to structure names
 | |
| 
 | |
| 	variable_in_C
 | |
| 
 | |
|   -- C++ code usually uses camelCase
 | |
| 
 | |
| 	variableInCPlusPlus
 | |
| 
 | |
|   where the two meet, use your best judgment and go for best consistency
 | |
|   (i.e., where does the variable "originate")
 | |
| 
 | |
| - switch statements with blocks are a little bit special (to avoid indenting
 | |
|   too far)
 | |
| 
 | |
| 	switch (foo) {
 | |
| 	case FIRST:
 | |
| 		whatever();
 | |
| 		break;
 | |
| 	case SECOND: {
 | |
| 		int i;
 | |
| 		for (i = 0; i < 5; i++)
 | |
| 			do_something(i);
 | |
| 	}
 | |
| 	}
 | |
| 
 | |
| Sample Settings
 | |
| ===============
 | |
| 
 | |
| Emacs
 | |
| -----
 | |
| 
 | |
| These lines in your .emacs file should get you fairly close when it comes
 | |
| to indentation - many of the other rules you have to follow manually
 | |
| 
 | |
| ;; indentation
 | |
| (defun c-lineup-arglist-tabs-only (ignored)
 | |
|   "Line up argument lists by tabs, not spaces"
 | |
|   (let* ((anchor (c-langelem-pos c-syntactic-element))
 | |
|          (column (c-langelem-2nd-pos c-syntactic-element))
 | |
|          (offset (- (1+ column) anchor))
 | |
|          (steps (floor offset c-basic-offset)))
 | |
|     (* (max steps 1)
 | |
|        c-basic-offset)))
 | |
| 
 | |
| (add-hook 'c-mode-common-hook
 | |
|           (lambda ()
 | |
|             ;; Add kernel style
 | |
|             (c-add-style
 | |
|              "linux-tabs-only"
 | |
|              '("linux" (c-offsets-alist
 | |
|                         (arglist-cont-nonempty
 | |
|                          c-lineup-gcc-asm-reg
 | |
|                          c-lineup-arglist-tabs-only))))))
 | |
| 
 | |
| (add-hook 'c-mode-hook
 | |
|           (lambda ()
 | |
|             (let ((filename (buffer-file-name)))
 | |
|               ;; Enable kernel mode for the appropriate files
 | |
|                 (setq indent-tabs-mode t)
 | |
|                 (c-set-style "linux-tabs-only"))))
 | |
| 
 | |
| (add-hook 'c++-mode-hook
 | |
|           (lambda ()
 | |
|             (let ((filename (buffer-file-name)))
 | |
|               ;; Enable kernel mode for the appropriate files
 | |
|                 (setq indent-tabs-mode t)
 | |
|                 (c-set-style "linux-tabs-only"))))
 | |
| 
 | |
| 
 | |
| QtCreator
 | |
| ---------
 | |
| 
 | |
| These settings seem to get indentation right in QtCreator. Making TAB
 | |
| always adjust indent makes it hard to add hard tabs before '\' when
 | |
| creating continuing lines. Copying a tab with your mouse / ctrl-C and
 | |
| inserting it with ctrl-V seems to work around that problem (use Command
 | |
| instead of ctrl on your Mac)
 | |
| 
 | |
| 
 | |
| <?xml version="1.0" encoding="UTF-8"?>
 | |
| <!DOCTYPE QtCreatorCodeStyle>
 | |
| <!-- Written by QtCreator 3.0.0, 2014-02-27T07:52:57. -->
 | |
| <qtcreator>
 | |
|  <data>
 | |
|   <variable>CodeStyleData</variable>
 | |
|   <valuemap type="QVariantMap">
 | |
|    <value type="bool" key="AlignAssignments">false</value>
 | |
|    <value type="bool" key="AutoSpacesForTabs">false</value>
 | |
|    <value type="bool" key="BindStarToIdentifier">true</value>
 | |
|    <value type="bool" key="BindStarToLeftSpecifier">false</value>
 | |
|    <value type="bool" key="BindStarToRightSpecifier">false</value>
 | |
|    <value type="bool" key="BindStarToTypeName">false</value>
 | |
|    <value type="bool" key="ExtraPaddingForConditionsIfConfusingAlign">false</value>
 | |
|    <value type="bool" key="IndentAccessSpecifiers">false</value>
 | |
|    <value type="bool" key="IndentBlockBody">true</value>
 | |
|    <value type="bool" key="IndentBlockBraces">false</value>
 | |
|    <value type="bool" key="IndentBlocksRelativeToSwitchLabels">false</value>
 | |
|    <value type="bool" key="IndentClassBraces">false</value>
 | |
|    <value type="bool" key="IndentControlFlowRelativeToSwitchLabels">true</value>
 | |
|    <value type="bool" key="IndentDeclarationsRelativeToAccessSpecifiers">true</value>
 | |
|    <value type="bool" key="IndentEnumBraces">false</value>
 | |
|    <value type="bool" key="IndentFunctionBody">true</value>
 | |
|    <value type="bool" key="IndentFunctionBraces">false</value>
 | |
|    <value type="bool" key="IndentNamespaceBody">false</value>
 | |
|    <value type="bool" key="IndentNamespaceBraces">false</value>
 | |
|    <value type="int" key="IndentSize">8</value>
 | |
|    <value type="bool" key="IndentStatementsRelativeToSwitchLabels">true</value>
 | |
|    <value type="bool" key="IndentSwitchLabels">false</value>
 | |
|    <value type="int" key="PaddingMode">2</value>
 | |
|    <value type="bool" key="SpacesForTabs">false</value>
 | |
|    <value type="int" key="TabSize">8</value>
 | |
|   </valuemap>
 | |
|  </data>
 | |
|  <data>
 | |
|   <variable>DisplayName</variable>
 | |
|   <value type="QString">Subsurface</value>
 | |
|  </data>
 | |
| </qtcreator>
 | |
| 
 | |
| 
 | |
| Vim
 | |
| ---------
 | |
| 
 | |
| As everybody knows vim is a way better editor than emacs and thus needs to be
 | |
| in this file to. Put this into your .vimrc and this should produce something
 | |
| close to our coding standards.
 | |
| 
 | |
| " Subsurface coding style
 | |
| filetype plugin indent on
 | |
| filetype detect
 | |
| set cindent tabstop=8 shiftwidth=8 cinoptions=l1,:0,(0,g0
 | |
| " TODO: extern "C" gets indented
 | |
| 
 | |
| " And some sane defaults, optional, but quite nice
 | |
| set nocompatible
 | |
| syntax on
 | |
| colorscheme default
 | |
| set hls
 | |
| set is
 | |
| 
 | |
| " The default blue is just impossible to see on a black terminal
 | |
| highlight Comment ctermfg=Brown
 | |
| 
 | |
| " clearly point out when someone have trailing spaces
 | |
| highlight ExtraWhitespace ctermbg=red guibg=red
 | |
| 
 | |
| " Show trailing whitespace and spaces before a tab:
 | |
| match ExtraWhitespace /\s\+$\| \+\ze\t/
 |