lua-language-server が luajit ffi のインテリセンスを出せるように emmylua annotation を生成するより、 ffi.cdef を読めるようにすればよいのでは。 ということで、lua-language-server を探ってみる。

構成

Home
A language server that offers Lua language support - programmed in Lua - LuaLS/lua-language-server
Home favicon https://github.com/sumneko/lua-language-server/wiki/Command-line
Home

BINRARY/lua-language-server LUA_LANGUAGE_SERVER/main.lua --logpath=D:/log --metapath=D:/meta --locale=en-us --configpath="config.json"

> .\bin\Windows\lua-language-server.exe --help
lua-language-server.exe:unrecognized option '--help'usage: C:\Users\oustt\ghq\github.com\sumneko\lua-language-server\bin\Windows\lua-language-server.exe [options] [script [args]]
Available options are:
-e stat execute string 'stat'
-i enter interactive mode after executing 'script'
-l name require library 'name' into global 'name'
-v show version information
-E ignore environment variables
-W turn warnings on
-- stop handling options
- stop handling options and execute stdin
> .\bin\Windows\lua-language-server.exe -v
Lua 5.4.4 Copyright (C) 1994-2021 Lua.org, PUC-Rio

native モジュールを埋め込んだインタープリター lua-language-server.exemain.lua を実行する。

setting

.vscode/settings.json

"Lua.runtime.version": "LuaJIT",
"Lua.workspace.preloadFileSize": 10000

LSP

Official page for Language Server Protocol
Language Server Protocol documentation and specification page.
Official page for Language Server Protocol favicon https://microsoft.github.io/language-server-protocol/

main.lua

  • main.lua
    • script/service/service.lua
function m.start()
util.enableCloseFunction()
await.setErrorHandle(log.error)
pub.recruitBraves(4)
-- transport
proto.listen()
m.report()
m.pulse()
m.reportStatus()
m.testVersion()
require 'provider'
m.startTimer()
end

script/parser

lua のコード解析

  • script/parser/parse.lua

ast.init(state)

LPeg