nvim/UltiSnips/ada.snippets

184 lines
4.5 KiB
Plaintext

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 <yannick.reiss@nickr.eu>
-- 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("; ", ";").split(";");
for parameter in parameters:
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"-- @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("; ", ";").split(";");
for parameter in parameters:
if not parameter == "" and not parameter.startswith("typ"):
parameterless = parameter.replace("\t", "")
snip.rv += f"-- @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"-- @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 if "If condition" b
if $1 then
$2
$3`!p snip.rv = complete(t[3], ["elsif", "else", "end if;"])` ${4:`!p if t[3] == "elsif":
snip.rv = "condition"
else:
snip.rv = ""`} `!p
if t[3] == "elsif":
snip.rv = "then"`
$5
`!p if t[3] == "end if;":
snip.rv = ""
else:
snip.rv = "end if;"`$0
endsnippet
snippet for "For loop" b
for ${1:i} ${2:in ${3:1}..${4:10}} loop
$5
end loop;$0
endsnippet
snippet while "While loop" b
while ${1:Condition} loop
$2
end loop;$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;
endsnippet