Skip to content

Commit 71461d8

Browse files
committed
feat: enhance playground functionality with editable code blocks and styling
1 parent 103f9ab commit 71461d8

File tree

4 files changed

+51
-2
lines changed

4 files changed

+51
-2
lines changed

book.toml

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,13 @@ name = "Español"
1616
rust = "#"
1717
go = "#"
1818

19+
[output.html.playground]
20+
editable = true
21+
1922

2023
[output.html]
2124
site-url = "https://go-book.rustlang-es.org"
2225
git-repository-url = "https://github.com/RustLangES/rust-para-go-devs"
2326
git-repository-icon = "fa-github"
24-
edit-url-template = "https://github.com/RustLangES/rust-para-go-devs/edit/main/{path}"
27+
edit-url-template = "https://github.com/RustLangES/rust-para-go-devs/edit/main/{path}"
28+
additional-css = ["theme/extra.css"]

src/es/quick-comparisons/control-flow.md

Lines changed: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -301,7 +301,42 @@ obtendremos un error en compilación:
301301
match color {
302302
"rojo" => println!("El color es rojo"),
303303
"verde" => println!("El color es verde"),
304-
otro => println!("Otro color, el cual es {otro}"),
304+
otro => println!("Otro color, el cual es {otro}"), // <-- Eliminar
305305
}
306306
```
307307

308+
Si has eliminado la linea, veras el error, esto es porque las variantes del tipo
309+
slice String son infinitas y solo estamos contemplando el caso en que sea
310+
`"rojo"` o `"verde"`.
311+
312+
Rust nos sugiere agregar el caso por default que puede ser usando `_` o
313+
asignando el posible valor a una variable, como tenias previamente en la
314+
variable `otro` que posiblemente hayas eliminado.
315+
316+
Un caso donde tengamos un scope más pequeño podría ser usar pattern matching
317+
para determinar rangos numéricos:
318+
319+
```rust,editable
320+
let mi_numero_favorito = 2;
321+
322+
match mi_numero_favorito {
323+
0 | 1 => println!("Te gusta el binario!"),
324+
2 => println!("Simple"),
325+
3..=6 => println!("Un número entre 3 y 6 inclusive"),
326+
caso_raro if caso_raro % 2 == 0 => {
327+
println!("Un número par mayor a 6: {caso_raro}");
328+
},
329+
42 => println!("El sentido de la vida, el universo y todo lo demás"),
330+
..0 => println!("Un número negativo 😭"),
331+
6.. => println!("De seis al infinito!")
332+
}
333+
```
334+
335+
De esta forma nosotros sabemos que las posibilidades son desde el valor minimo
336+
de `i32` hasta el máximo, y podemos cubrir todos los casos, de forma en que
337+
no es necesario usar el valor por defecto para cubrir casos no contemplados.
338+
339+
Si removemos el caso del `0 | 1`, `2` o el rango del `3..=6`, Rust nos avisará
340+
que no estamos cubriendo todos los casos posibles.
341+
342+
La exhaustiva en su máximo esplendor.

theme/book.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -163,6 +163,10 @@ function playground_text(playground, hidden = true) {
163163
} else if(classes.contains("edition2021")) {
164164
edition = "2021";
165165
}
166+
if (classes.contains("editable") && !text.includes("fn main()")) {
167+
text = "fn main() {\n" + text + "\n}\n";
168+
}
169+
166170
var params = {
167171
version: "stable",
168172
optimize: "0",

theme/extra.css

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
.editable > * {
2+
margin: 1rem;
3+
}
4+
.editable.hljs.ace_editor {
5+
padding: 1rem;;
6+
}

0 commit comments

Comments
 (0)