LuaLS / LuaLS/lua-language-server

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

Ouverte
#3,409 1 commentaire 0 réactions 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

Langage dominant
Lua
Étoiles
4.4k
Forks
442
Métriques de merge des PR
Aucune PR mergée en 30 j

Description

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

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:

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:

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

The problem

If I write

local Button = require('likelihud.ImageButton')

I get autocomplete for Button.

But if instead I do

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 ?

Guide de contribution

Ouvrir le guide de contribution

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Piste de recherche

Commencez par le module init.lua et le rockspec fournis, puis reproduisez les deux motifs de require dans LuaLS avec le paramètre workspace.library indiqué. Suivez la manière dont les chemins require dynamiques sont résolus et dont les champs des tables retournées reçoivent leurs types ; le travail est terminé lorsque ui. propose des champs connus et typés pour les modules exportés par init.lua.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Évaluation

Stack technique
lua
Domaine
developer-experience, tooling
Type d'issue
Bug
Difficulté
4/5
Temps estimé
3-5 jours
Activité
Calme
Clarté
Plutôt claire
Accessibilité débutants
52/100

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.