Skip to content

Commit 3623c16

Browse files
bors[bot]matklad
andauthored
Merge #4792
4792: Document more knowledge r=matklad a=matklad bors r+ 🤖 Co-authored-by: Aleksey Kladov <aleksey.kladov@gmail.com>
2 parents d8552d1 + cc07c82 commit 3623c16

File tree

1 file changed

+27
-0
lines changed

1 file changed

+27
-0
lines changed

docs/dev/README.md

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -241,6 +241,26 @@ struct Foo {
241241
For `.md` and `.adoc` files, prefer a sentence-per-line format, don't wrap lines.
242242
If the line is too long, you want to split the sentence in two :-)
243243

244+
## Preconditions
245+
246+
Function preconditions should generally be expressed in types and provided by the caller (rather than checked by callee):
247+
248+
```rust
249+
// Good
250+
fn frbonicate(walrus: Walrus) {
251+
...
252+
}
253+
254+
// Not as good
255+
fn frobnicate(walrus: Option<Walrus>) {
256+
let walrus = match walrus {
257+
Some(it) => it,
258+
None => return,
259+
};
260+
...
261+
}
262+
```
263+
244264
# Architecture Invariants
245265

246266
This section tries to document high-level design constraints, which are not
@@ -268,6 +288,13 @@ IDE assumes that all information is available at all times.
268288
IDE should use only types from `ra_hir`, and should not depend on the underling compiler types.
269289
`ra_hir` is a facade.
270290

291+
## IDE API
292+
293+
The main IDE crate (`ra_ide`) uses "Plain Old Data" for the API.
294+
Rather than talking in definitions and references, it talks in Strings and textual offsets.
295+
In general, API is centered around UI concerns -- the result of the call is what the user sees in the editor, and not what the compiler sees underneath.
296+
The results are 100% Rust specific though.
297+
271298
# Logging
272299

273300
Logging is done by both rust-analyzer and VS Code, so it might be tricky to

0 commit comments

Comments
 (0)