Skip to content

Commit 28fb84b

Browse files
committed
require source language
1 parent 1ed6e65 commit 28fb84b

12 files changed

Lines changed: 64 additions & 137 deletions

File tree

.github/workflows/main.yml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,13 @@ jobs:
2020
with:
2121
all-features: false
2222
no-default-features: true
23-
features: dioxus-code/all-languages dioxus-code-editor/web dioxus-code-docsite/web dioxus-code-live-input/web
23+
features: dioxus-code/all-languages dioxus-code-docsite/web dioxus-code-live-input/web
2424

2525
test:
2626
uses: ealmloff/dioxus-ci/.github/workflows/test.yml@main
2727
with:
2828
no-default-features: true
29-
features: dioxus-code/all-languages dioxus-code-editor/web dioxus-code-docsite/web dioxus-code-live-input/web
29+
features: dioxus-code/all-languages dioxus-code-docsite/web dioxus-code-live-input/web
3030

3131
fmt:
3232
uses: ealmloff/dioxus-ci/.github/workflows/fmt.yml@main
@@ -36,11 +36,11 @@ jobs:
3636
with:
3737
all-features: false
3838
no-default-features: true
39-
features: dioxus-code/all-languages dioxus-code-editor/web dioxus-code-docsite/web dioxus-code-live-input/web
39+
features: dioxus-code/all-languages dioxus-code-docsite/web dioxus-code-live-input/web
4040

4141
clippy:
4242
uses: ealmloff/dioxus-ci/.github/workflows/clippy.yml@main
4343
with:
4444
all-features: false
4545
no-default-features: true
46-
features: dioxus-code/all-languages dioxus-code-editor/web dioxus-code-docsite/web dioxus-code-live-input/web
46+
features: dioxus-code/all-languages dioxus-code-docsite/web dioxus-code-live-input/web

.github/workflows/nightly.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,22 +19,22 @@ jobs:
1919
toolchain: nightly
2020
all-features: false
2121
no-default-features: true
22-
features: dioxus-code/all-languages dioxus-code-editor/web dioxus-code-docsite/web dioxus-code-live-input/web
22+
features: dioxus-code/all-languages dioxus-code-docsite/web dioxus-code-live-input/web
2323

2424
test:
2525
uses: ealmloff/dioxus-ci/.github/workflows/test.yml@main
2626
with:
2727
toolchain: nightly
2828
no-default-features: true
29-
features: dioxus-code/all-languages dioxus-code-editor/web dioxus-code-docsite/web dioxus-code-live-input/web
29+
features: dioxus-code/all-languages dioxus-code-docsite/web dioxus-code-live-input/web
3030

3131
clippy:
3232
uses: ealmloff/dioxus-ci/.github/workflows/clippy.yml@main
3333
with:
3434
toolchain: nightly
3535
all-features: false
3636
no-default-features: true
37-
features: dioxus-code/all-languages dioxus-code-editor/web dioxus-code-docsite/web dioxus-code-live-input/web
37+
features: dioxus-code/all-languages dioxus-code-docsite/web dioxus-code-live-input/web
3838

3939
web-demo:
4040
uses: ealmloff/dioxus-ci/.github/workflows/web-build.yml@main

code-editor/Cargo.toml

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,4 @@ web-sys = { version = "0.3", features = [
3030
] }
3131

3232
[features]
33-
default = ["desktop"]
34-
desktop = ["dioxus/desktop", "dioxus/launch"]
35-
web = ["dioxus/web", "dioxus/launch"]
3633
all-languages = ["dioxus-code/all-languages"]

code-editor/src/lib.rs

Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,11 @@ pub struct CodeEditorProps {
7171
pub oninput: EventHandler<String>,
7272
}
7373

