{"id":19533175,"url":"https://github.com/vim-jp/go-vimlparser","last_synced_at":"2026-02-20T19:04:23.150Z","repository":{"id":55089178,"uuid":"67869289","full_name":"vim-jp/go-vimlparser","owner":"vim-jp","description":":zap: Vim Script Parser written in Go","archived":false,"fork":false,"pushed_at":"2021-01-11T15:57:18.000Z","size":1149,"stargazers_count":145,"open_issues_count":5,"forks_count":10,"subscribers_count":7,"default_branch":"master","last_synced_at":"2025-10-23T07:58:38.797Z","etag":null,"topics":["go","golang","parser","vim","vim-script"],"latest_commit_sha":null,"homepage":"https://medium.com/@haya14busa/vim-script-parser-written-in-go-4d0296782a14#.tf52lht5h","language":"Vim script","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/vim-jp.png","metadata":{"files":{"readme":"README.mkd","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2016-09-10T12:18:40.000Z","updated_at":"2025-09-03T05:46:11.000Z","dependencies_parsed_at":"2022-08-14T11:40:24.292Z","dependency_job_id":null,"html_url":"https://github.com/vim-jp/go-vimlparser","commit_stats":null,"previous_names":["haya14busa/go-vimlparser"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/vim-jp/go-vimlparser","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vim-jp%2Fgo-vimlparser","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vim-jp%2Fgo-vimlparser/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vim-jp%2Fgo-vimlparser/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vim-jp%2Fgo-vimlparser/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/vim-jp","download_url":"https://codeload.github.com/vim-jp/go-vimlparser/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vim-jp%2Fgo-vimlparser/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29661585,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-20T16:33:43.953Z","status":"ssl_error","status_checked_at":"2026-02-20T16:33:43.598Z","response_time":59,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["go","golang","parser","vim","vim-script"],"created_at":"2024-11-11T02:05:45.746Z","updated_at":"2026-02-20T19:04:23.133Z","avatar_url":"https://github.com/vim-jp.png","language":"Vim script","readme":"# Vim Script Parser written in Go\n\n[![CI Status](https://github.com/vim-jp/go-vimlparser/workflows/CI/badge.svg)](https://github.com/vim-jp/go-vimlparser/actions)\n[![codecov](https://codecov.io/gh/vim-jp/go-vimlparser/branch/master/graph/badge.svg)](https://codecov.io/gh/vim-jp/go-vimlparser)\n[![Sourcegraph](https://sourcegraph.com/github.com/vim-jp/go-vimlparser/-/badge.svg)](https://sourcegraph.com/github.com/vim-jp/go-vimlparser?badge)\n[![GoDoc](https://godoc.org/github.com/vim-jp/go-vimlparser?status.svg)](https://godoc.org/github.com/vim-jp/go-vimlparser)\n\nThis repository is the fork of https://github.com/ynkdir/vim-vimlparser and it provides Go-ish interface with performance improvement.\n\n### :zap: The Fastest Vim Script Parser!\n\n#### Benchmarks\n\n\u003cdetails\u003e\n\n```sh\n$ pwd\n/home/vim-jp/src/github.com/ynkdir/vim-vimlparser\n\n$ git rev-parse HEAD\n2fff43c58968a18bc01bc8304df68bde01af04d9\n\n$ wc -l \u003c autoload/vimlparser.vim\n5195\n\n$ time vim -u NONE -N --cmd \"let \u0026rtp .= ',' . getcwd()\" --cmd \"silent call vimlparser#test('autoload/vimlparser.vim')\" -c \":q\"\nvim -u NONE -N --cmd \"let \u0026rtp .= ',' . getcwd()\" --cmd  -c \":q\"  48.88s user 0.05s system 99% cpu 48.942 total\n\n$ python3 -V\nPython 3.5.0\n\n$ time python3 py/vimlparser.py autoload/vimlparser.vim \u003e /dev/null\npython3 py/vimlparser.py autoload/vimlparser.vim \u003e /dev/null  4.17s user 0.04s system 99% cpu 4.236 total\n\n$ pypy3 -V\nPython 3.2.5 (b2091e973da69152b3f928bfaabd5d2347e6df46, Mar 04 2016, 07:08:30)\n[PyPy 2.4.0 with GCC 5.3.0]\n\n$ time pypy3 py/vimlparser.py autoload/vimlparser.vim \u003e /dev/null\npypy3 py/vimlparser.py autoload/vimlparser.vim \u003e /dev/null  2.63s user 0.06s system 99% cpu 2.694 total\n\n$ node --version\nv4.2.3\n\n$ time node js/vimlparser.js autoload/vimlparser.vim \u003e /dev/null\nnode js/vimlparser.js autoload/vimlparser.vim \u003e /dev/null  0.77s user 0.04s system 125% cpu 0.644 total\n\n$ go get github.com/vim-jp/go-vimlparser/cmd/vimlparser\n$ time vimlparser autoload/vimlparser.vim \u003e /dev/null\nvimlparser autoload/vimlparser.vim \u003e /dev/null  0.25s user 0.03s system 114% cpu 0.244 total\n```\n\u003c/details\u003e\n\n| Language | Time (sec) |\n| -------- | ---- |\n| Vim script | 48.88s |\n| Python3 | 4.17s |\n| pypy3 | 2.63s |\n| node | 0.77s |\n| Go | **0.25s** |\n\nNote that, in addition to the Go lang speed, I added [performance improvement](https://github.com/vim-jp/go-vimlparser/pull/4) for Go implementation.\n\n### Rich interface compared to other implementation\n\ngo-vimlparser is written in Go which is typed language and I added Go-ish interface,\nso you can see each node fields. e.g. https://godoc.org/github.com/vim-jp/go-vimlparser/ast#Function\n\n| package | doc |\n| --- | --- |\n| go-vimlparser | [![GoDoc](https://godoc.org/github.com/vim-jp/go-vimlparser?status.svg)](https://godoc.org/github.com/vim-jp/go-vimlparser) |\n| go-vimlparser/ast | [![GoDoc](https://godoc.org/github.com/vim-jp/go-vimlparser/ast?status.svg)](https://godoc.org/github.com/vim-jp/go-vimlparser/ast) |\n| go-vimlparser/token | [![GoDoc](https://godoc.org/github.com/vim-jp/go-vimlparser/token?status.svg)](https://godoc.org/github.com/vim-jp/go-vimlparser/token) |\n\n### CLI tool\n\n#### Installation\n\n```\ngo get github.com/vim-jp/go-vimlparser/cmd/vimlparser\n```\n\n#### Usage\n\n```\n$ echo 'let x = 1' | vimlparser\n(let = x 1)\n$ vimlparser autoload/vimlparser.vim | head -n 5\n; vim:set ts=8 sts=2 sw=2 tw=0 et:\n;\n; VimL parser - Vim Script Parser\n;\n; License: This file is placed in the public domain.\n```\n\n#### As a Lint Tool\n\nYou can use it to detect syntax error.\nIt doesn't check much things compared to existing lint tool for Vim script, but it runs fast even if you pass lots of files to it.\n\n```\n$ vimlparser **/*.vim \u003e /dev/null\ntest/test_err_funcarg_duplicate.vim:1:20: vimlparser: E853: Duplicate argument name: b\ntest/test_err_funcarg_firstline.vim:1:14: vimlparser: E125: Illegal argument: firstline\ntest/test_err_funcarg_lastline.vim:1:14: vimlparser: E125: Illegal argument: lastline\ntest/test_err_funcarg.vim:1:44: vimlparser: E125: Illegal argument: a:bar\ntest/test_err_funcname.vim:11:10: vimlparser: E128: Function name must start with a capital or contain a colon: foo\ntest/test_err_toomanyarg.vim:1:9: vimlparser: E740: Too many arguments for function\ntest/test_err_varname.vim:1:5: vimlparser: E461: Illegal variable name: foo:bar\ntest/test_issue16_err_line_continuation_lnum2.vim:3:9: vimlparser: E488: Trailing characters: z\ntest/test_issue16_err_line_continuation_lnum.vim:2:9: vimlparser: E488: Trailing characters: z\ntest/test_neo_tnoremap.vim:1:1: vimlparser: E492: Not an editor command: tnoremap \u003cEsc\u003e \u003cC-\\\u003e\u003cC-N\u003e\ntest/test_noneo_tnoremap.vim:1:1: vimlparser: E492: Not an editor command: tnoremap \u003cEsc\u003e \u003cC-\\\u003e\u003cC-N\u003e\ntest/test_xxx_colonsharp.vim:2:6: vimlparser: unexpected token: :\ntest/test_xxx_err_funcarg_space_comma.vim:19:14: vimlparser: E475: Invalid argument: White space is not allowed before comma\n```\n\n```vim\n\" sample\ncommand! LintVimLParser :silent cexpr system('vimlparser ' . expand('%') . ' \u003e /dev/null')\naugroup lint-vimlparser\n  autocmd!\n  autocmd BufWritePost *.vim LintVimLParser\naugroup END\n```\n\n### Credit\n\n[@ynkdir](https://github.com/ynkdir) for https://github.com/ynkdir/vim-vimlparser\n\n### :bird: Author\n\nOriginal Author: haya14busa (https://github.com/haya14busa)\n\nMaintenance Author: vim-jp\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvim-jp%2Fgo-vimlparser","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvim-jp%2Fgo-vimlparser","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvim-jp%2Fgo-vimlparser/lists"}