7584: Update architecture.md for mbe and proc-macro r=edwin0cheng a=edwin0cheng



Co-authored-by: Edwin Cheng <edwin0cheng@gmail.com>
This commit is contained in:
bors[bot] 2021-02-07 04:33:15 +00:00 committed by GitHub
commit 0a2a124474
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -254,6 +254,17 @@ A single `rust-analyzer` process can serve many projects, so it is important tha
These crates implement macros as token tree -> token tree transforms.
They are independent from the rest of the code.
`tt` crate defined `TokenTree`, a single token or a delimited sequence of token trees.
`mbe` crate contains tools for transforming between syntax trees and token tree.
And it also handles the actual parsing and expansion of declarative macro (a-la "Macros By Example" or mbe).
For proc macros, we pass the token trees by loading the corresponding dynamic library (which built by `cargo`).
That's why the client (`proc_macro_api`) and server (`proc_macro_srv`) model are used to run proc-macro in separate process in background.
**Architecture Invariant:**
Bad proc macros may panic or segfault accidentally. So we run it in another process and recover it from fatal error.
And they may be non-deterministic which conflict how `salsa` works, so special attention is required.
### `crates/cfg`
This crate is responsible for parsing, evaluation and general definition of `cfg` attributes.