aboutsummaryrefslogtreecommitdiff
path: root/docs/dev
diff options
context:
space:
mode:
Diffstat (limited to 'docs/dev')
-rw-r--r--docs/dev/README.md27
1 files changed, 27 insertions, 0 deletions
diff --git a/docs/dev/README.md b/docs/dev/README.md
index 6f74d4223..903cb4055 100644
--- a/docs/dev/README.md
+++ b/docs/dev/README.md
@@ -241,6 +241,33 @@ struct Foo {
241For `.md` and `.adoc` files, prefer a sentence-per-line format, don't wrap lines. 241For `.md` and `.adoc` files, prefer a sentence-per-line format, don't wrap lines.
242If the line is too long, you want to split the sentence in two :-) 242If the line is too long, you want to split the sentence in two :-)
243 243
244# Architecture Invariants
245
246This section tries to document high-level design constraints, which are not
247always obvious from the low-level code.
248
249## Incomplete syntax trees
250
251Syntax trees are by design incomplete and do not enforce well-formedness.
252If ast method returns an `Option`, it *can* be `None` at runtime, even if this is forbidden by the grammar.
253
254## LSP indenpendence
255
256rust-analyzer is independent from LSP.
257It provides features for a hypothetical perfect Rust-specific IDE client.
258Internal representations are lowered to LSP in the `rust-analyzer` crate (the only crate which is allowed to use LSP types).
259
260## IDE/Compiler split
261
262There's a semi-hard split between "compiler" and "IDE", at the `ra_hir` crate.
263Compiler derives new facts about source code.
264It explicitly acknowledges that not all info is available (ie, you can't look at types during name resolution).
265
266IDE assumes that all information is available at all times.
267
268IDE should use only types from `ra_hir`, and should not depend on the underling compiler types.
269`ra_hir` is a facade.
270
244# Logging 271# Logging
245 272
246Logging is done by both rust-analyzer and VS Code, so it might be tricky to 273Logging is done by both rust-analyzer and VS Code, so it might be tricky to