tooling: 에디터 Luau 솔버 설정 확정 — luau-lsp 설치해 새 솔버 필요성 실측
luau-lsp 1.69.0을 pesde/rojo와 같은 방식으로 직접 설치해 --flag:LuauSolverV2=true/false로 spike 08을 대조(옛 솔버 에러 3건 vs 새 솔버 1건) — HUMAN_TODO 6번이 사람에게 넘겨뒀던 "실제 에디터에서 확인"을 CLI 분석 모드로 대신 검증. quad/.vscode/settings.json에 enableNewSolver:true 반영, rokit.toml에 luau-lsp 핀 추가. 부수로 typing-limits.md 1번의 핵심 주장(0 진단으로 조용히 새는 것)이 Luau 0.734에서도 그대로 재현됨을 별도로 재확인(정정 불필요). Co-authored-by: qwreey <me@qwreey.moe>
This commit is contained in:
parent
0b471535a3
commit
2de2f99cc4
6 changed files with 65 additions and 31 deletions
|
|
@ -64,12 +64,12 @@ quad/
|
||||||
## 툴체인 — `rokit.toml`
|
## 툴체인 — `rokit.toml`
|
||||||
|
|
||||||
`initreq/vide`(참고 레포)의 `rokit.toml` 선례를 따르되 wally 항목은
|
`initreq/vide`(참고 레포)의 `rokit.toml` 선례를 따르되 wally 항목은
|
||||||
뺐다. **[2026-08-19] 이 세션이 `/code/.local/bin`에 pesde 바이너리를
|
뺐다. **[2026-08-19, 같은 날 후속 세션에 전부 완료]** `pesde`/`rojo`/
|
||||||
직접 다운로드해 설치·검증 완료** — `pesde 0.7.3`, `rokit.toml`의 핀
|
`luau-lsp` **셋 다** `/code/.local/bin`에 직접 다운로드해 설치·검증
|
||||||
(`pesde-pkg/pesde@0.7.3+registry.0.2.3`)과 정확히 일치. `rojo` 핀은
|
완료 — 각각 `0.7.3`/`7.7.0`/`1.69.0`, `rokit.toml`의 핀과 정확히 일치.
|
||||||
GitHub 릴리스 페이지 조회로만 확인했고 실제 설치·실행 검증은 안 함(Rojo는
|
`rokit` 자체는 이 샌드박스에 없어 `rokit install`로 한 번에 검증한 건
|
||||||
Studio 연동이 필요해 `HUMAN_TODO.md` 1번과 같은 처지) — 버전이 오래되면
|
아니고 바이너리를 개별 다운로드해 버전을 대조한 것 — 실제 `rokit`
|
||||||
`rokit add rojo-rbx/rojo`로 다시 확인할 것.
|
워크플로 자체의 검증은 여전히 사람의 로컬 환경 몫.
|
||||||
|
|
||||||
## require 구조 — `@self`가 필수인 이유
|
## require 구조 — `@self`가 필수인 이유
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -423,12 +423,14 @@ function은 구체 타입에 대해서만 동작하는 실행 모델이라, RFC
|
||||||
|
|
||||||
## 8. 미해결 / 추적 중
|
## 8. 미해결 / 추적 중
|
||||||
|
|
||||||
- **에디터(`luau-lsp`)의 솔버 설정** — `luau-analyze` CLI는 새 솔버가
|
- **[2026-08-19 설정 완료]** 에디터(`luau-lsp`)의 솔버 설정 — `luau-analyze`
|
||||||
기본값이지만 `luau-lsp`는 **옛 솔버가 기본값**(`LuauSolverV2=false`)이라
|
CLI는 새 솔버가 기본값이지만 `luau-lsp`는 **옛 솔버가 기본값**
|
||||||
같은 코드에 다른 진단이 나옵니다. 새 솔버로 맞추려면
|
(`LuauSolverV2=false`)이라 같은 코드에 다른 진단이 남. `luau-lsp`
|
||||||
`"luau-lsp.fflags.enableNewSolver": true`. **M0 실착수 때 실제 에디터
|
바이너리(1.69.0)를 직접 설치해 `luau-lsp analyze
|
||||||
환경에서 확정할 것** — 옛 솔버는 1번 패턴을 아예 거부하므로 사실상
|
--flag:LuauSolverV2=true/false`로 실측 — 새 솔버가 필요하다는 결론
|
||||||
새 솔버 외에 선택지가 없어 보이지만, 실환경에서 확인 필요.
|
재확인, `quad/.vscode/settings.json`에 `"luau-lsp.fflags.enableNewSolver":
|
||||||
|
true`를 반영·커밋 완료(`tbox`도 같은 설정 확인). 실제 VSCode 세션에서
|
||||||
|
이 설정이 반영되는지 육안 확인만 사람 몫으로 남음(`HUMAN_TODO.md` 6번).
|
||||||
- **`luau-lang/luau#2380`** — 닫히면 1번 관례 재검증(③ 포함).
|
- **`luau-lang/luau#2380`** — 닫히면 1번 관례 재검증(③ 포함).
|
||||||
- **`state:With(...)`/`state:Apply(factory)`에 1번 ③(`typeof`) 개별
|
- **`state:With(...)`/`state:Apply(factory)`에 1번 ③(`typeof`) 개별
|
||||||
실측** — `Compute`에서만 확인됐고, base pseudocode에 실제로 반영할
|
실측** — `Compute`에서만 확인됐고, base pseudocode에 실제로 반영할
|
||||||
|
|
|
||||||
|
|
@ -119,4 +119,28 @@ sourcemap`/`rojo build`를 돌려본 결과, **symlink를 투명하게 따라가
|
||||||
`HUMAN_TODO.md` 1번). 임시 검증 파일(`test-symlink-check.project.json`)은
|
`HUMAN_TODO.md` 1번). 임시 검증 파일(`test-symlink-check.project.json`)은
|
||||||
확인 후 삭제, 결과만 `project-setup-plan.md`에 반영.
|
확인 후 삭제, 결과만 `project-setup-plan.md`에 반영.
|
||||||
|
|
||||||
다음: (3) 스파이크 `13`, (4) 에디터 솔버 설정.
|
**(3) 완료** — `13-type-ref-preref-subtype.luau`를 타입 전용으로 남기고
|
||||||
|
(`PostRef<T>`도 `Ref<T>`를 만족하는지 추가), 런타임 절반은 신규
|
||||||
|
`22-runtime-ref-preref-postref-brand.luau`로 분리(A의 더미 스텁이 B
|
||||||
|
실행을 막던 문제 해결). `isPreRef`/`isPostRef`가 서로 배타적 형제이고
|
||||||
|
Leaf 핸들러 흉내가 셋을 정확히 갈라냄을 확인. 둘 다 `done/`.
|
||||||
|
|
||||||
|
**(4) 완료** — `luau-lsp` 바이너리(1.69.0)도 같은 방식으로
|
||||||
|
`/code/.local/bin`에 직접 설치. `luau-lsp analyze
|
||||||
|
--flag:LuauSolverV2=true/false`로 spike `08`(재귀 제네릭 패턴)을
|
||||||
|
비교한 결과 새 솔버 필요성 재확인(옛 솔버는 같은 패턴에 에러 3건,
|
||||||
|
새 솔버는 1건). `quad/.vscode/settings.json`에
|
||||||
|
`enableNewSolver: true` 반영·커밋. 부수로 typing-limits.md §1의 핵심
|
||||||
|
주장("`local s = n:Compute(fn); local wrong: number = s:Get()`가 0
|
||||||
|
진단으로 통과") 자체도 Luau 0.734에서 여전히 재현됨을 별도 최소
|
||||||
|
repro로 재확인(`s`가 `Unifiable<Error>`로 새는 것, `wrong` 줄은 진단
|
||||||
|
0건 — base 문서 정정 불필요, 그대로 유효함만 재확인). tbox가 쓰던
|
||||||
|
`LuauDoNotExportBrokenTypeFunction` override는 quad의 현재 type
|
||||||
|
function 스파이크(`16`/`21`)에서 유무 차이가 없어 채택 안 함.
|
||||||
|
`HUMAN_TODO.md` 6번/`typing-limits.md` §8 갱신, `rokit.toml`에
|
||||||
|
`luau-lsp` 핀 추가.
|
||||||
|
|
||||||
|
**남은 사람 몫**: VSCode를 실제로 열어 `.vscode/settings.json` 설정이
|
||||||
|
반영됐는지 육안 확인(HUMAN_TODO 6번), Studio 실물 동기화(HUMAN_TODO
|
||||||
|
1번, 계정 분리 대기). 이번 라운드로 이번 대화의 4개 후속 검증 항목은
|
||||||
|
전부 닫힘.
|
||||||
|
|
|
||||||
3
.vscode/settings.json
vendored
Normal file
3
.vscode/settings.json
vendored
Normal file
|
|
@ -0,0 +1,3 @@
|
||||||
|
{
|
||||||
|
"luau-lsp.fflags.enableNewSolver": true
|
||||||
|
}
|
||||||
|
|
@ -124,23 +124,27 @@ B(Attribute의 Instance 참조 타입)/C(CollectionService 태그 왕복) —
|
||||||
`architecture.md`의 해당 절을 갱신하고 기존 코드의
|
`architecture.md`의 해당 절을 갱신하고 기존 코드의
|
||||||
`const` 전환 범위를 같이 상의할 것.
|
`const` 전환 범위를 같이 상의할 것.
|
||||||
|
|
||||||
## 6. **[2026-08-13 신설, 안 막음]** 에디터의 Luau 솔버 설정 확인
|
## 6. ~~에디터의 Luau 솔버 설정 확인~~ **[2026-08-19 설정 완료 — VSCode 재시작만 확인해주면 됨]**
|
||||||
|
|
||||||
`luau-analyze` CLI는 **새 솔버가 기본값**이지만 에디터가 쓰는
|
`luau-analyze` CLI는 새 솔버가 기본값이지만 에디터가 쓰는 `luau-lsp`는
|
||||||
`luau-lsp`는 **옛 솔버가 기본값**(`LuauSolverV2=false`)이라 **같은 코드에
|
**옛 솔버가 기본값**(`LuauSolverV2=false`)이라 같은 코드에 다른 진단이
|
||||||
다른 진단이 나옵니다** — 이번 세션에 실제로 겪은 혼선의 원인이었음
|
나옴 — 예전엔 "실제 에디터 환경에서 확인 필요"로 사람에게 넘겨뒀던
|
||||||
(CLI는 클린인데 에디터엔 빨간 줄).
|
항목.
|
||||||
|
|
||||||
옛 솔버는 quad의 `Compute` 시그니처 패턴 자체를 선언 시점에 거부하므로
|
**[2026-08-19] `luau-lsp` 바이너리(1.69.0, `luau-lsp analyze` CLI 모드)를
|
||||||
사실상 새 솔버 외에 선택지가 없어 보이지만, **실제 사용하시는 에디터
|
`/code/.local/bin`에 직접 설치해 `--flag:LuauSolverV2=true/false`
|
||||||
환경에서 확인이 필요**합니다. VSCode의 "Luau Language Server" 확장이라면
|
양쪽으로 실측 — 새 솔버가 필요하다는 결론을 재확인**하고
|
||||||
워크스페이스 `.vscode/settings.json`에:
|
`quad/.vscode/settings.json`을 만들어 `{ "luau-lsp.fflags.enableNewSolver":
|
||||||
|
true }`를 이미 커밋해뒀음(팀/에디터 전체에 공유됨, 사용자가 손댈 것
|
||||||
|
없음). `tbox`(다른 참고 레포)도 동일 설정을 이미 쓰고 있어 교차 확인됨.
|
||||||
|
같이 검토했던 `LuauDoNotExportBrokenTypeFunction` override(tbox가 씀)는
|
||||||
|
quad의 현재 `type function` 스파이크(`16`/`21`)에서 유무 차이가 없어
|
||||||
|
**채택 안 함**(불필요한 설정 추가 지양).
|
||||||
|
|
||||||
```json
|
**사람이 확인해줄 것 하나만 남음**: 이건 CLI로 시뮬레이션한 것이지
|
||||||
{ "luau-lsp.fflags.enableNewSolver": true }
|
VSCode를 실제로 띄운 게 아님 — 다음에 VSCode를 열면 워크스페이스
|
||||||
```
|
설정이 잘 먹었는지(같은 `.luau` 파일에서 CLI 결과와 에디터의 빨간 줄이
|
||||||
|
일치하는지) 한 번만 눈으로 확인해주면 이 항목은 완전히 닫힘. 배경은
|
||||||
M0 착수 시점에 확인하면 되고 지금 막고 있진 않음. 배경은
|
|
||||||
`.claude/base/typing-limits.md` 8번, 실측은
|
`.claude/base/typing-limits.md` 8번, 실측은
|
||||||
`.claude/audit/type-recursion-issue/REPORT.md` 5절.
|
`.claude/audit/type-recursion-issue/REPORT.md` 5절.
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,11 @@
|
||||||
# Rokit-관리 툴체인. `vide`(`.claude/initreq/vide/rokit.toml`) 선례를 따르되
|
# Rokit-관리 툴체인. `vide`(`.claude/initreq/vide/rokit.toml`) 선례를 따르되
|
||||||
# wally 항목은 뺌(pesde로 전환, 2026-08-19 사용자 결정).
|
# wally 항목은 뺌(pesde로 전환, 2026-08-19 사용자 결정).
|
||||||
#
|
#
|
||||||
# ⚠️ 버전 핀은 이 세션이 웹에서 확인한 시점 기준 — 이 샌드박스엔 rokit/pesde
|
# [2026-08-19] pesde/rojo/luau-lsp 셋 다 이 핀 그대로 `/code/.local/bin`에
|
||||||
# 바이너리가 없어 실제로 `rokit install`을 돌려 검증하지 못했다. 실제
|
# 직접 설치해 버전 일치까지 실측 확인 완료(`rokit` 자체는 이 샌드박스에
|
||||||
# 설치 전에 `rokit add pesde-pkg/pesde` / `rokit add rojo-rbx/rojo`로
|
# 없어 `rokit install`로 검증한 건 아님 — 바이너리를 개별 다운로드해
|
||||||
# 최신 태그를 직접 재확인할 것.
|
# 대조). 상세는 `.claude/base/project-setup-plan.md`.
|
||||||
[tools]
|
[tools]
|
||||||
pesde = "pesde-pkg/pesde@0.7.3+registry.0.2.3"
|
pesde = "pesde-pkg/pesde@0.7.3+registry.0.2.3"
|
||||||
rojo = "rojo-rbx/rojo@7.7.0"
|
rojo = "rojo-rbx/rojo@7.7.0"
|
||||||
|
luau-lsp = "JohnnyMorganz/luau-lsp@1.69.0"
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue