Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Wrong missing-fields diagnostic behavior with union types #2252

Closed
firas-assaad opened this issue Aug 9, 2023 · 9 comments
Closed

Wrong missing-fields diagnostic behavior with union types #2252

firas-assaad opened this issue Aug 9, 2023 · 9 comments
Labels
bug Something isn't working

Comments

@firas-assaad
Copy link
Contributor

How are you using the lua-language-server?

Visual Studio Code Extension (sumneko.lua)

Which OS are you using?

Windows

What is the issue affecting?

Annotations, Type Checking, Diagnostics/Syntax Checking

Expected Behaviour

Building on #2214 (comment), the following code should work without any warnings:

---@class Foo
---@field a number
---@field b number

---@class Bar
---@field aa number
---@field bb number

---@type Foo|Bar
local fb = {
    aa = 1,
    bb = 2
}

---@param foobar Foo|Bar
local function func(foobar) end

func {
    aa = 1,
    bb = 2
}

Actual Behaviour

I get missing field warning when defining the local variable fb, and when calling the function func: "Missing fields: a, b"

It seems to depend on the order of classes in the union. For example, this works (placing Bar before Foo):

---@type Bar|Foo
local fb = {
    aa = 1,
    bb = 2
}

But the following doesn't:

---@type Bar|Foo
local fb = {
    a = 1,
    b = 2
}

Reproduction steps

Paste the sample code in your editor.

Additional Notes

No response

Log File

No response

@9mm
Copy link

9mm commented Aug 10, 2023

Is that what is causing this? This showed up today

image

@sumneko sumneko added the bug Something isn't working label Aug 15, 2023
@sumneko
Copy link
Collaborator

sumneko commented Aug 15, 2023

---@class Foo
---@field a number
---@field b number

---@class Bar
---@field aa number
---@field bb number

---@type Foo|Bar
local fb = {
    aa = 1,
    bb = 2
} --[[@as Bar]]

---@param foobar Foo|Bar
local function func(foobar) end

func {
    aa = 1,
    bb = 2
} --[[@as Bar]]

Let's bypass it for now using this method. Since true union types are not currently implemented, I'm not sure if it can be fixed in the short term.

@9mm
Copy link

9mm commented Aug 15, 2023

@sumneko do you know if this issue is the same thing causing whats in my screenshot? it's for tons of different plugins from my config so im not sure

@sumneko
Copy link
Collaborator

sumneko commented Aug 16, 2023

@9mm Please provide a complete screenshot, as I cannot confirm from your screenshot whether you have provided these necessary fields.

@9mm
Copy link

9mm commented Aug 16, 2023

There's more people here where it happened suddenly: #2214

image image image image image

@sumneko
Copy link
Collaborator

sumneko commented Aug 18, 2023

This is how it works.

@9mm
Copy link

9mm commented Aug 18, 2023

@sumneko so can you give more details? What is the proper way to initialize all these plugins? Are you implying that all these plugins dont properly merge the options into their own config?

@sumneko
Copy link
Collaborator

sumneko commented Aug 18, 2023

@sumneko so can you give more details? What is the proper way to initialize all these plugins? Are you implying that all these plugins dont properly merge the options into their own config?

I don't know. The parameters of this function require these mandatory fields through annotations, but you did not pass some of them, so a diagnosis was given, that's all. You can consult the person who wrote the annotations for the function to see if missing these fields will cause any problems.

@sumneko
Copy link
Collaborator

sumneko commented Aug 18, 2023

If you want to further discuss, please open a new issue, as this is not related to the topic of this issue.

netbsd-srcmastr pushed a commit to NetBSD/pkgsrc that referenced this issue May 1, 2024
Changelog:

## 3.8.3
`2024-4-23`
* `FIX` server may crash when the workspace is using a non-English path.

## 3.8.2
`2024-4-23`
* This is a fake version only for the new version of VSCode, with a core of 3.8.0.

## 3.8.1
`2024-4-23`
* This is a fake version only for the old version of VSCode, with a core of `3.7.4`. Starting from the next minor version, the version requirement for VSCode will be raised to prevent users still using the old version of VSCode from updating to the new version and experiencing compatibility issues.

## 3.8.0
`2024-4-22`
* `NEW` supports tuple type (@[lizho])
  ```lua
  ---@type [string, number, boolean]
  local t

  local x = t[1] --> x is `string`
  local y = t[2] --> y is `number`
  local z = t[3] --> z is `boolean`
  ```
* `NEW` generic pattern (@[fesily])
  ```lua
  ---@Generic T
  ---@param t Cat.`T`
  ---@return T
  local function f(t) end

  local t = f('Smile') --> t is `Cat.Smile`
  ```
