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 {
241
241
For ` .md ` and ` .adoc ` files, prefer a sentence-per-line format, don't wrap lines.
242
242
If the line is too long, you want to split the sentence in two :-)
243
243
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
+
244
271
# Logging
245
272
246
273
Logging 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