File tree Expand file tree Collapse file tree 1 file changed +27
-0
lines changed Expand file tree Collapse file tree 1 file changed +27
-0
lines changed Original file line number Diff line number Diff line change @@ -241,6 +241,33 @@ struct Foo {
241241For ` .md ` and ` .adoc ` files, prefer a sentence-per-line format, don't wrap lines.
242242If the line is too long, you want to split the sentence in two :-)
243243
244+ # Architecture Invariants
245+
246+ This section tries to document high-level design constraints, which are not
247+ always obvious from the low-level code.
248+
249+ ## Incomplete syntax trees
250+
251+ Syntax trees are by design incomplete and do not enforce well-formedness.
252+ If ast method returns an ` Option ` , it * can* be ` None ` at runtime, even if this is forbidden by the grammar.
253+
254+ ## LSP indenpendence
255+
256+ rust-analyzer is independent from LSP.
257+ It provides features for a hypothetical perfect Rust-specific IDE client.
258+ Internal 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+
262+ There's a semi-hard split between "compiler" and "IDE", at the ` ra_hir ` crate.
263+ Compiler derives new facts about source code.
264+ It explicitly acknowledges that not all info is available (ie, you can't look at types during name resolution).
265+
266+ IDE assumes that all information is available at all times.
267+
268+ IDE should use only types from ` ra_hir ` , and should not depend on the underling compiler types.
269+ ` ra_hir ` is a facade.
270+
244271# Logging
245272
246273Logging is done by both rust-analyzer and VS Code, so it might be tricky to
You can’t perform that action at this time.
0 commit comments