-
-
Notifications
You must be signed in to change notification settings - Fork 358
File Structure
Below is an explanation of the project file structure. Hovering an item will show a description, clicking a linked item will jump to more detailed info, if available.
Files marked with ⛔
are ignored by git.
📦 lua-language-server/ ├── 📁 .github/ ├── 📁 .vscode/ ├── 📁 3rd/ ├── 📁 bin/ ⛔ ├── 📁 doc/ ├── 📁 locale/ ├── 📁 log/ ⛔ ├── 📁 make/ ├── 📂 meta/ │ ├── 📁 3rd/ │ ├── 📁 template/ │ └── 📂 Lua ${LUA_VERSION} ${LANGUAGE_ID} ${ENCODING}/ ⛔ ├── 📂 script/ │ ├── 📁 brave/ │ ├── 📁 cli/ │ ├── 📁 config/ │ ├── 📁 core/ │ ├── 📁 encoder/ │ ├── 📁 glob/ │ ├── 📂 parser/ │ │ ├── 📜 guide.lua │ │ ├── 📜 luadoc.lua │ │ ├── 📜 newparser.lua │ │ └── 📜 tokens.lua │ ├── 📂 proto/ │ │ ├── 📜 converter.lua │ │ ├── 📜 define.lua │ │ └── 📜 proto.lua │ ├── 📂 provider/ │ │ ├── 📜 diagnostic.lua │ │ └── 📜 provider.lua │ ├── 📁 pub/ │ ├── 📁 service/ │ ├── 📁 test │ ├── 📁 tools │ ├── 📂 vm/ │ │ ├── 📜 compiler.lua │ │ ├── 📜 def.lua │ │ ├── 📜 doc.lua │ │ ├── 📜 field.lua │ │ ├── 📜 generic.lua │ │ ├── 📜 global.lua │ │ ├── 📜 infer.lua │ │ ├── 📜 local-id.lua │ │ ├── 📜 node.lua │ │ ├── 📜 ref.lua │ │ ├── 📜 runner.lua │ │ └── 📜 sign.lua │ ├── 📂 workspace/ │ │ ├── 📜 loading.lua │ │ ├── 📜 require-path.lua │ │ ├── 📜 scope.lua │ │ └── 📜 workspace.lua │ ├── 📜 await.lua │ ├── 📜 client.lua │ ├── 📜 files.lua │ ├── 📜 language.lua │ ├── 📜 lclient.lua │ ├── 📜 library.lua │ ├── 📜 plugin.lua ├── 📜 debugger.lua ├── 📜 test.lua └── 📜 main.lua
Github-specific files for metadata, issue templates, etc.
Visual Studio Code specific files for development.
Contains Lua defintion files for various included libraries like love2d
and OpenResty
.
Parses Lua code into an abstract syntax tree (AST).
Turns:
x = 10
y = 20
into:
{
type = 'main',
start = 0,
finish = 20000,
[1] = {
type = 'setglobal',
start = 0,
finish = 1,
range = 5,
[1] = 'x',
value = {
type = 'integer',
start = 4,
finish = 6,
[1] = 10
},
},
[2] = {
type = 'setglobal',
start = 10000,
finish = 10001,
range = 10005,
[1] = 'y',
value = {
type = 'integer',
start = 10004,
finish = 10006,
[1] = 20
},
},
}
ℹ️ Note: first line is
0
, start is cursor position on the left and finish is cursor position on the right.
ℹ️ Note:
position = row * 10000 + col
, therefore, only codes with fewer than 10000 bytes in a single line are supported. These nodes are generally named source.
ℹ️ Note: Most of the children files are obsolete, only the ones still in use are documented.
Parses Lua code into an AST then wraps it into state
.
local state = {
version = 'Lua 5.4',
lua = [[local x = 1]],
ast = { ... },
errs = { ... }, -- syntax errors
comms = { ... }, -- comments
lines = { ... }, -- map of offset and position
}
Semantic analysis of the AST and binding status according to the workspace.
Turns:
---@class myClass
local mt
into:
vm.compileNode('mt')
-->
node: {
[1] = {
type = 'local',
[1] = 'mt',
},
[2] = {
type = 'global',
cate = 'type',
name = 'myClass',
},
}
Process analysis and tracking of local variables
---@type number|nil
local x
if x then
print(x) --> `x` is number here
end