BUG: 当_ENV作为多重赋值的第一个变量时, 后续变量会错误的识别成局部变量.
オープン
まだ誰も着手していません。
- 主要言語
- Lua
- スター
- 76
- フォーク
- 13
- PR マージ指標
- 30日以内にマージされた PR はありません
説明
这是非常罕见的场景, 并且建议避免编写这种代码.
```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)错误提示.

コントリビューションガイド
このリポジトリのコントリビューションガイドは索引されていません
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
調査の方向性
まず parser.compile を通して Lua スニペットを再現し、各代入先について state.ast.locals と ast.type の値を調べます。_ENV、a、a.x、a[1] の結果を比較します。代入によって誤ったローカル変数が作成されなくなり、すべての対象が 'local' としてマークされなくなれば完了です。
索引モデルが issue の本文から書いたものです。
評価
- 技術スタック
- lua
- 領域
- compilers
- issue の種類
- バグ
- 難易度
- 3/5
- 見積もり時間
- 1〜2日
- 活発さ
- 停滞
- 明瞭さ
- おおむね明確
- 初心者へのやさしさ
- 45/100