renovate[bot]
516291b693
Update dependency react-resizable-panels to v2.1.9 ( #17667 )
...
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-04-28 08:10:24 +02:00
renovate[bot]
03065c245c
Update dependency smol-toml to v1.3.4 ( #17669 )
...
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-04-28 08:09:33 +02:00
Micha Reiser
1bdb22c139
[red-knot] Fix offset handling in playground for 2-code-point UTF16 characters ( #17520 )
2025-04-27 11:44:55 +01:00
Micha Reiser
624f5c6c22
Fix stale diagnostics in Ruff playground ( #17583 )
2025-04-23 15:47:54 +02:00
renovate[bot]
f83295fe51
Update dependency react-resizable-panels to v2.1.8 ( #17513 )
...
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-04-22 09:30:07 +02:00
renovate[bot]
c4581788b2
Update dependency smol-toml to v1.3.3 ( #17505 )
...
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-04-22 09:19:55 +02:00
renovate[bot]
2894aaa943
Update dependency uuid to v11.1.0 ( #17517 )
...
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-04-22 09:18:54 +02:00
Charlie Marsh
4bfdf54d1a
Allow types.ruff.rs for red-knot playground ( #17358 )
2025-04-11 12:56:03 -04:00
renovate[bot]
0caf09f5c3
Update dependency vite to v6.2.6 ( #17354 )
...
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-04-11 15:56:10 +00:00
Micha Reiser
5b1d8350ff
[red-knot] Fix double hovers/inlays in playground ( #17334 )
2025-04-10 12:40:41 +00:00
Matthew Mckee
10e44124e6
[red-knot] Add inlay type hints ( #17214 )
...
Co-authored-by: Micha Reiser <micha@reiser.io>
2025-04-10 09:21:40 +00:00
David Peter
761749cb50
[playground] New default program ( #17277 )
...
## Summary
This PR proposes to change the default example program in the
playground. I realize that this is somewhat underwhelming, but I found
it rather difficult to come up with something that circumvented missing
support for overloads/generics/self-type, while still looking like
(easy!) code that someone might actually write, and demonstrating some
Red Knot features. One thing that I wanted to capture was the experience
of adding type constraints to an untyped program. And I wanted something
that could be executed in the Playground once all errors are fixed.
Happy for any suggestions on what we could do instead. I had a lot of
different ideas, but always ran into one or another limitation. So I
guess we can also iterate on this as we add more features to Red Knot.
Try it here:
https://playknot.ruff.rs/8e3a96af-f35d-4488-840a-2abee6c0512d
```py
from typing import Literal
type Style = Literal["italic", "bold", "underline"]
# Add parameter annotations `line: str, word: str, style: Style` and a return
# type annotation `-> str` to see if you can find the mistakes in this program.
def with_style(line, word, style):
if style == "italic":
return line.replace(word, f"*{word}*")
elif style == "bold":
return line.replace(word, f"__{word}__")
position = line.find(word)
output = line + "\n"
output += " " * position
output += "-" * len(word)
print(with_style("Red Knot is a fast type checker for Python.", "fast", "underlined"))
```
closes https://github.com/astral-sh/ruff/issues/17267
2025-04-07 21:52:07 +02:00
Micha Reiser
5e0f563ee4
[red-knot] Fix stale syntax errors in playground ( #17280 )
...
## Summary
React requires that `key`s are unique but the constructed key for
diagnostics wasn't guaranteed when two diagnostics had the same name and
location.
This PR fixes this by using a disambiguator map to disambiguate the key.
Fixes #17276
## Test Plan
https://github.com/user-attachments/assets/f3f9d10a-ecc4-4ffe-8676-3633a12e07ce
2025-04-07 18:39:21 +02:00
Micha Reiser
3150812ac4
[red-knot] Add 'Format document' to playground ( #17217 )
...
## Summary
This is more "because we can" than something we need.
But since we're already building an "almost IDE"
## Test Plan
https://github.com/user-attachments/assets/3a4bdad1-ba32-455a-9909-cfeb8caa1b28
2025-04-07 09:26:03 +02:00
renovate[bot]
a038c2e662
Update dependency pyodide to v0.27.5 ( #17250 )
2025-04-06 22:01:57 -04:00
Micha Reiser
e01d228a71
[playground] Provide fallback monospace-font ( #17242 )
...
<img width="1679" alt="Screenshot 2025-04-06 at 22 51 43"
src="https://github.com/user-attachments/assets/ccd9dd1a-67cd-4bc3-a22a-f3c530b8670d "
/>
2025-04-06 21:57:20 +01:00
Micha Reiser
51bdb87fd8
[red-knot] Fix loading color in dark mode ( #17237 )
...
## Summary
The loading indicator on dark mode isn't "visible" because it's black on
black. Use white as text color instead.
2025-04-06 18:30:21 +01:00
Micha Reiser
3dd6d0a422
[playground] Add Reset button ( #17236 )
...
## Summary
Add a *Reset* button to both Ruff's and Red Knot's playground that
resets the playground to its initial state.
Closes https://github.com/astral-sh/ruff/issues/17195
## Test Plan
https://github.com/user-attachments/assets/753cca19-155a-44b1-89ba-76744487a55d
https://github.com/user-attachments/assets/7d19f04c-70f4-4d9e-b745-0486cb1d4993
2025-04-06 17:09:56 +00:00
Micha Reiser
4571c5f56f
[red-knot] Simplify playground editor state ( #17223 )
...
## Summary
Reduce the number of `useRef`s in `Editor`
2025-04-05 19:49:08 +02:00
renovate[bot]
172af7b4b0
Update dependency vite to v6.2.5 ( #17211 )
...
This PR contains the following updates:
| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [vite](https://vite.dev )
([source](https://redirect.github.com/vitejs/vite/tree/HEAD/packages/vite ))
| [`6.2.4` ->
`6.2.5`](https://renovatebot.com/diffs/npm/vite/6.2.4/6.2.5 ) |
[](https://docs.renovatebot.com/merge-confidence/ )
|
[](https://docs.renovatebot.com/merge-confidence/ )
|
[](https://docs.renovatebot.com/merge-confidence/ )
|
[](https://docs.renovatebot.com/merge-confidence/ )
|
---
> [!WARNING]
> Some dependencies could not be looked up. Check the Dependency
Dashboard for more information.
### GitHub Vulnerability Alerts
####
[CVE-2025-31486](https://redirect.github.com/vitejs/vite/security/advisories/GHSA-xcj6-pq6g-qj4x )
### Summary
The contents of arbitrary files can be returned to the browser.
### Impact
Only apps explicitly exposing the Vite dev server to the network (using
--host or [server.host config
option](https://vitejs.dev/config/server-options.html#server-host )) are
affected..
### Details
#### `.svg`
Requests ending with `.svg` are loaded at this line.
037f801075/packages/vite/src/node/plugins/asset.ts (L285-L290)
By adding `?.svg` with `?.wasm?init` or with `sec-fetch-dest: script`
header, the restriction was able to bypass.
This bypass is only possible if the file is smaller than
[`build.assetsInlineLimit`](https://vite.dev/config/build-options.html#build-assetsinlinelimit )
(default: 4kB) and when using Vite 6.0+.
#### relative paths
The check was applied before the id normalization. This allowed requests
to bypass with relative paths (e.g. `../../`).
### PoC
```bash
npm create vite@latest
cd vite-project/
npm install
npm run dev
```
send request to read `etc/passwd`
```bash
curl 'http://127.0.0.1:5173/etc/passwd?.svg?.wasm?init '
```
```bash
curl 'http://127.0.0.1:5173/@​fs/x/x/x/vite-project/?/../../../../../etc/passwd?import&?raw '
```
---
### Release Notes
<details>
<summary>vitejs/vite (vite)</summary>
###
[`v6.2.5`](https://redirect.github.com/vitejs/vite/releases/tag/v6.2.5 )
[Compare
Source](https://redirect.github.com/vitejs/vite/compare/v6.2.4...v6.2.5 )
Please refer to
[CHANGELOG.md](https://redirect.github.com/vitejs/vite/blob/v6.2.5/packages/vite/CHANGELOG.md )
for details.
</details>
---
### Configuration
📅 **Schedule**: Branch creation - "" (UTC), Automerge - At any time (no
schedule defined).
🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.
♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.
🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.
---
- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box
---
This PR was generated by [Mend Renovate](https://mend.io/renovate/ ).
View the [repository job
log](https://developer.mend.io/github/astral-sh/ruff ).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOS4yMjcuMyIsInVwZGF0ZWRJblZlciI6IjM5LjIyNy4zIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJpbnRlcm5hbCIsInNlY3VyaXR5Il19-->
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-04-05 08:28:01 +01:00
Micha Reiser
a4ba10ff0a
[red-knot] Add basic on-hover to playground and LSP ( #17057 )
...
## Summary
Implement a very basic hover in the playground and LSP.
It's basic, because it only shows the type on-hover. Most other LSPs
also show:
* The signature of the symbol beneath the cursor. E.g. `class
Test(a:int, b:int)` (we want something like
54f7da25f9/packages/pyright-internal/src/analyzer/typeEvaluator.ts (L21929-L22129) )
* The symbols' documentation
* Do more fancy markdown rendering
I decided to defer these features for now because it requires new
semantic APIs (similar to *goto definition*), and investing in fancy
rendering only makes sense once we have the relevant data.
Closes [#16826 ](https://github.com/astral-sh/ruff/issues/16826 )
## Test Plan
https://github.com/user-attachments/assets/044aeee4-58ad-4d4e-9e26-ac2a712026be
https://github.com/user-attachments/assets/4a1f4004-2982-4cf2-9dfd-cb8b84ff2ecb
2025-04-04 08:13:43 +02:00
Micha Reiser
66355a6185
[red-knot] Fix playground crashes when diagnostics are stale ( #17165 )
...
## Summary
Fixes a crash in the playground where it crashed with an "index out of
bounds" error in the `Diagnostic::to_range` call
after deleting content at the end of the file.
The root cause was that the playground uses `useDeferred` to avoid too
frequent `checkFile` calls (to get a smoother UX).
However, this has the problem that the rendered `diagnostics` can be
stable (from before the last change).
Rendering the diagnostics can then fail because the `toRange` call
queries the latest content and not the content
from when the diagnostics were created.
The fix is "easy" in the sense that we now eagerly perform the `toRange`
calls. This way, it doesn't matter
when the diagnostics are stale for a few ms.
This problem can only be observed on examples where Red Knot is "slow"
(takes more than ~16ms to check) because
only then does `useDeferred` "debounce" the `check` calls.
2025-04-03 10:18:36 +02:00
Micha Reiser
24498e383d
[red-knot] Add 'Goto type definition' to the playground ( #17055 )
...
## Summary
This PR adds Goto type definition to the playground, using the same
infrastructure as the LSP.
The main *challenge* with implementing this feature was that the editor
can now participate in which tab is open.
## Known limitations
The same as for the LSP. Most notably, navigating to types defined in
typeshed isn't supported.
## Test Plan
https://github.com/user-attachments/assets/22dad7c8-7ac7-463f-b066-5d5b2c45d1fe
2025-04-02 16:35:31 +02:00
Micha Reiser
0073fd4945
[red-knot] Playground improvements ( #17109 )
...
## Summary
A few smaller editor improvements that felt worth pulling out of my
other feature PRs:
* Load the `Editor` lazily: This allows splitting the entire monaco
javascript into a separate async bundle, drastically reducing the size
of the `index.js`
* Fix the name of `to_range` and `text_range` to the more idiomatic js
names `toRange` and `textRange`
* Use one indexed values for `Position::line` and `Position::column`,
which is the same as monaco (reduces the need for `+1` and `-1`
operations spread all over the place)
* Preserve the editor state when navigating between tabs. This ensures
that selections are preserved even when switching between tabs.
* Stop the default handling of the `Enter` key press event when renaming
a file because it resulted in adding a newline in the editor
2025-04-01 10:04:51 +02:00
renovate[bot]
a9dbfebc61
Update dependency vite to v6.2.4 ( #17104 )
2025-04-01 08:29:59 +02:00
Micha Reiser
37a40e30f6
[playground] Allow selecting the diagnostic message ( #17051 )
...
## Summary
Allow selecting the diagnostic message so that the message can be copied
(e.g. into an issue)
## Test Plan
<img width="1679" alt="Screenshot 2025-03-28 at 16 52 45"
src="https://github.com/user-attachments/assets/06674d87-6c88-45d4-b46c-0bcb3e151996 "
/>
2025-03-28 20:58:05 +00:00
Micha Reiser
6b02c39321
[red-knot] Incorporate recent ruff server improvements into red knot's LSP ( #17044 )
2025-03-28 18:39:18 +00:00
Micha Reiser
4067a7e50c
[red-knot] Don't check non-python files ( #17021 )
...
## Summary
Fixes https://github.com/astral-sh/ruff/issues/17018
## Test Plan
I renamed a python file to `knot.toml` and verified that there are no
diagnostics. Renaming back the file to `*.py` brings back the
diagnostics
2025-03-27 19:45:04 +00:00
Micha Reiser
f9bc80ad55
[red-knot] Fix syntax highlighting for pyi files ( #17015 )
...
Monaco supports inferring the language based on the file's extension but
it doesn't seem to support `pyi`. I tried to patch up the python
language definition by adding `.pyi` to the language's `extension` array
but that didn't work. That's why I decided to patch up the language in
React.
2025-03-27 19:27:22 +00:00
David Peter
142fe0d29b
[playground] Fix `reveal_type` ( #17013 )
...
## Summary
Capture both `stdout` and `stderr` in a single stream. This fixes
`reveal_type`, which prints to `stderr` by default.
## Test Plan
Tested with a simple `reveal_type(1)` example and got the output:
```
Runtime value is '1'
Runtime type is 'int'
```
2025-03-27 17:21:26 +01:00
Micha Reiser
640d821108
[red-knot] `reveal-type` should return the revaled type ( #17007 )
...
## Summary
Return the revealed-type from the monkey-patched `revale_type`
implementation to
preserve the identity behavior.
This PR also isolates different script runs by assigning a different
`globals` dict for each script-run. See
https://github.com/pyodide/pyodide/issues/703
2025-03-27 03:04:57 +00:00
Micha Reiser
43ca85a351
[red-knot] Add run panel ( #17002 )
...
## Summary
This PR adds a new secondary panel to the red knot playground that
allows running the python code (current file) with
[pyodide](https://pyodide.org/en/stable/index.html ) (currently Python
3.12 only).
## Test Plan
https://github.com/user-attachments/assets/7bda8ef7-19fb-4c2f-8e62-8e49a1416be1
2025-03-26 21:32:07 +00:00
Micha Reiser
338fed98a4
[red-knot] Use React suspense to show loading spinner ( #16986 )
...
## Summary
Use React's suspense feature to show a loading spinner while the WASM
module is initializing.
2025-03-26 17:56:14 +00:00
renovate[bot]
807fce8069
Update dependency vite to v6.2.3 ( #16972 )
...
This PR contains the following updates:
| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [vite](https://vite.dev )
([source](https://redirect.github.com/vitejs/vite/tree/HEAD/packages/vite ))
| [`6.2.2` ->
`6.2.3`](https://renovatebot.com/diffs/npm/vite/6.2.2/6.2.3 ) |
[](https://docs.renovatebot.com/merge-confidence/ )
|
[](https://docs.renovatebot.com/merge-confidence/ )
|
[](https://docs.renovatebot.com/merge-confidence/ )
|
[](https://docs.renovatebot.com/merge-confidence/ )
|
---
> [!WARNING]
> Some dependencies could not be looked up. Check the Dependency
Dashboard for more information.
### GitHub Vulnerability Alerts
####
[CVE-2025-30208](https://redirect.github.com/vitejs/vite/security/advisories/GHSA-x574-m823-4x7w )
### Summary
The contents of arbitrary files can be returned to the browser.
### Impact
Only apps explicitly exposing the Vite dev server to the network (using
`--host` or [`server.host` config
option](https://vitejs.dev/config/server-options.html#server-host )) are
affected.
### Details
`@fs` denies access to files outside of Vite serving allow list. Adding
`?raw??` or `?import&raw??` to the URL bypasses this limitation and
returns the file content if it exists. This bypass exists because
trailing separators such as `?` are removed in several places, but are
not accounted for in query string regexes.
### PoC
```bash
$ npm create vite@latest
$ cd vite-project/
$ npm install
$ npm run dev
$ echo "top secret content" > /tmp/secret.txt
# expected behaviour
$ curl "http://localhost:5173/@​fs/tmp/secret.txt "
<body>
<h1>403 Restricted</h1>
<p>The request url "/tmp/secret.txt" is outside of Vite serving allow list.
# security bypassed
$ curl "http://localhost:5173/@​fs/tmp/secret.txt?import&raw ??"
export default "top secret content\n"
//# sourceMappingURL=data:application/json;base64,eyJ2...
```
---
### Release Notes
<details>
<summary>vitejs/vite (vite)</summary>
###
[`v6.2.3`](https://redirect.github.com/vitejs/vite/releases/tag/v6.2.3 )
[Compare
Source](https://redirect.github.com/vitejs/vite/compare/v6.2.2...v6.2.3 )
Please refer to
[CHANGELOG.md](https://redirect.github.com/vitejs/vite/blob/v6.2.3/packages/vite/CHANGELOG.md )
for details.
</details>
---
### Configuration
📅 **Schedule**: Branch creation - "" (UTC), Automerge - At any time (no
schedule defined).
🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.
♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.
🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.
---
- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box
---
This PR was generated by [Mend Renovate](https://mend.io/renovate/ ).
View the [repository job
log](https://developer.mend.io/github/astral-sh/ruff ).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOS4yMDcuMSIsInVwZGF0ZWRJblZlciI6IjM5LjIwNy4xIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJpbnRlcm5hbCIsInNlY3VyaXR5Il19-->
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-03-25 20:17:40 +00:00
Micha Reiser
cba197e3c5
[red-knot] Default playground to Python 3.13 for real ( #16956 )
...
## Summary
Default to 3.13 for good.
I incorrectly used `workspace.updateOptions` instead of `updateOptions`
where the latter has a fallback.
## Test Plan
```py
import os
import sys
reveal_type(sys.version_info.minor)
```
reveals 13 on initial page load
2025-03-24 16:40:49 +00:00
Micha Reiser
85b7f808e1
[red-knot] Default playground to Python 3.13 ( #16952 )
...
## Summary
Default playground to Python 3.13 if there's no setting present. Fix
errors when a setting was added / removed.
2025-03-24 15:54:54 +00:00
Micha Reiser
f5cdf23545
[red-knot] Add settings support to playground ( #16929 )
...
## Summary
This PR extends the Red Knot playground by adding configuration support
by adding a `knot.json` file.
<img width="1679" alt="Screenshot 2025-03-23 at 21 12 16"
src="https://github.com/user-attachments/assets/81ff1588-a07a-4847-97d8-61250aa2feda "
/>
2025-03-24 01:38:48 +00:00
John Stilley
c35f2bfe32
Fixing various spelling errors ( #16924 )
...
<!--
Thank you for contributing to Ruff! To help us out with reviewing,
please consider the following:
- Does this pull request include a summary of the change? (See below.)
- Does this pull request include a descriptive title?
- Does this pull request include references to any relevant issues?
-->
## Summary
This is a cleanup PR. I am fixing various English language spelling
errors. This is mostly in docs and docstrings.
## Test Plan
The usual CI tests were run. I tried to build the docs (though I had
some troubles there). The testing needs here are, I trust, very low
impact. (Though I would happily test more.)
2025-03-23 08:08:40 +00:00
Brent Westbrook
22de00de16
[internal] Return `Message`s from `check_path` ( #16837 )
...
Summary
--
This PR updates `check_path` in the `ruff_linter` crate to return a
`Vec<Message>` instead of a `Vec<Diagnostic>`. The main motivation for
this is to make it easier to convert semantic syntax errors directly
into `Message`s rather than `Diagnostic`s in #16106 . However, this also
has the benefit of keeping the preview check on unsupported syntax
errors in `check_path`, as suggested in
https://github.com/astral-sh/ruff/pull/16429#discussion_r1974748024 .
All of the interesting changes are in the first commit. The second
commit just renames variables like `diagnostics` to `messages`, and the
third commit is a tiny import fix.
I also updated the `ExpandedMessage::location` field name, which caused
a few extra commits tidying up the playground code. I thought it was
nicely symmetric with `end_location`, but I'm happy to revert that too.
Test Plan
--
Existing tests. I also tested the playground and server manually.
2025-03-19 10:08:07 -04:00
InSync
15a6aeb998
[red-knot] Add missing space between error message and lint code in playground ( #16840 )
2025-03-19 11:10:59 +01:00
Micha Reiser
a9f5dddbaa
[playground] Use cursor for clickable elements ( #16833 )
2025-03-18 18:06:00 +01:00
Micha Reiser
c027979851
Red Knot Playground ( #12681 )
...
## 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~~
2025-03-18 17:17:11 +01:00
Micha Reiser
c9cd0acaeb
[playground] Upgrade dependencies ( #16825 )
2025-03-18 09:07:34 +01:00
Micha Reiser
ded9c69888
[playground] Extract shared components ( #16819 )
...
## Summary
Extract components that can be shared with the Red Knot playground.
## Test Plan
`npm start`
2025-03-18 08:43:47 +01:00
Micha Reiser
90a8d92b2f
[refactor] Convert playground to an NPM workspace ( #16806 )
...
## Summary
This is prep-work for the Red Knot playground. We'll have two
playgrounds, one for Red Knot and Ruff.
I want to share some components between the two, a "shared" NPM package
in a local workspace is a great fit for that.
I also want to share the dev dependencies and dev scripts. Again, NPM
workspaces are great for that.
This PR also sets up a CI workflow for the playground to prevent
surprises during the release.
## Test Plan
CI, local `npm install`, `npm start`, ...
I verified that the new CI step fails if there's a typescript or
formatting error.
* [Deployment test
run](https://github.com/astral-sh/ruff/actions/runs/13904914480/job/38905524353 )
2025-03-17 17:56:45 +01:00
Charlie Marsh
c9ab925275
Pull in fonts from a CDN ( #16498 )
...
## Summary
Closes https://github.com/astral-sh/ruff/issues/16486 .
## Test Plan

2025-03-04 09:36:35 -05:00
Micha Reiser
be239b9f25
Upgrade to Tailwind4 ( #16471 )
...
## Test Plan
<img width="3360" alt="Screenshot 2025-03-03 at 10 01 19"
src="https://github.com/user-attachments/assets/d1ecfca0-ce51-440b-aabb-9107323fd1a4 "
/>
2025-03-03 10:09:09 +01:00
Micha Reiser
8c899c5409
Upgrade to ESlint 9 ( #16470 )
...
Closes https://github.com/astral-sh/ruff/issues/12723
2025-03-03 09:59:57 +01:00
renovate[bot]
a08f5edf75
Update NPM Development dependencies ( #16466 )
...
This PR contains the following updates:
| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
|
[@cloudflare/workers-types](https://redirect.github.com/cloudflare/workerd )
| [`4.20250214.0` ->
`4.20250224.0`](https://renovatebot.com/diffs/npm/@cloudflare%2fworkers-types/4.20250214.0/4.20250224.0 )
|
[](https://docs.renovatebot.com/merge-confidence/ )
|
[](https://docs.renovatebot.com/merge-confidence/ )
|
[](https://docs.renovatebot.com/merge-confidence/ )
|
[](https://docs.renovatebot.com/merge-confidence/ )
|
|
[@typescript-eslint/eslint-plugin](https://typescript-eslint.io/packages/eslint-plugin )
([source](https://redirect.github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/eslint-plugin ))
| [`8.24.1` ->
`8.25.0`](https://renovatebot.com/diffs/npm/@typescript-eslint%2feslint-plugin/8.24.1/8.25.0 )
|
[](https://docs.renovatebot.com/merge-confidence/ )
|
[](https://docs.renovatebot.com/merge-confidence/ )
|
[](https://docs.renovatebot.com/merge-confidence/ )
|
[](https://docs.renovatebot.com/merge-confidence/ )
|
|
[@typescript-eslint/parser](https://typescript-eslint.io/packages/parser )
([source](https://redirect.github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser ))
| [`8.24.1` ->
`8.25.0`](https://renovatebot.com/diffs/npm/@typescript-eslint%2fparser/8.24.1/8.25.0 )
|
[](https://docs.renovatebot.com/merge-confidence/ )
|
[](https://docs.renovatebot.com/merge-confidence/ )
|
[](https://docs.renovatebot.com/merge-confidence/ )
|
[](https://docs.renovatebot.com/merge-confidence/ )
|
|
[eslint-config-prettier](https://redirect.github.com/prettier/eslint-config-prettier )
| [`10.0.1` ->
`10.0.2`](https://renovatebot.com/diffs/npm/eslint-config-prettier/10.0.1/10.0.2 )
|
[](https://docs.renovatebot.com/merge-confidence/ )
|
[](https://docs.renovatebot.com/merge-confidence/ )
|
[](https://docs.renovatebot.com/merge-confidence/ )
|
[](https://docs.renovatebot.com/merge-confidence/ )
|
| [eslint-plugin-react-hooks](https://react.dev/ )
([source](https://redirect.github.com/facebook/react/tree/HEAD/packages/eslint-plugin-react-hooks ))
| [`5.1.0` ->
`5.2.0`](https://renovatebot.com/diffs/npm/eslint-plugin-react-hooks/5.1.0/5.2.0 )
|
[](https://docs.renovatebot.com/merge-confidence/ )
|
[](https://docs.renovatebot.com/merge-confidence/ )
|
[](https://docs.renovatebot.com/merge-confidence/ )
|
[](https://docs.renovatebot.com/merge-confidence/ )
|
|
[miniflare](https://redirect.github.com/cloudflare/workers-sdk/tree/main/packages/miniflare#readme )
([source](https://redirect.github.com/cloudflare/workers-sdk/tree/HEAD/packages/miniflare ))
| [`3.20250214.0` ->
`3.20250214.1`](https://renovatebot.com/diffs/npm/miniflare/3.20250214.0/3.20250214.1 )
|
[](https://docs.renovatebot.com/merge-confidence/ )
|
[](https://docs.renovatebot.com/merge-confidence/ )
|
[](https://docs.renovatebot.com/merge-confidence/ )
|
[](https://docs.renovatebot.com/merge-confidence/ )
|
| [prettier](https://prettier.io )
([source](https://redirect.github.com/prettier/prettier )) | [`3.5.2` ->
`3.5.3`](https://renovatebot.com/diffs/npm/prettier/3.5.2/3.5.3 ) |
[](https://docs.renovatebot.com/merge-confidence/ )
|
[](https://docs.renovatebot.com/merge-confidence/ )
|
[](https://docs.renovatebot.com/merge-confidence/ )
|
[](https://docs.renovatebot.com/merge-confidence/ )
|
| [typescript](https://www.typescriptlang.org/ )
([source](https://redirect.github.com/microsoft/TypeScript )) | [`5.7.3`
-> `5.8.2`](https://renovatebot.com/diffs/npm/typescript/5.7.3/5.8.2 ) |
[](https://docs.renovatebot.com/merge-confidence/ )
|
[](https://docs.renovatebot.com/merge-confidence/ )
|
[](https://docs.renovatebot.com/merge-confidence/ )
|
[](https://docs.renovatebot.com/merge-confidence/ )
|
| [vite](https://vite.dev )
([source](https://redirect.github.com/vitejs/vite/tree/HEAD/packages/vite ))
| [`6.1.1` ->
`6.2.0`](https://renovatebot.com/diffs/npm/vite/6.1.1/6.2.0 ) |
[](https://docs.renovatebot.com/merge-confidence/ )
|
[](https://docs.renovatebot.com/merge-confidence/ )
|
[](https://docs.renovatebot.com/merge-confidence/ )
|
[](https://docs.renovatebot.com/merge-confidence/ )
|
| [wrangler](https://redirect.github.com/cloudflare/workers-sdk )
([source](https://redirect.github.com/cloudflare/workers-sdk/tree/HEAD/packages/wrangler ))
| [`3.109.2` ->
`3.111.0`](https://renovatebot.com/diffs/npm/wrangler/3.109.2/3.111.0 ) |
[](https://docs.renovatebot.com/merge-confidence/ )
|
[](https://docs.renovatebot.com/merge-confidence/ )
|
[](https://docs.renovatebot.com/merge-confidence/ )
|
[](https://docs.renovatebot.com/merge-confidence/ )
|
---
> [!WARNING]
> Some dependencies could not be looked up. Check the Dependency
Dashboard for more information.
---
### Release Notes
<details>
<summary>cloudflare/workerd (@​cloudflare/workers-types)</summary>
###
[`v4.20250224.0`](28b2bb16d9...96568b0458 )
[Compare
Source](28b2bb16d9...96568b0458 )
</details>
<details>
<summary>typescript-eslint/typescript-eslint
(@​typescript-eslint/eslint-plugin)</summary>
###
[`v8.25.0`](https://redirect.github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/eslint-plugin/CHANGELOG.md#8250-2025-02-24 )
[Compare
Source](https://redirect.github.com/typescript-eslint/typescript-eslint/compare/v8.24.1...v8.25.0 )
##### 🚀 Features
- **eslint-plugin:** \[no-misused-spread] add suggestions
([#​10719](https://redirect.github.com/typescript-eslint/typescript-eslint/pull/10719 ))
##### 🩹 Fixes
- **eslint-plugin:** \[prefer-nullish-coalescing] report on chain
expressions in a ternary
([#​10708](https://redirect.github.com/typescript-eslint/typescript-eslint/pull/10708 ))
- **eslint-plugin:** \[no-deprecated] report usage of deprecated private
identifiers
([#​10844](https://redirect.github.com/typescript-eslint/typescript-eslint/pull/10844 ))
- **eslint-plugin:** \[unified-signatures] handle getter-setter
([#​10818](https://redirect.github.com/typescript-eslint/typescript-eslint/pull/10818 ))
##### ❤️ Thank You
- Olivier Zalmanski
[@​OlivierZal](https://redirect.github.com/OlivierZal )
- Ronen Amiel
- YeonJuan [@​yeonjuan](https://redirect.github.com/yeonjuan )
You can read about our [versioning
strategy](https://main--typescript-eslint.netlify.app/users/versioning )
and
[releases](https://main--typescript-eslint.netlify.app/users/releases )
on our website.
</details>
<details>
<summary>typescript-eslint/typescript-eslint
(@​typescript-eslint/parser)</summary>
###
[`v8.25.0`](https://redirect.github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/parser/CHANGELOG.md#8250-2025-02-24 )
[Compare
Source](https://redirect.github.com/typescript-eslint/typescript-eslint/compare/v8.24.1...v8.25.0 )
This was a version bump only for parser to align it with other projects,
there were no code changes.
You can read about our [versioning
strategy](https://main--typescript-eslint.netlify.app/users/versioning )
and
[releases](https://main--typescript-eslint.netlify.app/users/releases )
on our website.
</details>
<details>
<summary>prettier/eslint-config-prettier
(eslint-config-prettier)</summary>
###
[`v10.0.2`](https://redirect.github.com/prettier/eslint-config-prettier/blob/HEAD/CHANGELOG.md#1002 )
[Compare
Source](https://redirect.github.com/prettier/eslint-config-prettier/compare/v10.0.1...v10.0.2 )
##### Patch Changes
-
[#​299](https://redirect.github.com/prettier/eslint-config-prettier/pull/299 )
[`e750edc`](e750edc530 )
Thanks [@​Fdawgs](https://redirect.github.com/Fdawgs )! -
chore(package): explicitly declare js module type
</details>
<details>
<summary>facebook/react (eslint-plugin-react-hooks)</summary>
###
[`v5.2.0`](63cde684f5...3607f4838a )
[Compare
Source](63cde684f5...3607f4838a )
</details>
<details>
<summary>cloudflare/workers-sdk (miniflare)</summary>
###
[`v3.20250214.1`](https://redirect.github.com/cloudflare/workers-sdk/blob/HEAD/packages/miniflare/CHANGELOG.md#3202502141 )
[Compare
Source](https://redirect.github.com/cloudflare/workers-sdk/compare/miniflare@3.20250214.0...miniflare@3.20250214.1 )
##### Patch Changes
-
[#​8247](https://redirect.github.com/cloudflare/workers-sdk/pull/8247 )
[`a9a4c33`](a9a4c33143 )
Thanks [@​GregBrimble](https://redirect.github.com/GregBrimble )! -
feat: Omits Content-Type header for files of an unknown extension in
Workers Assets
-
[#​8239](https://redirect.github.com/cloudflare/workers-sdk/pull/8239 )
[`6cae13a`](6cae13aa5f )
Thanks [@​edmundhung](https://redirect.github.com/edmundhung )! -
fix: allow the `fetchMock` option to be parsed upfront before passing it
to Miniflare
</details>
<details>
<summary>prettier/prettier (prettier)</summary>
###
[`v3.5.3`](https://redirect.github.com/prettier/prettier/compare/3.5.2...b51ba9d46765bcfab714ebca982bd04ad25ae562 )
[Compare
Source](https://redirect.github.com/prettier/prettier/compare/3.5.2...3.5.3 )
</details>
<details>
<summary>microsoft/TypeScript (typescript)</summary>
###
[`v5.8.2`](https://redirect.github.com/microsoft/TypeScript/compare/v5.7.3...beb69e4cdd61b1a0fd9ae21ae58bd4bd409d7217 )
[Compare
Source](https://redirect.github.com/microsoft/TypeScript/compare/v5.7.3...v5.8.2 )
</details>
<details>
<summary>vitejs/vite (vite)</summary>
###
[`v6.2.0`](https://redirect.github.com/vitejs/vite/blob/HEAD/packages/vite/CHANGELOG.md#620-2025-02-25 )
[Compare
Source](https://redirect.github.com/vitejs/vite/compare/v6.1.1...v6.2.0 )
- fix(deps): update all non-major dependencies
([#​19501](https://redirect.github.com/vitejs/vite/issues/19501 ))
([c94c9e0](c94c9e0521 )),
closes
[#​19501](https://redirect.github.com/vitejs/vite/issues/19501 )
- fix(worker): string interpolation in dynamic worker options
([#​19476](https://redirect.github.com/vitejs/vite/issues/19476 ))
([07091a1](07091a1e80 )),
closes
[#​19476](https://redirect.github.com/vitejs/vite/issues/19476 )
- chore: use unicode cross icon instead of x
([#​19497](https://redirect.github.com/vitejs/vite/issues/19497 ))
([5c70296](5c70296ffb )),
closes
[#​19497](https://redirect.github.com/vitejs/vite/issues/19497 )
</details>
<details>
<summary>cloudflare/workers-sdk (wrangler)</summary>
###
[`v3.111.0`](https://redirect.github.com/cloudflare/workers-sdk/blob/HEAD/packages/wrangler/CHANGELOG.md#31110 )
[Compare
Source](https://redirect.github.com/cloudflare/workers-sdk/compare/wrangler@3.110.0...wrangler@3.111.0 )
##### Minor Changes
-
[#​7977](https://redirect.github.com/cloudflare/workers-sdk/pull/7977 )
[`36ef9c6`](36ef9c6209 )
Thanks [@​jkoe-cf](https://redirect.github.com/jkoe-cf )! - Added
wrangler r2 commands for bucket lock configuration
##### Patch Changes
-
[#​8248](https://redirect.github.com/cloudflare/workers-sdk/pull/8248 )
[`1cb2d34`](1cb2d3418b )
Thanks [@​GregBrimble](https://redirect.github.com/GregBrimble )! -
feat: Omits Content-Type header for files of an unknown extension in
Workers Assets
-
[#​7977](https://redirect.github.com/cloudflare/workers-sdk/pull/7977 )
[`36ef9c6`](36ef9c6209 )
Thanks [@​jkoe-cf](https://redirect.github.com/jkoe-cf )! - fixing
the format of the R2 lifecycle rule date input to be parsed as string
instead of number
###
[`v3.110.0`](https://redirect.github.com/cloudflare/workers-sdk/blob/HEAD/packages/wrangler/CHANGELOG.md#31100 )
[Compare
Source](https://redirect.github.com/cloudflare/workers-sdk/compare/wrangler@3.109.3...wrangler@3.110.0 )
##### Minor Changes
-
[#​8253](https://redirect.github.com/cloudflare/workers-sdk/pull/8253 )
[`6dd1e23`](6dd1e2300e )
Thanks
[@​CarmenPopoviciu](https://redirect.github.com/CarmenPopoviciu )!
- Add `--cwd` global argument to the `wrangler` CLI to allow changing
the current working directory before running any command.
##### Patch Changes
-
[#​8191](https://redirect.github.com/cloudflare/workers-sdk/pull/8191 )
[`968c3d9`](968c3d9c06 )
Thanks [@​vicb](https://redirect.github.com/vicb )! - Optimize
global injection in node compat mode
-
[#​8247](https://redirect.github.com/cloudflare/workers-sdk/pull/8247 )
[`a9a4c33`](a9a4c33143 )
Thanks [@​GregBrimble](https://redirect.github.com/GregBrimble )! -
feat: Omits Content-Type header for files of an unknown extension in
Workers Assets
- Updated dependencies
\[[`a9a4c33`](a9a4c33143 ),
[`6cae13a`](6cae13aa5f )]:
- miniflare@3.20250214.1
###
[`v3.109.3`](https://redirect.github.com/cloudflare/workers-sdk/blob/HEAD/packages/wrangler/CHANGELOG.md#31093 )
[Compare
Source](https://redirect.github.com/cloudflare/workers-sdk/compare/wrangler@3.109.2...wrangler@3.109.3 )
##### Patch Changes
-
[#​8175](https://redirect.github.com/cloudflare/workers-sdk/pull/8175 )
[`eb46f98`](eb46f987cc )
Thanks [@​edmundhung](https://redirect.github.com/edmundhung )! -
fix: `unstable_splitSqlQuery` should ignore comments when splitting sql
into statements
</details>
---
### Configuration
📅 **Schedule**: Branch creation - "before 4am on Monday" (UTC),
Automerge - At any time (no schedule defined).
🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.
♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.
👻 **Immortal**: This PR will be recreated if closed unmerged. Get
[config
help](https://redirect.github.com/renovatebot/renovate/discussions ) if
that's undesired.
---
- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box
---
This PR was generated by [Mend Renovate](https://mend.io/renovate/ ).
View the [repository job
log](https://developer.mend.io/github/astral-sh/ruff ).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOS4xNzYuMiIsInVwZGF0ZWRJblZlciI6IjM5LjE3Ni4yIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJpbnRlcm5hbCJdfQ==-->
---------
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Micha Reiser <micha@reiser.io>
2025-03-03 08:04:59 +00:00
renovate[bot]
0fad53d203
Update NPM Development dependencies ( #16327 )
...
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-02-24 08:26:14 +01:00