Micha Reiser
28dbc5c51e
[ty] Fix completion order in playground ( #18480 )
2025-06-05 18:55:54 +02:00
Andrew Gallant
55100209c7
[ty] IDE: add support for `object.<CURSOR>` completions ( #18468 )
...
This PR adds logic for detecting `Name Dot [Name]` token patterns,
finding the corresponding `ExprAttribute`, getting the type of the
object and returning the members available on that object.
Here's a video demonstrating this working:
https://github.com/user-attachments/assets/42ce78e8-5930-4211-a18a-fa2a0434d0eb
Ref astral-sh/ty#86
2025-06-05 11:15:19 -04:00
Micha Reiser
67d94d9ec8
Use ty's completions in playground ( #18425 )
2025-06-03 10:11:39 +02:00
renovate[bot]
57202c1c77
Update NPM Development dependencies ( #18423 )
2025-06-03 08:06:56 +02:00
David Peter
d51f6940fe
[ty] Playground: Better default settings ( #18316 )
...
## Summary
The playground default settings set the `division-by-zero` rule severity
to `error`. This slightly confusing because `division-by-zero` is now
disabled by default. I am assuming that we have a `rules` section in
there to make it easier for users to customize those settings (in
addition to what the JSON schema gives us).
Here, I'm proposing a different default rule-set (`"undefined-reveal":
"ignore"`) that I would personally find more helpful for the playground,
since we're using it so frequently for MREs that often involve some
`reveal_type` calls.
2025-05-26 14:14:23 +02:00
Micha Reiser
5d93d619f3
Use git-commit as ty playground version instead of 0.0.0 ( #18314 )
2025-05-26 11:55:11 +00:00
renovate[bot]
2b90e7fcd7
Update NPM Development dependencies ( #18305 )
2025-05-26 07:41:37 +02:00
Carl Meyer
7b253100f8
switch the playground repo button to ty repo ( #18228 )
...
Co-authored-by: Micha Reiser <micha@reiser.io>
2025-05-21 06:35:13 +00:00
renovate[bot]
34337fb8ba
Update NPM Development dependencies ( #18187 )
...
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-05-19 08:57:45 +02:00
renovate[bot]
405544cc8f
Update dependency react-resizable-panels to v3 ( #18185 )
...
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-05-19 06:29:31 +00:00
renovate[bot]
c40a801002
Update dependency pyodide to v0.27.6 ( #18170 )
...
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-05-19 08:23:21 +02:00
renovate[bot]
04168cf1ce
Update react monorepo to v19.1.0 ( #18178 )
...
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-05-19 08:13:33 +02:00
Micha Reiser
9000eb3bfd
Update favicon and URL for playground ( #17860 )
2025-05-06 10:51:45 +02:00
Micha Reiser
7f50b503cf
Allowlist play.ty.dev ( #17857 )
2025-05-06 10:16:17 +02:00
Micha Reiser
b51c4f82ea
Rename Red Knot ( #17820 )
2025-05-03 19:49:15 +02:00
renovate[bot]
650cbdd296
Update dependency vite to v6.2.7 ( #17746 )
2025-04-30 22:12:03 +02:00
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