Commit Graph
14726 Commits
Author SHA1 Message Date
Mikayla Maki 361801e527 WIP: Remove V parameter on elements (#3366)
This is an exploration of what it would take to remove the `V` generic
from the element type. Answer: less than I expected.

I added a new struct to GPUI2: `CallbackHandle<Event>`, and reworked the
interactivity related APIs to take this type. I also added a
`.callback()` function to `ViewContext` that can construct a
`CallbackHandle` to wrap our current `|&mut View, &Evt, &mut
ViewContext| {...}` based APIs. With these two changes, we can now
capture the context of the callsite of a click handler, allowing us to
capture all relevant types and data _before_ sending them into GPUI.
This lets us achieve a similar programing style to the existing system,
while also letting us remove all of the generics from the entire element
system. For an example of what this looks like in practice, here's a
side by side diff of the test in `interactive.rs` (which compiles and
passes):

<img width="1310" alt="Screenshot 2023-11-19 at 7 32 08 PM"
src="https://github.com/zed-industries/zed/assets/2280405/596f2a9a-9c8e-4158-bf6d-0003cf973015">

Note how the new arrangement of types is more amenable to rust's type
inference, allowing the code to be just as terse as before despite the
extra function call in the middle.

This approach also allows components to provide well typed APIs to
views, without ever knowing that view's type. This PR includes an
example rewrite of the button component in `ui2`, here's what it's
struct could look like now:

<img width="1105" alt="Screenshot 2023-11-19 at 7 24 28 PM"
src="https://github.com/zed-industries/zed/assets/2280405/fc98d3c2-6831-4c0f-a324-ab0fae33b0bc">

However, I have not yet ported the derive macro for Component to this
new structure, as I know @nathansobo is currently reworking that code.

Once that macro has been rewritten, it should be relatively easy to
rewrite the rest of Zed2 with this approach, the only major difference
that I can foresee is that the editor element would need to wrap it's
operations in an update callback. Though I can think of a few ways to
fix this with a new `ViewElement` trait, that does the wrapping for you.
2023-11-20 16:24:01 -08:00
MikaylaandPiotrek a844bf7d41 Fix stories
co-authored-by: Piotrek <piotr@zed.dev>
2023-11-20 16:06:10 -08:00
Conrad Irwin 8049ec674e Fix last thing 2023-11-20 16:35:56 -07:00
Conrad Irwin 5c0f2e75ea Remove all the settings 2023-11-20 16:30:14 -07:00
Conrad Irwin 3e2dba36b4 Merge branch 'main' into callback-handles 2023-11-20 16:28:35 -07:00
Nate Butler 3096222672 Add deploy-docs script (#3373)
[[PR Description]]

Adds `script/deploy-docs`:
- If you don't already have it, it will clone the `zed-docs` repo into
`../zed-docs`
    - It will build the docs and output them in `../zed-docs`
    - Then it will open the docs.
- By default this "dry runs" (doesn't push) but you can pass `-p` to
push the changes.
    - If you add `-c` it will clean out the old docs before running.
    
If you run the script with `p` it will push up the changes, and vercel
will automatically deploy them.

Release Notes:

- N/A
2023-11-20 18:07:37 -05:00
Conrad Irwin 8b6b7e60be borrow less 2023-11-20 16:00:47 -07:00
Nate Butler a83d626912 Make the script a bit more resilient 2023-11-20 17:50:25 -05:00
2c4d83c9af WIP
co-authored-by: conrad <conrad@zed.dev>
co-authored-by: Nathan <nathan@zed.dev>
2023-11-20 14:46:01 -08:00
Nate Butler a87ffa58ff Add more crates 2023-11-20 17:07:14 -05:00
Nate Butler 3210d36727 Create deploy-docs 2023-11-20 16:13:18 -05:00
Marshall Bowers 652e3b0bb6 Rename ListEntry to ListItem (#3371)
This PR renames the `ListEntry` component to `ListItem` to better
reflect its intent.

Release Notes:

- N/A
2023-11-20 16:13:06 -05:00
Max Brunsfeld 4f4ef4a357 More fixes for zed nightly (#3370)
When running `script/bundle` with the new `-2` flag, we needed to adjust
the fat-binary creation step to look for the binary called `Zed2`.

We also fixed a source of intermittent build failures in `script/bundle`
due to running multiple `swift build` processes concurrently for the
`live_kit_client2` crate, building for the two architectures.

Release Notes:

NA
2023-11-20 12:36:25 -08:00
Max BrunsfeldandJulia 2731855487 Fix error when building live_kit_client2 for two architectures concurrently
Co-authored-by: Julia <julia@zed.dev>
2023-11-20 12:10:35 -08:00
Marshall Bowers eb307b22f0 Rework List to use children (#3369)
This PR reworks the `List` component to use `children` instead of
accepting a `Vec<ListItem>` in its constructor.

This is a step towards making the `List` component more open.

Release Notes:

- N/A
2023-11-20 14:58:31 -05:00
Mikayla 6985b70859 fix gpui2 2023-11-20 11:55:27 -08:00
Conrad Irwin 25ed7c57c1 WIP 2023-11-20 12:34:08 -07:00
Conrad Irwin d0dd44faad Merge branch 'main' into callback-handles 2023-11-20 12:21:42 -07:00
Max BrunsfeldandMikayla 6e84f740aa Set -e in bump-nightly script
Co-authored-by: Mikayla <mikayla@zed.dev>
2023-11-20 11:01:37 -08:00
Max BrunsfeldandMikayla c571273ab4 Allow bundling in debug mode with both architectures
Co-authored-by: Mikayla <mikayla@zed.dev>
2023-11-20 11:00:12 -08:00
Max BrunsfeldandMikayla babd41916a Remove gpui (1) dependencies from zed2
Co-authored-by: Mikayla <mikayla@zed.dev>
2023-11-20 10:46:16 -08:00
Mikayla acbad4c7b7 WIP 2023-11-20 10:34:22 -08:00
Conrad Irwin 6f0cdc35f3 Refine element and component traits (#3367)
This PR changes `Element::paint` to move self and introduces a new
`RenderOnce` trait, which renders into an element by moving self.
Elements are required to be `RenderOnce`, and `element_id` is now on
`RenderOnce` so we can get the id without moving self. The `child` and
`children` methods now expect `impl RenderOnce`.

```rust
pub trait Element<V: 'static>: 'static + RenderOnce<V> {
    type State: 'static;

    fn layout(
        &mut self,
        view_state: &mut V,
        element_state: Option<Self::State>,
        cx: &mut ViewContext<V>,
    ) -> (LayoutId, Self::State);

    fn paint(
        self,
        bounds: Bounds<Pixels>,
        view_state: &mut V,
        element_state: &mut Self::State,
        cx: &mut ViewContext<V>,
    );

    fn into_any(self) -> AnyElement<V> {
        AnyElement::new(self)
    }
}

pub trait RenderOnce<V: 'static>: Sized {
    type Element: Element<V> + 'static;

    fn element_id(&self) -> Option<ElementId>;

    fn render_once(self) -> Self::Element;

   // default helpers ...
}
```

To make a type a component, you can add `#[derive(RenderOnce)]`, which
will require your type to implement the `Component` trait:

```rust
pub trait Component<V: 'static>: 'static {
    type Rendered: RenderOnce<V>;

    fn render(self, view: &mut V, cx: &mut ViewContext<V>) -> Self::Rendered;
}
```

I'm satisfied with this being what we open source for elements, aside
from maybe adding a `StatefulComponent` trait that uses element state.
Things finally feel like they slot into a coherent and simple narrative.

Release Notes:

- N/A
2023-11-20 10:48:50 -07:00
Conrad Irwin b19a6c0dcc Fix storybook2 2023-11-20 10:16:05 -07:00
Conrad Irwin 5d16f76518 fmt 2023-11-20 10:05:57 -07:00
Conrad Irwin 8599ba557d Fix more import errors 2023-11-20 10:01:21 -07:00
Conrad Irwin f08426c7a0 shhhh 2023-11-20 10:00:37 -07:00
Conrad Irwin f86480ba5d Merge followup mess 2023-11-20 09:58:05 -07:00
Conrad Irwin 0798cfd58c Merge branch 'main' into derive-element-redux 2023-11-20 09:15:38 -07:00
Joseph T. Lyons 385028865e Add timestamp delta to telemetry events (#3365)
- [X] assistant_events
- [X] call_events
- [X] copilot_events
- [X] cpu_events
- [X] download_events
- [X] editor_events
- [X] memory_events
- [X] page_events
- [X] panic_events
---
- [X] For each of the previous tables:
    - [X] backup events to comp
    - [X] make new table (changing any time fields to be datetime64)
    - [X] copy data
    - [X] rename old table
    - [X] rename new table
---
- [ ] Delete all old tables once (going to hold off on this for some
time - want to make sure things are working correctly)
    - [X] we see new data coming in on new tables
    - [X] old times truncate correctly
    - [X] new times show millisecond values
---
- [X] check dashboards to make sure queries didn't get broken from
changing time data type
    - [X] Fix broken charts
- [X] monitor vercel for runtime errors

---

- [X] zed.dev changes
- [X] chrono changes to panicked_on
    - [X] Make sure new panics are good
- [X] remove commented out code and dbg code
- [X] triple check that both crate versions have the changes
- [X] make sure all event function calls use the same original arguments
- [X] Finish testing version 2

Release Notes:

- N/A
2023-11-20 09:27:18 -05:00
Joseph T. Lyons 966bf56ddb Activate telemetry in zed2 2023-11-20 09:08:07 -05:00
Mikayla f3eb1d4abf Add button port example 2023-11-19 19:11:51 -08:00
Joseph T. Lyons 5dc3369cf6 Remove unused imports 2023-11-19 22:09:14 -05:00
Joseph T. Lyons 722ad5a01d Fix data types 2023-11-19 22:03:55 -05:00
Joseph T. Lyons 8e612e4287 Restore commented-out code 2023-11-19 22:00:01 -05:00
Joseph T. Lyons e0f8615d52 Remoe dbg!()s 2023-11-19 21:55:19 -05:00
Joseph T. Lyons 3abd376d6a Add timestamp delta to telemetry events 2023-11-19 21:52:28 -05:00
Conrad Irwin 45371584b1 Focus workspace on launch (#3364)
Fixes action dispatch when no focus is there.

Release Notes:

- N/A
2023-11-19 19:38:41 -07:00
Mikayla 88024ca7c9 Remove V parameter on elements 2023-11-19 18:32:31 -08:00
Conrad Irwin c0d85dc1dd Fix text wrapping when a child of a v_stack() (#3362)
Previously text that was rendered in a flex-column would reserve the
correct
amount of space during layout, and then paint itself incorrectly.

Release Notes:

- N/A
2023-11-19 11:37:31 -07:00
Piotr Osiewicz b67193e322 ui2: Do not enable 'stories' feature by default. (#3363)
This cuts down LLVM IR size from 3 million lines to 700k in debug build.
This then leads to ~3s compile time in debug build (without incremental
on ui itself), as opposed to 10.5s on main.

Release Notes:

- N/A
2023-11-19 12:11:42 +01:00
Piotr Osiewicz e83a297229 Move binding function back into keybinding module 2023-11-19 11:54:46 +01:00
Piotr Osiewicz 31336b0b7d ui2: Do not enable 'stories' feature by default.
This cuts down LLVM IR size from 3 million lines to 700k in debug build.
This then leads to ~3s compile time in debug build (without incremental on ui itself), as opposed to 10.5s on main.
2023-11-19 11:44:33 +01:00
Conrad Irwin c5738a509c delint 2023-11-18 22:20:50 -07:00
Conrad Irwin 0711121586 Add some test cases 2023-11-18 22:16:28 -07:00
Nathan Sobo 33cd6f520a Clean compile with redesigned element traits 2023-11-18 21:51:47 -07:00
Conrad Irwin cf47ed2c5f Fix wrapping when parent has a max_width
(Also avoid re-wrapping text we already wrapped)
2023-11-18 21:31:16 -07:00
Conrad Irwin 242a0b85b5 Update Taffy to latest main 2023-11-18 21:30:33 -07:00
Conrad Irwin 7172ce37b1 Fix text wrapping when a child of a v_stack() 2023-11-18 20:35:22 -07:00
Nathan Sobo 0673606de8 WIP 2023-11-18 20:22:43 -07:00