diff options
Diffstat (limited to 'docs/dev')
-rw-r--r-- | docs/dev/lsp-extensions.md | 12 | ||||
-rw-r--r-- | docs/dev/style.md | 35 |
2 files changed, 45 insertions, 2 deletions
diff --git a/docs/dev/lsp-extensions.md b/docs/dev/lsp-extensions.md index f0f981802..8fcd72d5d 100644 --- a/docs/dev/lsp-extensions.md +++ b/docs/dev/lsp-extensions.md | |||
@@ -1,5 +1,5 @@ | |||
1 | <!--- | 1 | <!--- |
2 | lsp_ext.rs hash: 28a9d5a24b7ca396 | 2 | lsp_ext.rs hash: 6e57fc1b345b00e9 |
3 | 3 | ||
4 | If you need to change the above hash to make the test pass, please check if you | 4 | If you need to change the above hash to make the test pass, please check if you |
5 | need to adjust this doc as well and ping this issue: | 5 | need to adjust this doc as well and ping this issue: |
@@ -486,6 +486,16 @@ Primarily for debugging, but very useful for all people working on rust-analyzer | |||
486 | Returns a textual representation of the HIR of the function containing the cursor. | 486 | Returns a textual representation of the HIR of the function containing the cursor. |
487 | For debugging or when working on rust-analyzer itself. | 487 | For debugging or when working on rust-analyzer itself. |
488 | 488 | ||
489 | ## View Crate Graph | ||
490 | |||
491 | **Method:** `rust-analyzer/viewCrateGraph` | ||
492 | |||
493 | **Request:** `null` | ||
494 | |||
495 | **Response:** `string` | ||
496 | |||
497 | Renders rust-analyzer's crate graph as an SVG image. | ||
498 | |||
489 | ## Expand Macro | 499 | ## Expand Macro |
490 | 500 | ||
491 | **Method:** `rust-analyzer/expandMacro` | 501 | **Method:** `rust-analyzer/expandMacro` |
diff --git a/docs/dev/style.md b/docs/dev/style.md index 6ab60b50e..d24a5952e 100644 --- a/docs/dev/style.md +++ b/docs/dev/style.md | |||
@@ -449,6 +449,39 @@ fn query_all(name: String, case_sensitive: bool) -> Vec<Item> { ... } | |||
449 | fn query_first(name: String, case_sensitive: bool) -> Option<Item> { ... } | 449 | fn query_first(name: String, case_sensitive: bool) -> Option<Item> { ... } |
450 | ``` | 450 | ``` |
451 | 451 | ||
452 | ## Prefer Separate Functions Over Parameters | ||
453 | |||
454 | If a function has a `bool` or an `Option` parameter, and it is always called with `true`, `false`, `Some` and `None` literals, split the function in two. | ||
455 | |||
456 | ```rust | ||
457 | // GOOD | ||
458 | fn caller_a() { | ||
459 | foo() | ||
460 | } | ||
461 | |||
462 | fn caller_b() { | ||
463 | foo_with_bar(Bar::new()) | ||
464 | } | ||
465 | |||
466 | fn foo() { ... } | ||
467 | fn foo_with_bar(bar: Bar) { ... } | ||
468 | |||
469 | // BAD | ||
470 | fn caller_a() { | ||
471 | foo(None) | ||
472 | } | ||
473 | |||
474 | fn caller_b() { | ||
475 | foo(Some(Bar::new())) | ||
476 | } | ||
477 | |||
478 | fn foo(bar: Option<Bar>) { ... } | ||
479 | ``` | ||
480 | |||
481 | **Rationale:** more often than not, such functions display "`false sharing`" -- they have additional `if` branching inside for two different cases. | ||
482 | Splitting the two different control flows into two functions simplifies each path, and remove cross-dependencies between the two paths. | ||
483 | If there's common code between `foo` and `foo_with_bar`, extract *that* into a common helper. | ||
484 | |||
452 | ## Avoid Monomorphization | 485 | ## Avoid Monomorphization |
453 | 486 | ||
454 | Avoid making a lot of code type parametric, *especially* on the boundaries between crates. | 487 | Avoid making a lot of code type parametric, *especially* on the boundaries between crates. |
@@ -914,4 +947,4 @@ match p.current() { | |||
914 | For `.md` and `.adoc` files, prefer a sentence-per-line format, don't wrap lines. | 947 | For `.md` and `.adoc` files, prefer a sentence-per-line format, don't wrap lines. |
915 | If the line is too long, you want to split the sentence in two :-) | 948 | If the line is too long, you want to split the sentence in two :-) |
916 | 949 | ||
917 | **Rationale:** much easier to edit the text and read the diff. | 950 | **Rationale:** much easier to edit the text and read the diff, see [this link](https://asciidoctor.org/docs/asciidoc-recommended-practices/#one-sentence-per-line). |