| export interface JsonProject { |
| /// Path to the sysroot directory. |
| /// |
| /// The sysroot is where rustc looks for the |
| /// crates that are built-in to rust, such as |
| /// std. |
| /// |
| /// https://doc.rust-lang.org/rustc/command-line-arguments.html#--sysroot-override-the-system-root |
| /// |
| /// To see the current value of sysroot, you |
| /// can query rustc: |
| /// |
| /// ``` |
| /// $ rustc --print sysroot |
| /// /Users/yourname/.rustup/toolchains/stable-x86_64-apple-darwin |
| /// ``` |
| sysroot?: string; |
| /// Path to the directory with *source code* of |
| /// sysroot crates. |
| /// |
| /// By default, this is `lib/rustlib/src/rust/library` |
| /// relative to the sysroot. |
| /// |
| /// It should point to the directory where std, |
| /// core, and friends can be found: |
| /// |
| /// https://github.com/rust-lang/rust/tree/master/library. |
| /// |
| /// If provided, rust-analyzer automatically adds |
| /// dependencies on sysroot crates. Conversely, |
| /// if you omit this path, you can specify sysroot |
| /// dependencies yourself and, for example, have |
| /// several different "sysroots" in one graph of |
| /// crates. |
| sysroot_src?: string; |
| /// The set of crates comprising the current |
| /// project. Must include all transitive |
| /// dependencies as well as sysroot crate (libstd, |
| /// libcore and such). |
| crates: Crate[]; |
| } |
| |
| export interface Crate { |
| /// Optional crate name used for display purposes, |
| /// without affecting semantics. See the `deps` |
| /// key for semantically-significant crate names. |
| display_name?: string; |
| /// Path to the root module of the crate. |
| root_module: string; |
| /// Edition of the crate. |
| edition: "2015" | "2018" | "2021"; |
| /// Dependencies |
| deps: Dep[]; |
| /// Should this crate be treated as a member of |
| /// current "workspace". |
| /// |
| /// By default, inferred from the `root_module` |
| /// (members are the crates which reside inside |
| /// the directory opened in the editor). |
| /// |
| /// Set this to `false` for things like standard |
| /// library and 3rd party crates to enable |
| /// performance optimizations (rust-analyzer |
| /// assumes that non-member crates don't change). |
| is_workspace_member?: boolean; |
| /// Optionally specify the (super)set of `.rs` |
| /// files comprising this crate. |
| /// |
| /// By default, rust-analyzer assumes that only |
| /// files under `root_module.parent` can belong |
| /// to a crate. `include_dirs` are included |
| /// recursively, unless a subdirectory is in |
| /// `exclude_dirs`. |
| /// |
| /// Different crates can share the same `source`. |
| /// |
| /// If two crates share an `.rs` file in common, |
| /// they *must* have the same `source`. |
| /// rust-analyzer assumes that files from one |
| /// source can't refer to files in another source. |
| source?: { |
| include_dirs: string[]; |
| exclude_dirs: string[]; |
| }; |
| /// The set of cfgs activated for a given crate, like |
| /// `["unix", "feature=\"foo\"", "feature=\"bar\""]`. |
| cfg: string[]; |
| /// Target triple for this Crate. |
| /// |
| /// Used when running `rustc --print cfg` |
| /// to get target-specific cfgs. |
| target?: string; |
| /// Environment variables, used for |
| /// the `env!` macro |
| env: { [key: string]: string }; |
| |
| /// Whether the crate is a proc-macro crate. |
| is_proc_macro: boolean; |
| /// For proc-macro crates, path to compiled |
| /// proc-macro (.so file). |
| proc_macro_dylib_path?: string; |
| } |
| |
| export interface Dep { |
| /// Index of a crate in the `crates` array. |
| crate: number; |
| /// Name as should appear in the (implicit) |
| /// `extern crate name` declaration. |
| name: string; |
| } |