LuaLS / LuaLS/lua-language-server

No autocomplete for the "submodules" of a library when those included from init.lua

Aperta
#3,409 1 commento 0 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

Lingua principale
Lua
Stelle
4.4k
Fork
442
Metriche di merge delle PR
Nessuna PR unita negli ultimi 30g

Descrizione

Dear developers, I've read similar existing issues but didn't find the answer.

I have a library (which I am the developer of) which has this structure:

Image

and `init.lua` is

```lua
local UI = (...) .. '.'

return {
Block = require(UI .. 'Block'),
Image = require(UI .. 'Image'),
Label = require(UI .. 'Label'),
Layout = require(UI .. 'Layout'),
Rectangle = require(UI .. 'Rectangle'),
Stack = require(UI .. 'Stack'),

ImageButton = require(UI .. 'ImageButton'),
TextField = require(UI .. 'TextField'),

utils = require(UI .. 'utils')
}
```

and the rockspec contains this:

```lua
build = {
type = 'builtin',
modules = {
['likelihud'] = 'likelihud/init.lua',
['likelihud.Block'] = 'likelihud/Block.lua',
['likelihud.Image'] = 'likelihud/Image.lua',
['likelihud.Label'] = 'likelihud/Label.lua',
['likelihud.Layout'] = 'likelihud/Layout.lua',
['likelihud.Rectangle'] = 'likelihud/Rectangle.lua',
['likelihud.Stack'] = 'likelihud/Stack.lua',
['likelihud.ImageButton'] = 'likelihud/ImageButton.lua',
['likelihud.TextField'] = 'likelihud/TextField.lua',
['likelihud.utils'] = 'likelihud/utils.lua',
},
}
```
So after install I have

Image

Coc-config:

```json
{
"suggest.noselect": true,
"Lua.workspace.library" : [
"/usr/local/share/lua/5.1"
]
}
```

# The problem

If I write

```lua
local Button = require('likelihud.ImageButton')
```
I get autocomplete for `Button`.

But if instead I do

```lua
local ui = require('likelihud')
```
I get only those fields when I do `ui.`, _but the fields are unknown._ :

Image

So the problem LSP doesn't resolve this `(...) .. '.'` inside `init.lua`. Should I somehow change how `init.lua` provides those files or how to fix that ?

Guida per i contributori

Apri la guida per i contributori

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Direzione di ricerca

Inizia con il modulo init.lua e il rockspec forniti, quindi riproduci i due pattern di require in LuaLS con l'impostazione workspace.library mostrata. Traccia come vengono risolti i percorsi dinamici di require e come i campi delle tabelle restituite ricevono i tipi; il lavoro è completato quando ui. offre campi noti e tipizzati per i moduli esportati da init.lua.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Valutazione

Stack tecnologico
lua
Ambito
developer-experience, tooling
Tipo di issue
Bug
Difficoltà
4/5
Tempo stimato
3-5 giorni
Stato di attività
Tranquilla
Chiarezza
Abbastanza chiara
Idoneità per principianti
52/100

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.