74+
struct EditorBuffer {
75+
buffer: Option<Buffer>,
76+
language: Language,
77+
}
78+
7479
/// Editable syntax-highlighted code surface.
7580
///
7681
/// The component is controlled by [`CodeEditorProps::value`]; update that value
@@ -96,10 +101,15 @@ pub struct CodeEditorProps {
96101
/// ```
97102
#[component]
98103
pub fn CodeEditor(props: CodeEditorProps) -> Element {
99-
let buffer = use_hook({
104+
let state = use_hook({
100105
let value = props.value.clone();
101106
let language = props.language;
102-
move || Rc::new(RefCell::new(Buffer::new(language, value).ok()))
107+
move || {
108+
Rc::new(RefCell::new(EditorBuffer {
109+
buffer: Buffer::new(language, value).ok(),
110+
language,
111+
}))
112+
}
103113
});
104114
let edit_tracker = use_hook(|| {
105115
Rc::new(RefCell::new(edit_capture::InputEditTracker::new(
@@ -109,16 +119,14 @@ pub fn CodeEditor(props: CodeEditorProps) -> Element {
109119

110120
let edit = edit_tracker.borrow_mut().take_for_render(&props.value);
111121
let snapshot = {
112-
let mut buffer_slot = buffer.borrow_mut();
113-
if buffer_slot.is_none() {
114-
*buffer_slot = Buffer::new(props.language, props.value.clone()).ok();
122+
let mut slot = state.borrow_mut();
123+
if slot.language != props.language {
124+
slot.buffer = Buffer::new(props.language, props.value.clone()).ok();
125+
slot.language = props.language;
115126
}
116127

117-
match buffer_slot.as_mut() {
128+
match slot.buffer.as_mut() {
118129
Some(buffer) => {
119-
if buffer.language() != props.language {
120-
let _ = buffer.set_language(props.language);
121-
}
122130
if buffer.source() != props.value {
123131
let result = match edit {
124132
Some(edit) => match buffer.edit(edit, props.value.clone()) {
@@ -134,9 +142,7 @@ pub fn CodeEditor(props: CodeEditorProps) -> Element {
134142
}
135143
buffer.highlighted()
136144
}
137-
None => SourceCode::new(props.value.clone())
138-
.with_language(props.language)
139-
.into(),
145+
None => SourceCode::new(props.language, props.value.clone()).into(),
140146
}
141147
};
142148
let lines = snapshot.lines();

code-editor/src/main.rs

Lines changed: 0 additions & 36 deletions
This file was deleted.

docsite/snippets/runtime.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ fn App() -> Element {
1111

1212
rsx! {
1313
Code {
14-
src: SourceCode::new(source()).with_language(Language::Rust),
14+
src: SourceCode::new(Language::Rust, source()),
1515
theme: CodeTheme::system(Theme::GITHUB_LIGHT, Theme::GITHUB_DARK),
1616
}
1717
}

docsite/src/main.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -563,7 +563,7 @@ fn Hero(theme: CodeTheme, theme_label: String) -> Element {
563563
span { "{theme_label}" }
564564
}
565565
div { class: "card-code-body",
566-
Code { src: SourceCode::new(HERO_COUNTER).with_language(Language::Rust), theme }
566+
Code { src: SourceCode::new(Language::Rust, HERO_COUNTER), theme }
567567
}
568568
}
569569
}
@@ -766,7 +766,7 @@ fn Docs(scheme: Scheme) -> Element {
766766
}
767767
div { class: "card-code-body",
768768
Code {
769-
src: SourceCode::new(step.code).with_language(step.language),
769+
src: SourceCode::new(step.language, step.code),
770770
theme,
771771
}
772772
}

examples/basic/src/main.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,7 @@ fn App() -> Element {
1515
theme: Theme::RUSTDOC_AYU,
1616
}
1717
Code {
18-
src: SourceCode::new("fn main() {\n println!(\"runtime\");\n}")
19-
.with_language(Language::Rust),
18+
src: SourceCode::new(Language::Rust, "fn main() {\n println!(\"runtime\");\n}"),
2019
theme: Theme::GITHUB_LIGHT,
2120
}
2221
}

examples/editor/Cargo.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,5 +16,5 @@ dioxus-code-editor = { workspace = true }
1616

1717
[features]
1818
default = ["desktop"]
19-
desktop = ["dioxus/desktop", "dioxus-code-editor/desktop"]
20-
web = ["dioxus/web", "dioxus-code-editor/web"]
19+
desktop = ["dioxus/desktop"]
20+
web = ["dioxus/web"]

examples/live-input/src/main.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ fn App() -> Element {
3636
span { "runtime" }
3737
}
3838
Code {
39-
src: SourceCode::new(source()).with_language(Language::Rust),
39+
src: SourceCode::new(Language::Rust, source()),
4040
theme: Theme::TOKYO_NIGHT,
4141
}
4242
}

0 commit comments

Comments
 (0)