LuaLS / LuaLS/lua-language-server
[Feature Request] Add Lua config file support
- Dominant language
- Lua
- Stars
- 4.4k
- Forks
- 442
- PR merge metrics
- No merged PRs in 30d
Description
There are some Lua files that are used for configuration, such as `.busted` or `*.rockspec` files. It would be nice if:
- Any globals defined in them are ignored by default
- Global types and return types can be defined for them in a type definition file
This behavior could all be described by creating a type definition file with a special `(config)` option next to `@meta`. The require name is replaced by a Lua pattern that matches the filename or URI. Either that, or it could be specified as a config-specific option using `---@meta (config: PATTERN)`
```lua
-- library/rockspec.d.lua
---@meta (config) "[%w%.%-%_]+%.rockspec$"
---the rockspec format
---@type string
_G.rockspec_format = nil
---the package name
---@type string
_G.package = nil
---the package version
---@type string
_G.version = nil
---a description of the rock
---@class luarocks.rockspec.description
---@field summary string? -- a short sentence that succinctly describes the rock
---@field description string? -- a paragraph-size description that describes the rock
---@field ...
_G.description = {}
```
For configurations that require returning a table, you could define a local variable with the right type and return it.
```lua
-- library/busted.d.lua
---@meta (config) "%.busted$"
---@class .busted.config
---@field coverage boolean? -- use luacov for coverage
---@field verbose boolean? -- print more things
---@field ...
---a dictionary of Busted configurations. You can specify which one using the
---`--run` option. Uses `default` if no configuration is specified
---@class .busted
---@field default .busted.config?
---@field [string] .busted.config?
local busted_config = {}
return busted_config
```
Contributor guide
Research direction
Start by reviewing the proposed config-specific `@meta` syntax and the example definitions in `library/rockspec.d.lua` and `library/busted.d.lua`. Compare the alternatives for matching configuration filenames or URIs. Done means Lua configuration files can ignore globals by default and use type and return definitions from matching definition files.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- lua
- Domain
- devtools
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 30/100