* `NEW` alias and enums supports attribute `partial`
  ```lua
  ---@alias Animal Cat

  ---@alias(partial) Animal Dog

  ---@type Animal
  local animal --> animal is `Cat|Dog` here
  ```

  ```lua
  ---@enum(key) ErrorCodes
  local codes1 = {
      OK = 0,
      ERROR = 1,
      FATAL = 2,
  }

  ---@enum(key, partial) ErrorCodes
  local codes2 = {
      WARN = 3,
      INFO = 4,
  }

  ---@type ErrorCodes
  local code

  code = 'ERROR' --> OK
  code = 'WARN'  --> OK

  ```
* `NEW` plugin: add `OnTransFormAst` interface (@[fesily])
* `NEW` plugin: add `OnNodeCompileFunctionParam` interface (@[fesily])
* `NEW` plugin: add `ResolveRequire` interface (@[Artem Dzhemesiuk])
* `NEW` plugin: support multi plugins (@[fesily])
  + setting: `Lua.runtime.plugin` can be `string|string[]`
  + setting: `Lua.runtime.pluginArgs` can be `string[]|table<string, string>`
* `NEW` CLI: `--doc` add option `--doc_out_path <PATH>` (@[Andreas Matthias])
* `NEW` CLI: `--doc_update`, update an existing `doc.json` without using `--doc` again (@[Andreas Matthias])
* `NEW` CLI: `--trust_all_plugins`, this is potentially unsafe for normal use and meant for usage in CI environments only (@[Paul Emmerich])
* `CHG` CLI: `--check` will run plugins (@[Daniel Farrell])
* `FIX` diagnostic: `discard-returns` not works in some blocks (@clay-golem)
* `FIX` rename in library files

## 3.7.4
`2024-1-5`
* `FIX` rename to unicode with `Lua.runtime.unicodeName = true`

## 3.7.3
`2023-11-14`
* `FIX` can not infer arg type in some cases.

## 3.7.2
`2023-11-9`
* `FIX` [#2407]

[#2407]: LuaLS/lua-language-server#2407

## 3.7.1
`2023-11-7`
* `FIX` [#2299]
* `FIX` [#2335]

[#2299]: LuaLS/lua-language-server#2299
[#2335]: LuaLS/lua-language-server#2335

## 3.7.0
`2023-8-24`
* `NEW` support `---@type` and `--[[@as]]` for return statement
* `NEW` commandline parameter `--force-accept-workspace`: allowing the use of the root directory or home directory as the workspace
* `NEW` diagnostic: `inject-field`
* `NEW` `---@enum` supports attribute `key`
  ```lua
  ---@enum (key) AnimalType
  local enum = {
    Cat = 1,
    Dog = 2,
  }

  ---@param animal userdata
  ---@param atp AnimalType
  ---@return boolean
  local function isAnimalType(animal, atp)
    return API.isAnimalType(animal, enum[atp])
  end

  assert(isAnimalType(animal, 'Cat'))
  ```
* `NEW` `---@class` supports attribute `exact`
  ```lua
  ---@Class (exact) Point
  ---@field x number
  ---@field y number
  local m = {}
  m.x = 1 -- OK
  m.y = 2 -- OK
  m.z = 3 -- Warning
  ```

* `FIX` wrong hover and signature for method with varargs and overloads
* `FIX` [#2155]
* `FIX` [#2224]
* `FIX` [#2252]
* `FIX` [#2267]

[#2155]: LuaLS/lua-language-server#2155
[#2224]: LuaLS/lua-language-server#2224
[#2252]: LuaLS/lua-language-server#2252
[#2267]: LuaLS/lua-language-server#2267

## 3.6.25
`2023-7-26`
* `FIX` [#2214]

[#2214]: LuaLS/lua-language-server#2214

## 3.6.24
`2023-7-21`
* `NEW` diagnostic: `missing-fields`
* `FIX` shake of `codeLens`
* `FIX` [#2145]

[#2145]: LuaLS/lua-language-server#2145

## 3.6.23
`2023-7-7`
* `CHG` signature: narrow by inputed literal

## 3.6.22
`2023-6-14`
* `FIX` [#2038]
* `FIX` [#2042]
* `FIX` [#2062]
* `FIX` [#2083]
* `FIX` [#2088]
* `FIX` [#2110]
* `FIX` [#2129]

[#2038]: LuaLS/lua-language-server#2038
[#2042]: LuaLS/lua-language-server#2042
[#2062]: LuaLS/lua-language-server#2062
[#2083]: LuaLS/lua-language-server#2083
[#2088]: LuaLS/lua-language-server#2088
[#2110]: LuaLS/lua-language-server#2110
[#2129]: LuaLS/lua-language-server#2129
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

3 participants