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 file
  • namespace + <tab> + namespace_name + tab will copy the namespace name into a comment at the end of the namespace

screencast

Ad-hoc logging

The screenscast below showcases how:

  • << some->expression.logme + <tab> includes the expression text in the output
  • << stack + <tab> logs the callstack

screencast

C++ Snippets

Copyright

snippet copyright
// Copyright `date +%Y` The Chromium Authors. All rights reserved.
// 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