mirror of
				https://github.com/astral-sh/ruff.git
				synced 2025-11-03 21:24:29 +00: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~~
		
			
				
	
	
		
			38 lines
		
	
	
	
		
			1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			38 lines
		
	
	
	
		
			1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
import react from "eslint-plugin-react";
 | 
						|
import tseslint from "typescript-eslint";
 | 
						|
import reactHooks from "eslint-plugin-react-hooks";
 | 
						|
import importPlugin from "eslint-plugin-import";
 | 
						|
 | 
						|
export default tseslint.config(
 | 
						|
  tseslint.configs.eslintRecommended,
 | 
						|
  tseslint.configs.recommended,
 | 
						|
  reactHooks.configs["recommended-latest"],
 | 
						|
  importPlugin.flatConfigs.recommended,
 | 
						|
  importPlugin.flatConfigs.typescript,
 | 
						|
  {
 | 
						|
    ...react.configs.flat.recommended,
 | 
						|
    ...react.configs.flat["jsx-runtime"],
 | 
						|
    files: ["**/*.{js,mjs,cjs,jsx,mjsx,ts,tsx,mtsx}"],
 | 
						|
    languageOptions: {
 | 
						|
      ...react.configs.flat.recommended.languageOptions,
 | 
						|
      ecmaVersion: "latest",
 | 
						|
      sourceType: "module",
 | 
						|
    },
 | 
						|
    rules: {
 | 
						|
      eqeqeq: [
 | 
						|
        "error",
 | 
						|
        "always",
 | 
						|
        {
 | 
						|
          null: "never",
 | 
						|
        },
 | 
						|
      ],
 | 
						|
      "@typescript-eslint/no-explicit-any": "off",
 | 
						|
      // Handled by typescript. It doesn't support shared?
 | 
						|
      "import/no-unresolved": "off",
 | 
						|
      "no-console": "error",
 | 
						|
    },
 | 
						|
  },
 | 
						|
  {
 | 
						|
    ignores: ["src/pkg/**"],
 | 
						|
  },
 | 
						|
);
 |