rust-analyzer/editors/code
bors a0be16b0b2 Auto merge of #14040 - HKalbasi:mir, r=HKalbasi
Beginning of MIR

This pull request introduces the initial implementation of MIR lowering and interpreting in Rust Analyzer.

The implementation of MIR has potential to bring several benefits:
- Executing a unit test without compiling it: This is my main goal. It can be useful for quickly testing code changes and print-debugging unit tests without the need for a full compilation (ideally in almost zero time, similar to languages like python and js). There is a probability that it goes nowhere, it might become slower than rustc, or it might need some unreasonable amount of memory, or we may fail to support a common pattern/function that make it unusable for most of the codes.
- Constant evaluation: MIR allows for easier and more correct constant evaluation, on par with rustc. If r-a wants to fully support the type system, it needs full const eval, which means arbitrary code execution, which needs MIR or something similar.
- Supporting more diagnostics: MIR can be used to detect errors, most famously borrow checker and lifetime errors,  but also mutability errors and uninitialized variables, which can be difficult/impossible to detect in HIR.
- Lowering closures: With MIR we can find out closure capture modes, which is useful in detecting if a closure implements the `FnMut` or `Fn` traits, and calculating its size and data layout.

But the current PR implements no diagnostics and doesn't support closures. About const eval, I removed the old const eval code and it now uses the mir interpreter. Everything that is supported in stable rustc is either implemented or is super easy to implement. About interpreting unit tests, I added an experimental config, disabled by default, that shows a `pass` or `fail` on hover of unit tests (ideally it should be a button similar to `Run test` button, but I didn't figured out how to add them). Currently, no real world test works, due to missing features including closures, heap allocation, `dyn Trait` and ... so at this point it is only useful for me selecting what to implement next.

The implementation of MIR is based on the design of rustc, the data structures are almost copy paste (so it should be easy to migrate it to a possible future stable-mir), but the lowering and interpreting code is from me.
2023-02-28 09:12:19 +00:00
..
src Respect $CARGO_HOME when looking up toolchains. 2023-02-26 15:37:04 +09:00
tests prettier run 2022-05-17 18:15:06 +01:00
.eslintignore vscode extension: use esbuild instead of rollup. 2021-08-10 10:18:08 +01:00
.eslintrc.js automate braceless return substitution for long lines 2022-05-17 18:31:51 +01:00
.gitignore Add experimental VSCode api 2022-03-04 07:45:51 +02:00
.prettierignore prettier config 2022-05-17 18:12:49 +01:00
.prettierrc.js prettier config 2022-05-17 18:12:49 +01:00
.vscodeignore Prepare Code extension for bundling 2021-12-18 17:44:16 +02:00
icon.png Extension icon 2020-01-15 16:07:39 +01:00
language-configuration.json Unify language config markers with server 2023-02-04 17:46:11 -08:00
LICENSE Add LICENSE file to make vsce happy 2021-12-04 12:29:27 +02:00
package-lock.json Bump package-lock.json 2023-01-23 13:52:13 +01:00
package.json Auto merge of #14040 - HKalbasi:mir, r=HKalbasi 2023-02-28 09:12:19 +00:00
ra_syntax_tree.tmGrammar.json prettier run 2022-05-17 18:15:06 +01:00
README.md Improve extension description and README 2022-05-13 18:15:33 +02:00
tsconfig.eslint.json prettier run 2022-05-17 18:15:06 +01:00
tsconfig.json prettier run 2022-05-17 18:15:06 +01:00

rust-analyzer

This extension provides support for the Rust programming language. It is recommended over and replaces rust-lang.rust.

Features

Quick start

  1. Install rustup.
  2. Install the rust-analyzer extension.

Configuration

This extension provides configurations through VSCode's configuration settings. All configurations are under rust-analyzer.*.

See the manual for more information on VSCode specific configurations.

Communication

For usage and troubleshooting requests, please use the "IDEs and Editors" category of the Rust forum.

Documentation

See rust-analyzer.github.io for more information.