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 "" return '[' + '|'.join(opts) + ']' endglobal snippet add_compile_options "add_compile_options" add_compile_options($1) endsnippet snippet add_custom_command "add_custom_command OUTPUT" add_custom_command(OUTPUT ${1:outputs...} COMMAND ${2:command}${3: COMMAND ${4:command}}${5: MAIN_DEPENDENCY ${6:depend}}${7: DEPENDS ${8:depends...}}${9: IMPLICIT_DEPENDS ${10:lang} ${11:depend}}${12: WORKING_DIRECTORY ${13:dir}}${14: COMMENT "${15:comment}"}${16: VERBATIM}${17: APPEND}) endsnippet snippet add_custom_command "add_custom_command TARGET" add_custom_command(TARGET ${1:target} $2`!p snip.rv=complete(t[2], ['PRE_BUILD', 'PRE_LINK', 'POST_BUILD'])` COMMAND ${3:command}${4: COMMAND ${5:command}}${6: WORKING_DIRECTORY ${7:directory}}${8: COMMENT "${9:comment}"}${10: VERBATIM}) endsnippet snippet add_custom_target "add_custom_target" add_custom_target(${1:target} ${2:ALL} ${3:command}${4: COMMAND ${5:command}}${6: DEPENDS ${7:depends...}}${8: WORKING_DIRECTORY ${9:directory}}${10: COMMENT "${11:comment}"}${12: VERBATIM}${13: SOURCES ${14:sources}}) endsnippet snippet add_definitions "add_definitions" add_definitions(-D${1:MACRO}$2) endsnippet snippet add_dependencies "add_dependencies" add_dependencies(${1:target} ${2:dependencies...}) endsnippet snippet add_executable "add_executable" add_executable(${1:target}${2: WIN32}${3: MACOSX_BUNDLE}${4: EXCLUDE_FROM_ALL} ${0:sources...}) endsnippet snippet add_library "add_library" add_library(${1:target} $2`!p snip.rv=complete(t[2], ['STATIC', 'SHARED', 'MODULE'])`${4: EXCLUDE_FROM_ALL} ${0:sources...}) endsnippet snippet add_subdirectory "add_subdirectory" add_subdirectory(${1:source_dir} ${2:binary_dir}${3: EXCLUDE_FROM_ALL}) endsnippet snippet add_test "add_test" add_test(NAME ${1:name} COMMAND ${2:command}${3: CONFIGURATIONS ${4:config}}${5: WORKING_DIRECTORY ${6:directory}}) endsnippet snippet aux_source_directory "aux_source_directory" aux_source_directory(${1:directory} ${2:variable}) endsnippet snippet break "break" break() endsnippet snippet build_command "build_command" build_command(${1:variable}${2: CONFIGURATION ${3:config}}${4: TARGET ${6:target}}) endsnippet snippet cmake_host_system_information "cmake_host_system_information" cmake_host_system_information(RESULT ${1:variable} QUERY $2`!p snip.rv=complete(t[2], ['NUMBER_OF_LOGICAL_CORES', 'NUMBER_OF_PHYSICAL_CORES', 'HOSTNAME', 'FQDN', 'TOTAL_VIRTUAL_MEMORY', 'AVAILABLE_VIRTUAL_MEMORY', 'TOTAL_PHYSICAL_MEMORY', 'AVAILABLE_PHYSICAL_MEMORY'])`) endsnippet snippet cmake_minimum_required "cmake_minimum_required" cmake_minimum_required(VERSION $1${2: FATAL_ERROR}) endsnippet snippet cmake_policy "cmake_policy VERSION" cmake_policy(VERSION ${1:version}) endsnippet snippet cmake_policy "cmake_policy SET" cmake_policy(SET CMP${1:0000} $2`!p snip.rv=complete(t[2], ['OLD', 'NEW'])`) endsnippet snippet cmake_policy "cmake_policy GET" cmake_policy(GET CMP${1:0000} ${2:variable}) endsnippet snippet cmake_policy "cmake_policy PUSH/POP" cmake_policy($1`!p snip.rv=complete(t[1], ['PUSH', 'POP'])`) endsnippet # TODO: file() # TODO: find_file() # TODO: find_package() # TODO: find_path() # TODO: find_program() snippet foreach "foreach" foreach(${1:ITEM} \$\{${2:LIST}\}) $0 endforeach() endsnippet snippet function "function" function(${1:NAME} ${2:...}) $0 endfunction() endsnippet global !p def if_completion_list(): return ['NOT', 'COMMAND', 'POLICY', 'TARGET', 'EXISTS', 'IS_DIRECTORY', 'IS_SYMLINK', 'IS_ABSOLUTE', 'DEFINED'] endglobal snippet if "if" if($1`!p snip.rv=complete(t[1], if_completion_list()) + ' '`$2) $0 endif() endsnippet snippet elseif "elseif" elseif($1`!p snip.rv=complete(t[1], if_completion_list()) + ' '`$0) endsnippet snippet include_directories "include_directories" include_directories(\$\{${1:CMAKE_CURRENT_SOURCE_DIR}\}/$0) endsnippet # TODO: install() # TODO: list() snippet message "message" message($1`!p snip.rv=complete(t[1], ['STATUS', 'WARNING', 'AUTHOR_WARNING', 'SEND_ERROR', 'FATAL_ERROR', 'DEPRECATION'])` "$2") endsnippet snippet set "set" set(${1:VARIABLE} ${2:VALUE}) endsnippet # TODO: set_property() # TODO: set_target_properties() # TODO: string() snippet option "option" option(${1:OPTION} "${2:Description}." $3`!p snip.rv=complete(t[3], ['ON', 'OFF'])`) endsnippet # TODO: target_include_directories() snippet target_link_libraries "target_link_libraries" target_link_libraries(${1:TARGET} ${2:LIBRARIES}) endsnippet