LuaLS / LuaLS/lua-language-server

Unexpected generic behaviour

Ouverte
#3,125 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

How are you using the lua-language-server?

Visual Studio Code Extension (sumneko.lua)

Which OS are you using?

MacOS

What is the issue affecting?

Annotations

Expected Behaviour
local ffi = require("ffi")

---@generic T
---@param ct `T`
---@return fun(x: T): `T`*
local function ref(ct)
    return function (init)
        return ffi.new(ct.."[1]", {init})
    end
end

ffi.cdef [[
    typedef struct MyStruct {
        int a, b;
    } MyStruct;
]]

---@class MyStruct
---@field a integer
---@field b integer

---@class MyStruct* : { [integer] : MyStruct }, ffi.cdata*

local x = ffi.ref "MyStruct" {
    a = 4,
    b = 2
}

--type of `x` expected to be `MyStruct*`
Actual Behaviour

type of x is MyStruct

Reproduction steps

Run the code and check types

Additional Notes

No response

Log File

No response

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

Reproduisez l’exemple d’annotations dans l’extension Visual Studio Code et examinez comment le type de retour générique et les annotations de la classe FFI sont inférés. Comparez le type inféré de x avec le résultat attendu MyStruct* ; c’est terminé lorsque l’exemple indique que x est de type MyStruct* plutôt que MyStruct.

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.