LuaLS / LuaLS/lua-language-server

---@class with function return question

Ouverte
#2,602 0 commentaires 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

so I have this (as a mockup):
```lua
do
---@class a
local a = {}

---@generic T
---@param self a
---@param new T
---@return T
a.extend = function(self, new)
--...
return new
end
end
```
and it's supposed to be inheritance for prototypes, right, but I'm trying to make the LS think that it returns the second parameter `new` and it does that and the LS thinks that, so far so good. So this
```lua
local b = a:extend{
n = 1
}
```
will make it like this:
![p1](https://github.com/LuaLS/lua-language-server/assets/50140319/ae40c16c-62bd-4429-8c40-1c2d5190d446)
but the problem is, that if I use `---@class b` here, then it will ignore what the function returns and I get this:
![p2](https://github.com/LuaLS/lua-language-server/assets/50140319/b0535d12-35f5-49cc-8088-2ae955b32f4a)
am I missing something or is it just not possible? Though, if I separate it into two statements like this,
```lua
---@class b
local b = {
n = 1
}

b = a:extend(b)
```
then I get what I want:
![p3](https://github.com/LuaLS/lua-language-server/assets/50140319/d56f304d-8fef-46c6-baa8-45491c2829d2)
but it's not ideal, since it's two statements now and I can't use the `fun{}` syntactic sugar this way, which would be the whole reason, right. Is there a way to make it work? Also I'm unsure about how to properly word the title here

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

Aucun fichier source ni test n’est nommé. Reproduisez les deux snippets Lua sur une ligne et les deux snippets à deux instructions, puis suivez l’inférence de types de LuaLS pour les déclarations locales, les annotations de classe, les génériques et les valeurs de retour des fonctions. C’est terminé lorsque le comportement pris en charge est implémenté et couvert par un test de régression, ou lorsque la limitation est clairement documentée.

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

Évaluation

Stack technique
lua
Domaine
devtools
Type d'issue
Bug
Difficulté
4/5
Temps estimé
3-5 jours
Activité
À l'abandon
Clarté
Plutôt claire
Accessibilité débutants
35/100

Recevez les nouvelles issues par e-mail

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