A union type should not merge class fields

Abierto
#3,410 1 comentario 0 reacciones 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
4/5
Tiempo estimado
3-5 días
Aptitud para principiantes
48/100
Tipo de issue
Error
Claridad
Bastante claro
Estado de actividad
Tranquilo
Stack tecnológico
lua
Área
tooling

Línea de trabajo

Reproduce el ejemplo anotado TypeA|TypeB en la extensión de Visual Studio Code y, a continuación, rastrea cómo el servidor de lenguaje combina los campos de clases unión. Se considera terminado cuando el discriminador selecciona la clase correcta e informa de los campos no coincidentes commonField y los campos específicos de cada miembro que se muestran en el ejemplo.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

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
---@class (exact) TypeA
---@field type 'A'
---@field commonField number
---@field specificFieldA number

---@class (exact) TypeB
---@field type 'B'
---@field commonField string
---@field specificFieldB string

---@alias Type_Either_A_Or_B_But_Not_Both TypeA|TypeB

---@type Type_Either_A_Or_B_But_Not_Both
local testA = {
    type = 'A', --- Indicates that this should be of TypeA
    commonField = 'test', --- Should be an error. TypeA.commonField should be a number
    specificFieldA = 123, --- OK
    specificFieldB = 'Hello' --- Should be an error. TypeA.specificFieldB doesn't exist
}

---@type Type_Either_A_Or_B_But_Not_Both
local testB = {
    type = 'B', --- Indicates that this should be of TypeB
    commonField = 'test', --- OK
    specificFieldA = 123, --- Should be an error. TypeB.specificFieldA doesn't exist
    specificFieldB = 'Hello' --- OK
}
Actual Behaviour

TypeA|TypeB is merged, so none of the mismatched fields/types are reported as errors.

local testA: TypeA|TypeB {
    commonField: string|number,
    specificFieldA: number,
    specificFieldB: string,
    type: 'A'|'B',
}
Reproduction steps

Paste the code into vscode

Additional Notes

No response

Log File

No response

Lenguaje dominante
Lua
Estrellas
4.4k
Forks
442
Métricas de merge de PR
Sin PR fusionados en 30 d

Guía de contribución

Abrir la guía de contribución

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de LuaLS/lua-language-server

Todos los issues de LuaLS/lua-language-server

Issues similares

Más issues de Lua

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.