LuaLS / LuaLS/lua-language-server

[Feature Request] Add Lua config file support

Open
#3,198 3 comments 0 reactions 0 assignees View on GitHub
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

Open the contributing 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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.