Created
June 29, 2021 18:32
-
-
Save lambdalisue/e6d2ee5f14fa1d517d10d830f7b08097 to your computer and use it in GitHub Desktop.
Parse Vim's `eval.txt` to generate function definition JSON
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| const tagPattern = /\*(.+)\(\)\*/; | |
| function* parse(content: string): Generator<{ fn: string, args: string[] }> { | |
| const lines = content.split("\n"); | |
| const founds = lines.flatMap((v, i) => { | |
| const m = v.match(tagPattern); | |
| if (!m) { | |
| return []; | |
| } | |
| const index = i; | |
| const fn = m[1]; | |
| return [{ index, fn }]; | |
| }); | |
| for (const { index, fn } of founds) { | |
| const pattern = new RegExp(`${fn}\\(\(.*?\)\\)`); | |
| const m = lines[index].match(pattern) || lines[index + 1].match(pattern); | |
| if (!m) { | |
| continue; | |
| } | |
| const args = m[1].replace(/[\[\]\{\}]/g, '').split(',').map(s => s.trim()); | |
| yield { | |
| fn, | |
| args, | |
| } | |
| } | |
| } | |
| const content = await Deno.readTextFile("./eval.txt"); | |
| const result = [...parse(content)]; | |
| console.log(JSON.stringify(result, undefined, 2)); |
Author
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Neovim 0.5
[ { "fn": "abs", "args": [ "expr" ] }, { "fn": "acos", "args": [ "expr" ] }, { "fn": "add", "args": [ "list", "expr" ] }, { "fn": "and", "args": [ "expr", "expr" ] }, { "fn": "api_info", "args": [ "" ] }, { "fn": "append", "args": [ "lnum", "text" ] }, { "fn": "appendbufline", "args": [ "expr", "lnum", "text" ] }, { "fn": "argc", "args": [ "" ] }, { "fn": "argidx", "args": [ "" ] }, { "fn": "arglistid", "args": [ "" ] }, { "fn": "argv", "args": [ "" ] }, { "fn": "asin", "args": [ "expr" ] }, { "fn": "atan", "args": [ "expr" ] }, { "fn": "atan2", "args": [ "expr1", "expr2" ] }, { "fn": "browse", "args": [ "" ] }, { "fn": "browsedir", "args": [ "" ] }, { "fn": "bufadd", "args": [ "name" ] }, { "fn": "bufexists", "args": [ "expr" ] }, { "fn": "buflisted", "args": [ "expr" ] }, { "fn": "bufload", "args": [ "expr" ] }, { "fn": "bufloaded", "args": [ "expr" ] }, { "fn": "bufname", "args": [ "expr" ] }, { "fn": "bufnr", "args": [ "" ] }, { "fn": "bufwinid", "args": [ "expr" ] }, { "fn": "bufwinnr", "args": [ "expr" ] }, { "fn": "byte2line", "args": [ "byte" ] }, { "fn": "byteidx", "args": [ "expr", "nr" ] }, { "fn": "byteidxcomp", "args": [ "expr", "nr" ] }, { "fn": "call", "args": [ "func", "arglist", "dict" ] }, { "fn": "ceil", "args": [ "expr" ] }, { "fn": "changenr", "args": [ "" ] }, { "fn": "chanclose", "args": [ "id", "stream" ] }, { "fn": "chansend", "args": [ "id", "data" ] }, { "fn": "char2nr", "args": [ "expr", "utf8" ] }, { "fn": "charidx", "args": [ "" ] }, { "fn": "cindent", "args": [ "lnum" ] }, { "fn": "clearmatches", "args": [ "win" ] }, { "fn": "col", "args": [ "" ] }, { "fn": "complete", "args": [ "startcol", "matches" ] }, { "fn": "complete_add", "args": [ "expr" ] }, { "fn": "complete_check", "args": [ "" ] }, { "fn": "complete_info", "args": [ "" ] }, { "fn": "confirm", "args": [ "" ] }, { "fn": "copy", "args": [ "" ] }, { "fn": "cos", "args": [ "expr" ] }, { "fn": "cosh", "args": [ "expr" ] }, { "fn": "count", "args": [ "comp", "expr", "ic", "start" ] }, { "fn": "cscope_connection", "args": [ "" ] }, { "fn": "ctxget", "args": [ "index" ] }, { "fn": "ctxpop", "args": [ "" ] }, { "fn": "ctxpush", "args": [ "types" ] }, { "fn": "ctxset", "args": [ "context", "index" ] }, { "fn": "ctxsize", "args": [ "" ] }, { "fn": "cursor", "args": [ "lnum", "col", "off" ] }, { "fn": "deepcopy", "args": [ "expr", "noref" ] }, { "fn": "delete", "args": [ "fname", "flags" ] }, { "fn": "deletebufline", "args": [ "expr", "first", "last" ] }, { "fn": "dictwatcheradd", "args": [ "dict", "pattern", "callback" ] }, { "fn": "dictwatcherdel", "args": [ "dict", "pattern", "callback" ] }, { "fn": "did_filetype", "args": [ "" ] }, { "fn": "diff_filler", "args": [ "lnum" ] }, { "fn": "diff_hlID", "args": [ "lnum", "col" ] }, { "fn": "empty", "args": [ "expr" ] }, { "fn": "environ", "args": [ "" ] }, { "fn": "escape", "args": [ "string", "chars" ] }, { "fn": "eval", "args": [ "" ] }, { "fn": "eventhandler", "args": [ "" ] }, { "fn": "executable", "args": [ "expr" ] }, { "fn": "execute", "args": [ "command", "silent" ] }, { "fn": "exepath", "args": [ "expr" ] }, { "fn": "exists", "args": [ "" ] }, { "fn": "exp", "args": [ "expr" ] }, { "fn": "debugbreak", "args": [ "pid" ] }, { "fn": "expand", "args": [ "expr", "nosuf", "list" ] }, { "fn": "expandcmd", "args": [ "expr" ] }, { "fn": "extend", "args": [ "expr1", "expr2", "expr3" ] }, { "fn": "feedkeys", "args": [ "string", "mode" ] }, { "fn": "filereadable", "args": [ "file" ] }, { "fn": "filewritable", "args": [ "file" ] }, { "fn": "filter", "args": [ "expr1", "expr2" ] }, { "fn": "finddir", "args": [ "name", "path", "count" ] }, { "fn": "findfile", "args": [ "name", "path", "count" ] }, { "fn": "flatten", "args": [ "list", "maxdepth" ] }, { "fn": "float2nr", "args": [ "expr" ] }, { "fn": "floor", "args": [ "expr" ] }, { "fn": "fmod", "args": [ "expr1", "expr2" ] }, { "fn": "fnameescape", "args": [ "string" ] }, { "fn": "fnamemodify", "args": [ "fname", "mods" ] }, { "fn": "foldclosed", "args": [ "lnum" ] }, { "fn": "foldclosedend", "args": [ "lnum" ] }, { "fn": "foldlevel", "args": [ "lnum" ] }, { "fn": "foldtext", "args": [ "" ] }, { "fn": "foldtextresult", "args": [ "lnum" ] }, { "fn": "foreground", "args": [ "" ] }, { "fn": "funcref", "args": [ "" ] }, { "fn": "function", "args": [ "" ] }, { "fn": "garbagecollect", "args": [ "atexit" ] }, { "fn": "get", "args": [ "list", "idx", "default" ] }, { "fn": "getbufinfo", "args": [ "" ] }, { "fn": "getbufline", "args": [ "" ] }, { "fn": "getbufvar", "args": [ "expr", "varname", "def" ] }, { "fn": "getchangelist", "args": [ "expr" ] }, { "fn": "getchar", "args": [ "expr" ] }, { "fn": "getcharmod", "args": [ "" ] }, { "fn": "getcharsearch", "args": [ "" ] }, { "fn": "getcmdline", "args": [ "" ] }, { "fn": "getcmdpos", "args": [ "" ] }, { "fn": "getcmdtype", "args": [ "" ] }, { "fn": "getcmdwintype", "args": [ "" ] }, { "fn": "getcompletion", "args": [ "pat", "type", "filtered" ] }, { "fn": "getcurpos", "args": [ "" ] }, { "fn": "getcwd", "args": [ "winnr", "tabnr" ] }, { "fn": "getenv", "args": [ "name" ] }, { "fn": "getfontname", "args": [ "name" ] }, { "fn": "getfperm", "args": [ "fname" ] }, { "fn": "getfsize", "args": [ "fname" ] }, { "fn": "getftime", "args": [ "fname" ] }, { "fn": "getftype", "args": [ "fname" ] }, { "fn": "getjumplist", "args": [ "winnr", "tabnr" ] }, { "fn": "getline", "args": [ "" ] }, { "fn": "getloclist", "args": [ "nr", "", "what" ] }, { "fn": "getmarklist", "args": [ "expr" ] }, { "fn": "getmatches", "args": [ "win" ] }, { "fn": "getpid", "args": [ "" ] }, { "fn": "getpos", "args": [ "" ] }, { "fn": "getqflist", "args": [ "what" ] }, { "fn": "getreg", "args": [ "regname", "1", "list" ] }, { "fn": "getregtype", "args": [ "regname" ] }, { "fn": "gettabinfo", "args": [ "arg" ] }, { "fn": "gettabvar", "args": [ "tabnr", "varname", "def" ] }, { "fn": "gettabwinvar", "args": [ "tabnr", "winnr", "varname", "def" ] }, { "fn": "gettagstack", "args": [ "nr" ] }, { "fn": "getwininfo", "args": [ "winid" ] }, { "fn": "getwinpos", "args": [ "timeout" ] }, { "fn": "getwinposx", "args": [ "" ] }, { "fn": "getwinposy", "args": [ "" ] }, { "fn": "getwinvar", "args": [ "winnr", "varname", "def" ] }, { "fn": "glob", "args": [ "expr", "nosuf", "list", "alllinks" ] }, { "fn": "glob2regpat", "args": [ "expr" ] }, { "fn": "globpath", "args": [ "" ] }, { "fn": "has", "args": [ "" ] }, { "fn": "has_key", "args": [ "dict", "key" ] }, { "fn": "haslocaldir", "args": [ "winnr", "tabnr" ] }, { "fn": "hasmapto", "args": [ "what", "mode", "abbr" ] }, { "fn": "histadd", "args": [ "history", "item" ] }, { "fn": "histdel", "args": [ "history", "item" ] }, { "fn": "histget", "args": [ "history", "index" ] }, { "fn": "histnr", "args": [ "history" ] }, { "fn": "hlexists", "args": [ "name" ] }, { "fn": "hlID", "args": [ "" ] }, { "fn": "hostname", "args": [ "" ] }, { "fn": "iconv", "args": [ "expr", "from", "to" ] }, { "fn": "indent", "args": [ "" ] }, { "fn": "index", "args": [ "list", "expr", "start", "ic" ] }, { "fn": "input", "args": [ "prompt", "text", "completion" ] }, { "fn": "inputlist", "args": [ "textlist" ] }, { "fn": "inputrestore", "args": [ "" ] }, { "fn": "inputsave", "args": [ "" ] }, { "fn": "inputsecret", "args": [ "prompt", "text" ] }, { "fn": "insert", "args": [ "list", "item", "idx" ] }, { "fn": "interrupt", "args": [ "" ] }, { "fn": "invert", "args": [ "expr" ] }, { "fn": "isdirectory", "args": [ "directory" ] }, { "fn": "isinf", "args": [ "expr" ] }, { "fn": "islocked", "args": [ "expr" ] }, { "fn": "id", "args": [ "expr" ] }, { "fn": "items", "args": [ "dict" ] }, { "fn": "isnan", "args": [ "expr" ] }, { "fn": "jobpid", "args": [ "job" ] }, { "fn": "jobresize", "args": [ "job", "width", "height" ] }, { "fn": "jobstart", "args": [ "cmd", "opts" ] }, { "fn": "jobstop", "args": [ "id" ] }, { "fn": "jobwait", "args": [ "jobs", "timeout" ] }, { "fn": "join", "args": [ "list", "sep" ] }, { "fn": "json_decode", "args": [ "expr" ] }, { "fn": "json_encode", "args": [ "expr" ] }, { "fn": "keys", "args": [ "dict" ] }, { "fn": "len", "args": [ "" ] }, { "fn": "libcall", "args": [ "" ] }, { "fn": "libcallnr", "args": [ "" ] }, { "fn": "line", "args": [ "" ] }, { "fn": "line2byte", "args": [ "lnum" ] }, { "fn": "lispindent", "args": [ "lnum" ] }, { "fn": "list2str", "args": [ "list", "utf8" ] }, { "fn": "localtime", "args": [ "" ] }, { "fn": "log", "args": [ "expr" ] }, { "fn": "log10", "args": [ "expr" ] }, { "fn": "map", "args": [ "expr1", "expr2" ] }, { "fn": "maparg", "args": [ "name", "mode", "abbr", "dict" ] }, { "fn": "mapcheck", "args": [ "name", "mode", "abbr" ] }, { "fn": "match", "args": [ "expr", "pat", "start", "count" ] }, { "fn": "strpbrk", "args": [ "" ] }, { "fn": "strcasestr", "args": [ "" ] }, { "fn": "matchadd", "args": [ "" ] }, { "fn": "matchaddpos", "args": [ "" ] }, { "fn": "matcharg", "args": [ "nr" ] }, { "fn": "matchdelete", "args": [ "id", "win" ] }, { "fn": "matchend", "args": [ "expr", "pat", "start", "count" ] }, { "fn": "matchlist", "args": [ "expr", "pat", "start", "count" ] }, { "fn": "matchstr", "args": [ "expr", "pat", "start", "count" ] }, { "fn": "matchstrpos", "args": [ "expr", "pat", "start", "count" ] }, { "fn": "max", "args": [ "" ] }, { "fn": "menu_get", "args": [ "path", "modes" ] }, { "fn": "min", "args": [ "" ] }, { "fn": "mkdir", "args": [ "" ] }, { "fn": "mode", "args": [ "" ] }, { "fn": "msgpackdump", "args": [ "list" ] }, { "fn": "msgpackparse", "args": [ "list" ] }, { "fn": "nextnonblank", "args": [ "lnum" ] }, { "fn": "nr2char", "args": [ "expr", "utf8" ] }, { "fn": "or", "args": [ "expr", "expr" ] }, { "fn": "pathshorten", "args": [ "expr" ] }, { "fn": "perleval", "args": [ "expr" ] }, { "fn": "pow", "args": [ "x", "y" ] }, { "fn": "prevnonblank", "args": [ "lnum" ] }, { "fn": "printf", "args": [ "fmt", "expr1 ..." ] }, { "fn": "prompt_getprompt", "args": [ "buf" ] }, { "fn": "prompt_setcallback", "args": [ "buf", "expr" ] }, { "fn": "prompt_setinterrupt", "args": [ "buf", "expr" ] }, { "fn": "prompt_setprompt", "args": [ "buf", "text" ] }, { "fn": "pum_getpos", "args": [ "" ] }, { "fn": "pumvisible", "args": [ "" ] }, { "fn": "py3eval", "args": [ "expr" ] }, { "fn": "pyeval", "args": [ "expr" ] }, { "fn": "pyxeval", "args": [ "expr" ] }, { "fn": "range", "args": [ "expr", "max", "stride" ] }, { "fn": "readdir", "args": [ "" ] }, { "fn": "readfile", "args": [ "" ] }, { "fn": "reg_executing", "args": [ "" ] }, { "fn": "reg_recording", "args": [ "" ] }, { "fn": "reltime", "args": [ "start", "end" ] }, { "fn": "reltimefloat", "args": [ "time" ] }, { "fn": "reltimestr", "args": [ "time" ] }, { "fn": "remote_expr", "args": [ "" ] }, { "fn": "remote_foreground", "args": [ "server" ] }, { "fn": "remote_peek", "args": [ "serverid", "retvar" ] }, { "fn": "remote_read", "args": [ "serverid", "timeout" ] }, { "fn": "remote_send", "args": [ "" ] }, { "fn": "remote_startserver", "args": [ "" ] }, { "fn": "remove", "args": [ "list", "idx", "end" ] }, { "fn": "rename", "args": [ "from", "to" ] }, { "fn": "repeat", "args": [ "expr", "count" ] }, { "fn": "resolve", "args": [ "filename" ] }, { "fn": "reverse", "args": [ "" ] }, { "fn": "round", "args": [ "expr" ] }, { "fn": "rpcnotify", "args": [ "channel", "event", "args..." ] }, { "fn": "rpcrequest", "args": [ "channel", "method", "args..." ] }, { "fn": "rpcstart", "args": [ "prog", "argv" ] }, { "fn": "rubyeval", "args": [ "expr" ] }, { "fn": "screenattr", "args": [ "row", "col" ] }, { "fn": "screenchar", "args": [ "row", "col" ] }, { "fn": "screencol", "args": [ "" ] }, { "fn": "screenpos", "args": [ "winid", "lnum", "col" ] }, { "fn": "screenrow", "args": [ "" ] }, { "fn": "search", "args": [ "pattern", "flags", "stopline", "timeout" ] }, { "fn": "searchcount", "args": [ "options" ] }, { "fn": "searchdecl", "args": [ "name", "global", "thisblock" ] }, { "fn": "searchpair", "args": [ "" ] }, { "fn": "searchpairpos", "args": [ "" ] }, { "fn": "searchpos", "args": [ "pattern", "flags", "stopline", "timeout" ] }, { "fn": "server2client", "args": [ "clientid", "string" ] }, { "fn": "serverlist", "args": [ "" ] }, { "fn": "serverstart", "args": [ "address" ] }, { "fn": "serverstop", "args": [ "address" ] }, { "fn": "setbufline", "args": [ "expr", "lnum", "text" ] }, { "fn": "setbufvar", "args": [ "expr", "varname", "val" ] }, { "fn": "setcharsearch", "args": [ "dict" ] }, { "fn": "setcmdpos", "args": [ "pos" ] }, { "fn": "setenv", "args": [ "name", "val" ] }, { "fn": "setfperm", "args": [ "fname", "mode" ] }, { "fn": "setline", "args": [ "lnum", "text" ] }, { "fn": "setloclist", "args": [ "nr", "list", "action", "what" ] }, { "fn": "setmatches", "args": [ "list", "win" ] }, { "fn": "setpos", "args": [ "" ] }, { "fn": "setqflist", "args": [ "list", "action", "what" ] }, { "fn": "setreg", "args": [ "" ] }, { "fn": "settabvar", "args": [ "tabnr", "varname", "val" ] }, { "fn": "settabwinvar", "args": [ "tabnr", "winnr", "varname", "val" ] }, { "fn": "settagstack", "args": [ "nr", "dict", "action" ] }, { "fn": "setwinvar", "args": [ "nr", "varname", "val" ] }, { "fn": "sha256", "args": [ "string" ] }, { "fn": "shellescape", "args": [ "string", "special" ] }, { "fn": "shiftwidth", "args": [ "col" ] }, { "fn": "simplify", "args": [ "filename" ] }, { "fn": "sin", "args": [ "expr" ] }, { "fn": "sinh", "args": [ "expr" ] }, { "fn": "sockconnect", "args": [ "mode", "address", "opts" ] }, { "fn": "sort", "args": [ "list", "func", "dict" ] }, { "fn": "soundfold", "args": [ "" ] }, { "fn": "spellbadword", "args": [ "" ] }, { "fn": "spellsuggest", "args": [ "" ] }, { "fn": "split", "args": [ "expr", "pattern", "keepempty" ] }, { "fn": "sqrt", "args": [ "expr" ] }, { "fn": "stdioopen", "args": [ "opts" ] }, { "fn": "stdpath", "args": [ "what" ] }, { "fn": "str2float", "args": [ "expr" ] }, { "fn": "str2list", "args": [ "expr", "utf8" ] }, { "fn": "str2nr", "args": [ "expr", "base" ] }, { "fn": "strchars", "args": [ "expr", "skipcc" ] }, { "fn": "strcharpart", "args": [ "src", "start", "len" ] }, { "fn": "strdisplaywidth", "args": [ "expr", "col" ] }, { "fn": "strftime", "args": [ "format", "time" ] }, { "fn": "strgetchar", "args": [ "str", "index" ] }, { "fn": "stridx", "args": [ "haystack", "needle", "start" ] }, { "fn": "string", "args": [ "" ] }, { "fn": "strlen", "args": [ "" ] }, { "fn": "strpart", "args": [ "src", "start", "len", "chars" ] }, { "fn": "strptime", "args": [ "format", "timestring" ] }, { "fn": "strridx", "args": [ "haystack", "needle", "start" ] }, { "fn": "strrchr", "args": [ "" ] }, { "fn": "strtrans", "args": [ "expr" ] }, { "fn": "strwidth", "args": [ "expr" ] }, { "fn": "submatch", "args": [ "nr", "list" ] }, { "fn": "substitute", "args": [ "expr", "pat", "sub", "flags" ] }, { "fn": "swapinfo", "args": [ "fname" ] }, { "fn": "swapname", "args": [ "expr" ] }, { "fn": "synID", "args": [ "lnum", "col", "trans" ] }, { "fn": "synIDattr", "args": [ "synID", "what", "mode" ] }, { "fn": "synIDtrans", "args": [ "synID" ] }, { "fn": "synconcealed", "args": [ "lnum", "col" ] }, { "fn": "synstack", "args": [ "lnum", "col" ] }, { "fn": "system", "args": [ "cmd", "input" ] }, { "fn": "systemlist", "args": [ "cmd", "input", "keepempty" ] }, { "fn": "tabpagebuflist", "args": [ "arg" ] }, { "fn": "tabpagenr", "args": [ "arg" ] }, { "fn": "tabpagewinnr", "args": [ "tabarg", "arg" ] }, { "fn": "tagfiles", "args": [ "" ] }, { "fn": "taglist", "args": [ "expr", "filename" ] }, { "fn": "tempname", "args": [ "" ] }, { "fn": "termopen", "args": [ "cmd", "opts" ] }, { "fn": "tan", "args": [ "expr" ] }, { "fn": "tanh", "args": [ "expr" ] }, { "fn": "timer_info", "args": [ "" ] }, { "fn": "timer_pause", "args": [ "timer", "paused" ] }, { "fn": "timer_start", "args": [ "" ] }, { "fn": "timer_stop", "args": [ "timer" ] }, { "fn": "timer_stopall", "args": [ "" ] }, { "fn": "tolower", "args": [ "expr" ] }, { "fn": "toupper", "args": [ "expr" ] }, { "fn": "tr", "args": [ "src", "fromstr", "tostr" ] }, { "fn": "trim", "args": [ "text", "mask", "dir" ] }, { "fn": "trunc", "args": [ "expr" ] }, { "fn": "type", "args": [ "expr" ] }, { "fn": "undofile", "args": [ "name" ] }, { "fn": "undotree", "args": [ "" ] }, { "fn": "uniq", "args": [ "list", "func", "dict" ] }, { "fn": "values", "args": [ "dict" ] }, { "fn": "virtcol", "args": [ "expr" ] }, { "fn": "visualmode", "args": [ "expr" ] }, { "fn": "wait", "args": [ "timeout", "condition", "interval" ] }, { "fn": "wildmenumode", "args": [ "" ] }, { "fn": "win_execute", "args": [ "id", "command", "silent" ] }, { "fn": "win_findbuf", "args": [ "bufnr" ] }, { "fn": "win_getid", "args": [ "win", "tab" ] }, { "fn": "win_gettype", "args": [ "nr" ] }, { "fn": "win_gotoid", "args": [ "expr" ] }, { "fn": "win_id2tabwin", "args": [ "expr\t\t\t\t\t*win_id2tabwin(" ] }, { "fn": "win_id2win", "args": [ "expr" ] }, { "fn": "win_screenpos", "args": [ "nr" ] }, { "fn": "win_splitmove", "args": [ "nr", "target", "options" ] }, { "fn": "winbufnr", "args": [ "" ] }, { "fn": "wincol", "args": [ "" ] }, { "fn": "windowsversion", "args": [ "" ] }, { "fn": "winheight", "args": [ "nr" ] }, { "fn": "winlayout", "args": [ "tabnr" ] }, { "fn": "winline", "args": [ "" ] }, { "fn": "winnr", "args": [ "" ] }, { "fn": "winrestcmd", "args": [ "" ] }, { "fn": "winrestview", "args": [ "" ] }, { "fn": "winsaveview", "args": [ "" ] }, { "fn": "winwidth", "args": [ "nr" ] }, { "fn": "wordcount", "args": [ "" ] }, { "fn": "writefile", "args": [ "" ] }, { "fn": "xor", "args": [ "expr", "expr" ] } ]