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] if len(opts) > 5: opts = opts[0:5] return "(" + "|".join(opts) + ")" def find_candidate(tabstop, search_type): # Split up the tabstop on semicolons items = tabstop.replace("\n", "").replace(" ", "").split(";") # find multiple same time assignments (a, b : Integer) single_items = [] for item in items: if (len(item.split(",")) > 1) and (len(item.split(":")) > 1): variables = item.split(":")[0] multi_type = item.split(":")[1] for variable in variables.split(","): single_items.append(f"{variable}:{multi_type}") else: single_items.append(item) for candidate in single_items: if len(candidate.split(":")) > 1: name = candidate.split(":")[0] candidate_type = candidate.split(":")[1] else: name = "None" candidate_type = "" if candidate_type == search_type: return name return "None" endglobal snippet helloworld "Hello world example to test features" b -- `!p snip.rv = fn` -- Created on: `date` -- Author(s): Yannick Reiss -- Content: Hello world example with Ada.Text_IO; use Ada.Text_IO; -- @name ${1:`!p snip.rv = fn[0].upper() + fn[1:].split('.')[0]`} -- @return -- @description Function printing hello world. procedure $1 is begin ${2:Put_Line ("Hello world!");} end $1;$0 endsnippet snippet docstring "Document String with most important information" b -- `!p snip.rv = fn` -- Created on: `date` -- Author(s): ${1:Yannick Reiß} -- Description: ${2:`!p snip.rv = fn.split('.')[0]`} $0 endsnippet snippet procedure "insert procedure" b -- @name $1 -- @return `!p snip.rv = "" if t[2].startswith("l"): parameters = [] else: parameters = t[2].replace("; ", ";").replace('in ', '').replace('out ', '') parameters = parameters.replace(' ', '').split(";"); parameter_list = [] for parameter in parameters: if len(parameter.split(',')) == 1: parameter_list.append(parameter) else: try: list_type = parameter.split(':')[1] except: list_type = "???" list_parameters = parameter.split(':')[0].replace(' ', '').split(',') for sub_parameter in list_parameters: parameter_list.append(f"{sub_parameter}\t:\t{list_type}") for parameter in parameter_list: if not parameter == "" and not parameter.startswith("typ"): parameterless = parameter.replace("\t", "") snip.rv += f"-- @parameter {parameterless}\n" ``!p snip.rv = "" if t[3].startswith("l"): variables = [] else: variables = t[3].replace("\n", "").split(";"); for variable in variables: if not variable == "" and not variable.startswith("typ"): variableless = variable.replace("\t", "").replace (" ", "") snip.rv += f"\t-- @variable {variableless}\n" `-- @description $4 procedure ${1:`!p snip.rv = fn.split('.')[0].capitalize()`} `!p snip.rv = "" if t[2] == "" else "("`${2:N : Natural}`!p snip.rv = "" if t[2] == "" else ")"` is $3 begin $5 end $1;$0 endsnippet snippet function "insert function" b -- @name $1 -- @return $3 `!p snip.rv = "" if t[2].startswith("l"): parameters = [] else: parameters = t[2].replace("; ", ";").replace('in ', '').replace('out ', '') parameters = parameters.replace(' ', '').split(";"); parameter_list = [] for parameter in parameters: if len(parameter.split(',')) == 1: parameter_list.append(parameter) else: try: list_type = parameter.split(':')[1] except: list_type = "???" list_parameters = parameter.split(':')[0].replace(' ', '').split(',') for sub_parameter in list_parameters: parameter_list.append(f"{sub_parameter}\t:\t{list_type}") for parameter in parameter_list: if not parameter == "" and not parameter.startswith("typ"): parameterless = parameter.replace("\t", "") snip.rv += f"\t-- @parameter {parameterless}\n" ``!p snip.rv = "" if t[4].startswith("l"): variables = [] else: variables = t[4].replace("\n", "").split(";"); for variable in variables: if not variable == "" and not variable.startswith("typ") and not variable.startswith("--"): variableless = variable.replace("\t", "").replace (" ", "") snip.rv += f"\t-- @variable {variableless}\n" ` -- @description $5 function ${1:`!p snip.rv = fn.split('.')[0].capitalize()`} `!p snip.rv = "" if t[2] == "" else "("`${2:N : Natural}`!p snip.rv = "" if t[2] == "" else ")"` return ${3:Natural} is $4 begin $6 return `!p candidate = find_candidate(t[4], t[3]) if candidate == "None": candidate = find_candidate(t[2], t[3]) if candidate == "None": candidate = t[1] snip.rv = candidate `; end $1;$0 endsnippet snippet type "declare a new type" bA type ${1:TypeName} is ${2:array($3..$4) of }`!p if t[2] == "record": snip.rv = "\n\t\t" else: snip.rv = ""`$5`!p if t[2] == "record": snip.rv = "\n\tend record" else: snip.rv = "" `;$0 endsnippet snippet project "Project" b project ${1:Default} is for Source_Dirs use ("${2:src}"); for Object_Dir use "${3:obj}"; for Exec_Dir use "${4:bin}"; for Main use ("${5:main.adb}"); for Languages use ("Ada"); end $1; -- Create dir? (y/): ${6:no}`!p from os import system if t[6] == "y": system(f"mkdir -p {t[2]}") system(f"mkdir -p {t[3]}") system(f"mkdir -p {t[4]}")` endsnippet snippet package "Create package configuration" b package ${1:body }${2:`!p package_name = fn.split('.')[0] snip.rv = package_name[0].upper() + package_name[1:]`} is $0 end $2; endsnippet