mirror of
https://github.com/astral-sh/ruff
synced 2026-01-11 08:34:29 -05:00
## Summary This PR adds a playground for Red Knot [Screencast from 2024-08-14 10-33-54.webm](https://github.com/user-attachments/assets/ae81d85f-74a3-4ba6-bb61-4a871b622f05) Sharing does work 😆 I just forgot to start wrangler. It supports: * Multiple files * Showing the AST * Showing the tokens * Sharing * Persistence to local storage Future extensions: * Configuration support: The `pyproject.toml` would *just* be another file. * Showing type information on hover ## Blockers ~~Salsa uses `catch_unwind` to break cycles, which Red Knot uses extensively when inferring types in the standard library. However, WASM (at least `wasm32-unknown-unknown`) doesn't support `catch_unwind` today, so the playground always crashes when the type inference encounters a cycle.~~ ~~I created a discussion in the [salsa zulip](https://salsa.zulipchat.com/#narrow/stream/333573-salsa-3.2E0/topic/WASM.20support) to see if it would be possible to **not** use catch unwind to break cycles.~~ ~~[Rust tracking issue for WASM catch unwind support](https://github.com/rust-lang/rust/issues/118168)~~ ~~I tried to build the WASM with the nightly compiler option but ran into problems because wasm-bindgen doesn't support WASM-exceptions. We could try to write the binding code by hand.~~ ~~Another alternative is to use `wasm32-unknown-emscripten` but it's rather painful to build~~
41 lines
1.2 KiB
JSON
41 lines
1.2 KiB
JSON
{
|
|
"name": "playground",
|
|
"private": true,
|
|
"version": "0.0.0",
|
|
"type": "module",
|
|
"scripts": {
|
|
"check": "npm run dev:wasm && npm run lint && npm run tsc",
|
|
"dev:wasm": "npm run dev:wasm --workspace knot-playground && npm run dev:wasm --workspace ruff-playground",
|
|
"dev:build": "npm run dev:build --workspace knot-playground && npm run dev:build --workspace ruff-playground",
|
|
"fmt": "prettier --cache -w .",
|
|
"fmt:check": "prettier --cache --check .",
|
|
"lint": "eslint --cache --ext .ts,.tsx ruff/src knot/src",
|
|
"tsc": "tsc"
|
|
},
|
|
"workspaces": [
|
|
"knot",
|
|
"ruff",
|
|
"shared"
|
|
],
|
|
"prettier": {
|
|
"trailingComma": "all"
|
|
},
|
|
"devDependencies": {
|
|
"@eslint/js": "^9.21.0",
|
|
"@tailwindcss/vite": "^4.0.14",
|
|
"@types/react": "^19.0.11",
|
|
"@types/react-dom": "^19.0.0",
|
|
"@vitejs/plugin-react-swc": "^3.0.0",
|
|
"eslint": "^9.22.0",
|
|
"eslint-plugin-import": "^2.31.0",
|
|
"eslint-plugin-react": "^7.31.11",
|
|
"eslint-plugin-react-hooks": "^5.2.0",
|
|
"prettier": "^3.5.3",
|
|
"tailwindcss": "^4.0.14",
|
|
"typescript": "^5.8.2",
|
|
"typescript-eslint": "^8.26.1",
|
|
"vite": "^6.2.2",
|
|
"wasm-pack": "^0.13.1"
|
|
}
|
|
}
|