Skip to content

Commit 1f23156

Browse files
authored
Merge pull request #18878 from Wilfred/document_build_info
manual: Document all rust-project.json fields
2 parents 0b68402 + 86a4b2f commit 1f23156

File tree

2 files changed

+84
-8
lines changed

2 files changed

+84
-8
lines changed

Diff for: crates/project-model/src/project_json.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ use crate::{ManifestPath, TargetKind};
6363
pub struct ProjectJson {
6464
/// e.g. `path/to/sysroot`
6565
pub(crate) sysroot: Option<AbsPathBuf>,
66-
/// e.g. `path/to/sysroot/lib/rustlib/src/rust`
66+
/// e.g. `path/to/sysroot/lib/rustlib/src/rust/library`
6767
pub(crate) sysroot_src: Option<AbsPathBuf>,
6868
project_root: AbsPathBuf,
6969
/// The path to the rust-project.json file. May be None if this

Diff for: docs/user/manual.adoc

+83-7
Original file line numberDiff line numberDiff line change
@@ -716,6 +716,32 @@ interface JsonProject {
716716
/// dependencies as well as sysroot crate (libstd,
717717
/// libcore and such).
718718
crates: Crate[];
719+
/// Configuration for CLI commands.
720+
///
721+
/// These are used for running and debugging binaries
722+
/// and tests without encoding build system-specific
723+
/// knowledge into rust-analyzer.
724+
///
725+
/// # Example
726+
///
727+
/// Below is an example of a test runnable. `{label}` and `{test_id}`
728+
/// are explained in `Runnable::args`'s documentation below.
729+
///
730+
/// ```json
731+
/// {
732+
/// "program": "buck",
733+
/// "args": [
734+
/// "test",
735+
/// "{label}",
736+
/// "--",
737+
/// "{test_id}",
738+
/// "--print-passing-details"
739+
/// ],
740+
/// "cwd": "/home/user/repo-root/",
741+
/// "kind": "testOne"
742+
/// }
743+
/// ```
744+
runnables?: Runnable[];
719745
}
720746
721747
interface Crate {
@@ -726,7 +752,10 @@ interface Crate {
726752
/// Path to the root module of the crate.
727753
root_module: string;
728754
/// Edition of the crate.
729-
edition: "2015" | "2018" | "2021";
755+
edition: '2015' | '2018' | '2021' | '2024';
756+
/// The version of the crate. Used for calculating
757+
/// the correct docs.rs URL.
758+
version?: string;
730759
/// Dependencies
731760
deps: Dep[];
732761
/// Should this crate be treated as a member of
@@ -757,9 +786,9 @@ interface Crate {
757786
/// rust-analyzer assumes that files from one
758787
/// source can't refer to files in another source.
759788
source?: {
760-
include_dirs: string[],
761-
exclude_dirs: string[],
762-
},
789+
include_dirs: string[];
790+
exclude_dirs: string[];
791+
};
763792
/// List of cfg groups this crate inherits.
764793
///
765794
/// All cfg in these groups will be concatenated to
@@ -776,21 +805,68 @@ interface Crate {
776805
target?: string;
777806
/// Environment variables, used for
778807
/// the `env!` macro
779-
env: { [key: string]: string; },
808+
env: { [key: string]: string; };
780809
781810
/// Whether the crate is a proc-macro crate.
782811
is_proc_macro: boolean;
783812
/// For proc-macro crates, path to compiled
784813
/// proc-macro (.so file).
785814
proc_macro_dylib_path?: string;
815+
816+
/// Repository, matching the URL that would be used
817+
/// in Cargo.toml.
818+
repository?: string;
819+
820+
/// Build-specific data about this crate.
821+
build?: BuildInfo;
786822
}
787823
788824
interface Dep {
789825
/// Index of a crate in the `crates` array.
790-
crate: number,
826+
crate: number;
791827
/// Name as should appear in the (implicit)
792828
/// `extern crate name` declaration.
793-
name: string,
829+
name: string;
830+
}
831+
832+
interface BuildInfo {
833+
/// The name associated with this crate.
834+
///
835+
/// This is determined by the build system that produced
836+
/// the `rust-project.json` in question. For instance, if buck were used,
837+
/// the label might be something like `//ide/rust/rust-analyzer:rust-analyzer`.
838+
///
839+
/// Do not attempt to parse the contents of this string; it is a build system-specific
840+
/// identifier similar to `Crate::display_name`.
841+
label: string;
842+
/// Path corresponding to the build system-specific file defining the crate.
843+
build_file: string;
844+
/// The kind of target.
845+
///
846+
/// This information is used to determine what sort
847+
/// of runnable codelens to provide, if any.
848+
target_kind: 'bin' | 'lib' | 'test';
849+
}
850+
851+
interface Runnable {
852+
/// The program invoked by the runnable.
853+
///
854+
/// For example, this might be `cargo`, `buck`, or `bazel`.
855+
program: string;
856+
/// The arguments passed to `program`.
857+
args: string[];
858+
/// The current working directory of the runnable.
859+
cwd: string;
860+
/// Used to decide what code lens to offer.
861+
///
862+
/// `testOne`: This runnable will be used when the user clicks the 'Run Test'
863+
/// CodeLens above a test.
864+
///
865+
/// The args for testOne can contain two template strings:
866+
/// `{label}` and `{test_id}`. `{label}` will be replaced
867+
/// with the `Build::label` and `{test_id}` will be replaced
868+
/// with the test name.
869+
kind: 'testOne' | string;
794870
}
795871
----
796872

0 commit comments

Comments
 (0)