UltiSnips
UltiSnips is one of snippet systems for vim. Below are some UltiSnips snippets that other Chromium developers will hopefully find useful.
Demos
Copyright, include guard and namespace
The screencast below showcases how:
copyright+<tab>will fill-in current year#ifndef+<tab>will calculate the macro name based on the path of the current filenamespace+<tab>+namespace_name+tabwill copy the namespace name into a comment at the end of the namespace
Ad-hoc logging
The screenscast below showcases how:
<< some->expression.logme+<tab>includes the expression text in the output<< stack+<tab>logs the callstack
C++ Snippets
Copyright
snippet copyright
// Copyright `date +%Y` The Chromium Authors.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
$0
endsnippet
Include guard
This relies on current directory being the Chromium root directory.
snippet ifndef "include guard" w
ifndef ${1:`!p snip.rv=str(path).replace('/','_').replace('\\','_').replace('.','_').upper()+'_'`}
#define $1
$0
#endif // $1
endsnippet
Namespace
snippet namespace
namespace $1 {
$0
} // namespace $1
endsnippet
Ad-hoc logging
snippet LOG(ERROR)
LOG(ERROR) << __func__$0;
endsnippet
snippet "<<.(.+)\.logme" "Logging expansion" r
<< "; `!p snip.rv = match.group(1).replace('"', '\\"')` = " << `!p snip.rv = match.group(1)`$0
endsnippet
snippet "<<.(.+)\.logint" "Logging expansion" r
<< "; `!p snip.rv = match.group(1).replace('"', '\\"')` = " << static_cast<int>(`!p snip.rv = match.group(1)`)$0
endsnippet
snippet "<<.stack" "Logging expansion2" r
<< "; stack = " << base::debug::StackTrace().ToString()
endsnippet
snippet "<<.jstack" "Logging expansion2" r
<< "; js stack = "
<< [](){
char* buf = nullptr; size_t size = 0;
FILE* f = open_memstream(&buf, &size);
if (!f) return std::string("<mem error>");
v8::Message::PrintCurrentStackTrace(
v8::Isolate::GetCurrent(), f);
fflush(f); fclose(f);
std::string result(buf, size);
free(buf);
return result; }();
endsnippet