-
Notifications
You must be signed in to change notification settings - Fork 12
/
Convert function signature.tmCommand
62 lines (55 loc) · 1.36 KB
/
Convert function signature.tmCommand
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>beforeRunningCommand</key>
<string>nop</string>
<key>command</key>
<string>#!/usr/bin/env ruby18
# Converts function signatures into function defs
# val of_gtk : ?cols:cols
# -> ?expand:expand
# -> ?fill:bool
# -> GObj.widget
# -> unit t
val = $stdin.read
start_padding = val[/^\s*/m]
end_padding = val[/\s*$/m]
val.strip!
parts = val.split(/:/)
name = parts[0]
name.sub!(/^(\s*)val/, "\1let")
args = parts[1..-1].join(':').split(/\s*->\s*/)
next_arg = 'a'
args = args.map do |arg|
arg.strip!
if arg =~ /^\?.*:/
arg[/^(\?.*?):/, 1]
elsif arg =~ /:/
"~" + arg[/^(.*?):/, 1]
elsif arg == "unit"
"()"
else
arg = next_arg
next_arg = next_arg.succ
arg
end
end
print "#{start_padding}#{name.rstrip} #{args.join(' ')} =\n\n;;#{end_padding}"
</string>
<key>fallbackInput</key>
<string>line</string>
<key>input</key>
<string>selection</string>
<key>keyEquivalent</key>
<string>^~@c</string>
<key>name</key>
<string>Convert function signature</string>
<key>output</key>
<string>replaceSelectedText</string>
<key>scope</key>
<string>source.ocaml</string>
<key>uuid</key>
<string>BD73877C-081E-4326-A532-8117047F6B1A</string>
</dict>
</plist>