LuaLS / LuaLS/lua-language-server

BUG: 当_ENV作为多重赋值的第一个变量时, 后续变量会错误的识别成局部变量.

Ouverte
#2,614 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?

Windows

### What is the issue affecting?

Type Checking

### Expected Behaviour

这是非常罕见的场景, 并且建议避免编写这种代码.

```lua
local env = _ENV
_ENV, a = {}, 1
env.print(env.a, a) -- 1 nil
```
使用parser.compile函数解析得到的state.ast.locals会多出错误的局部变量_ENV和a.
整个多重赋值语句都会识别成local变量定义, 不管是a, a.x, a[1]形式, 生成的ast.type字段都会被错误的标识成'local'.

同时也会导致[vscode插件](https://github.com/LuaLS/lua-language-server)错误提示.
![image](https://github.com/LuaLS/LuaParser/assets/73267079/19d1acbc-a837-408f-bc68-96b1109f6f63)

### Actual Behaviour

错误的将多重赋值语句, 识别成了局部变量定义语句.

### Reproduction steps

.

### 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

Commencez par parser.compile et examinez state.ast.locals pour l’exemple fourni `_ENV, a = {}, 1`, en comparant l’AST généré aux cibles d’affectation. C’est terminé lorsque l’affectation multiple ne crée plus de fausses variables locales et ne produit plus le diagnostic VS Code associé, y compris pour les cibles `a`, `a.x` et `a[1]`.

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é
3/5
Temps estimé
1-2 jours
Activité
À l'abandon
Clarté
Plutôt claire
Accessibilité débutants
45/100

Recevez les nouvelles issues par e-mail

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