priority 0 global !p def complete(t, opts): if t: opts = [m[len(t):] for m in opts if m.startswith(t)] if len(opts) == 1: return opts[0] elif len(opts) == 0: return "-error" return '(' + '|'.join(opts) + ')' endglobal snippet i8 "int8_t" i int8_t endsnippet snippet u8 "uint8_t" i uint8_t endsnippet snippet i16 "int16_t" i int16_t endsnippet snippet u16 "uint16_t" i uint16_t endsnippet snippet i32 "int32_t" i int32_t endsnippet snippet u32 "uint32_t" i uint32_t endsnippet snippet i64 "int64_t" i int64_t endsnippet snippet u64 "uint64_t" i uint64_t endsnippet snippet #include "Include directive" #include <${1:header}> endsnippet snippet #define "Macro definition" #define ${1:SYMBOL} $0 endsnippet snippet #ifndef "Guarded macro definition" #ifndef ${1/([A-Za-z0-9_]+).*/$1/} #define ${1:SYMBOL} ${0:VALUE} #endif // ${1/([A-Za-z0-9_]+).*/$1/} endsnippet snippet #if "#if block" #if ${1:SYMBOL} $0 #endif // ${1/([A-Za-z0-9_]+).*/$1/} endsnippet snippet #ifdef "#if defined(...) block" #if defined(${1:SYMBOL}) $0 #endif // $1 endsnippet snippet once "Include guard" #ifndef ${2/([A-Za-z_]){1}([A-Za-z0-9_]+).*/$1$2/}$1 #define $2${1:`!p import string snip.rv = re.sub(r'[^A-Za-z0-9]+','_', snip.fn).upper()`_INCLUDED} $0 #endif // ${2/([A-Za-z_]){1}([A-Za-z0-9_]+).*/$1$2/}$1 endsnippet snippet typedef "Typedef" typedef ${1:type} ${2:custom_type};$0 endsnippet snippet enum "Typedef enumeration" typedef enum ${1:name} { $0 } $1; endsnippet snippet struct "Typedef struct" typedef struct ${1:name} { $0 } $1; endsnippet snippet if "If statement" if (${1:condition}) { $0 } endsnippet snippet else "Else continuation" else { $0 } endsnippet snippet elif "Else if continuation" else if (${1:condition}) { $0 } endsnippet snippet for "For loop, index or range" for (${1:int} ${2:index} = ${3:0}; $2 ${4:<} ${5:count}; $2${6:++}) { $0 } endsnippet snippet while "While loop" while (${1:condition}) { $0 } endsnippet snippet do "Do while loop" do { $0 } while (${1:condition}) endsnippet snippet switch "Switch statement" switch (${1:expression}) { $0 } endsnippet snippet case "Switch case" case ${1:constant}: { $0 } break; endsnippet snippet default "Switch default case" default: { $0 } break; endsnippet snippet main "Main function stub" int main(int argc, char **argv) { $0 } endsnippet # TODO: Should this be in all.snippets? # 1. Take the form ' TODO: issue ${1:id} $0' snippet todo "Todo comment" // TODO$1: $0 endsnippet # TODO: Should this be in all.snippets? # 1. Take the form ' NOTE: issue ${1:id} $0' snippet note "Note comment" // NOTE$1: $0 endsnippet snippet in "Doxygen [in]" i [in] endsnippet snippet out "Doxygen [out]" i [out] endsnippet snippet @param "Doxygen param tag" @param[$1`!p snip.rv = complete(t[1], ['in', 'out'])`] endsnippet snippet copydoc "Doxygen copydoc block" /// @copydoc $0 endsnippet