Skip to content

Commit 7439f60

Browse files
Added tool for generating vscode debug tasks (#3671)
This change introduces `//tools/vscode` which includes tools for vscode integrations. Separate from `//tools/rust_analyzer`, this new package includes a `gen_launch_json` target which can be used to generate "Run and Debug" tasks for `rust_binary` and `rust_test` targets. closes #370 --------- Co-authored-by: Daniel Wagner-Hall <[email protected]>
1 parent 3038b62 commit 7439f60

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

46 files changed

+3682
-4
lines changed

.bazelci/presubmit.yml

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -450,6 +450,23 @@ tasks:
450450
run_targets:
451451
- "//tools/rust_analyzer:gen_rust_project"
452452
- "//tools/rust_analyzer:discover_bazel_rust_project"
453+
ide_integration_vscode_tests_linux:
454+
name: IDE VSCode Tests
455+
platform: ubuntu2204
456+
run_targets:
457+
- "//tools/vscode:gen_launch_json"
458+
- "//test/vscode:vscode_test"
459+
ide_integration_vscode_tests_macos:
460+
name: IDE VSCode Tests
461+
platform: macos_arm64
462+
run_targets:
463+
- "//tools/vscode:gen_launch_json"
464+
- "//test/vscode:vscode_test"
465+
ide_integration_vscode_tests_windows:
466+
name: IDE VSCode Tests
467+
platform: windows
468+
run_targets:
469+
- "//tools/vscode:gen_launch_json"
453470
crate_universe_examples_ubuntu2204:
454471
name: Crate Universe Examples
455472
platform: ubuntu2204

MODULE.bazel

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,9 @@ use_repo(
6969
"rtra",
7070
"rtra__serde-1.0.219",
7171
"rtra__serde_json-1.0.143",
72+
"rtvsc",
73+
"rtvsc__serde-1.0.228",
74+
"rtvsc__serde_json-1.0.145",
7275
"rules_rust_test_load_arbitrary_tool",
7376
"rules_rust_toolchain_test_target_json",
7477
)

docs/src/SUMMARY.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
- [crate_universe (bzlmod)](crate_universe_bzlmod.md)
2323
- [crate_universe (WORKSPACE)](crate_universe_workspace.md)
2424
- [Upstream Tooling](./upstream_tooling.md)
25+
- [IDE Integrations](./ide_integrations.md)
2526
- [Extensions](./extensions.md)
2627
- [bindgen](./rust_bindgen.md)
2728
- [mdbook](./rust_mdbook.md)

docs/src/ide_integrations.md

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
# IDE Integrations
2+
3+
## VSCode
4+
5+
### Intellisense
6+
7+
The best intellisense integrations to date are documented for [rust-analyzer](./rust_analyzer.md). Please refer to this documentation for setup instructions.
8+
9+
### Debugging
10+
11+
`rules_rust` offers tooling to generate VSCode targets for running `rust_binary` and `rust_test` targets with a debugger in VSCode.
12+
13+
#### Prerequisites
14+
15+
Install [CodeLLDB](https://marketplace.visualstudio.com/items?itemName=vadimcn.vscode-lldb) extension in VSCode.
16+
17+
#### Generate Launch Configurations
18+
19+
Generate VSCode `launch.json` for debugging all Rust targets in the current workspace:
20+
21+
```bash
22+
bazel run @rules_rust//tools/vscode:gen_launch_json
23+
```
24+
25+
To scope debug generated `launch.json` targets, query patterns can be passed:
26+
27+
```bash
28+
bazel run @rules_rust//tools/vscode:gen_launch_json -- //path/to/...
29+
```
30+
31+
Bazel targets should now be available for debugging via the "Run and Debug" menu.

test/deps.bzl

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ load("//test/generated_inputs:external_repo.bzl", "generated_inputs_in_external_
66
load("//test/load_arbitrary_tool:load_arbitrary_tool_test.bzl", "load_arbitrary_tool_test")
77
load("//test/rust_analyzer/3rdparty/crates:crates.bzl", rust_analyzer_test_crate_repositories = "crate_repositories")
88
load("//test/unit/toolchain:toolchain_test_utils.bzl", "rules_rust_toolchain_test_target_json_repository")
9+
load("//test/vscode/3rdparty/crates:crates.bzl", vscode_test_crate_repositories = "crate_repositories")
910

1011
_LIBC_BUILD_FILE_CONTENT = """\
1112
load("@rules_rust//rust:defs.bzl", "rust_library")
@@ -40,6 +41,7 @@ def rules_rust_test_deps(is_bzlmod = False):
4041
direct_deps = load_arbitrary_tool_test()
4142
direct_deps.extend(generated_inputs_in_external_repo())
4243
direct_deps.extend(rust_analyzer_test_crate_repositories())
44+
direct_deps.extend(vscode_test_crate_repositories())
4345

4446
maybe(
4547
http_archive,

test/rust_analyzer/rust_analyzer_test_runner.sh

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ local_path_override(
3636
3737
bazel_dep(
3838
name = "bazel_skylib",
39-
version = "1.7.1",
39+
version = "1.8.2",
4040
)
4141
4242
rust = use_extension("@rules_rust//rust:extensions.bzl", "rust")
@@ -102,13 +102,13 @@ function rust_analyzer_test() {
102102
else
103103
RUST_LOG="${rust_log}" bazel run "@rules_rust//tools/rust_analyzer:gen_rust_project"
104104
fi
105-
105+
106106
echo "Validating rust-project.json..."
107107
bazel run "@rules_rust//tools/rust_analyzer:validate" -- rust-project.json
108-
108+
109109
echo "Generating auto-discovery.json..."
110110
RUST_LOG="${rust_log}" bazel run "@rules_rust//tools/rust_analyzer:discover_bazel_rust_project" > auto-discovery.json
111-
111+
112112
echo "Building..."
113113
bazel build //...
114114
echo "Testing..."

test/vscode/3rdparty/BUILD.bazel

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
load("@rules_rust//crate_universe:defs.bzl", "crate", "crates_vendor")
2+
3+
crates_vendor(
4+
name = "crates_vendor",
5+
mode = "remote",
6+
packages = {
7+
"serde": crate.spec(
8+
features = ["derive"],
9+
version = "1",
10+
),
11+
"serde_json": crate.spec(
12+
version = "1",
13+
),
14+
},
15+
# Short for 'rust_test_vscode'. Keep this short to reduce
16+
# the risk to bump into absolute path length issues on Windows. See:
17+
# https://github.com/bazelbuild/rules_rust/issues/1120
18+
repository_name = "rtvsc",
19+
tags = ["manual"],
20+
vendor_path = "crates",
21+
)
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
###############################################################################
2+
# @generated
3+
# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
4+
# regenerate this file, run the following:
5+
#
6+
# bazel run @@//test/vscode/3rdparty:crates_vendor
7+
###############################################################################
8+
9+
package(default_visibility = ["//visibility:public"])
10+
11+
exports_files(
12+
[
13+
"cargo-bazel.json",
14+
"crates.bzl",
15+
"defs.bzl",
16+
] + glob(
17+
include = ["*.bazel"],
18+
allow_empty = True,
19+
),
20+
)
21+
22+
filegroup(
23+
name = "srcs",
24+
srcs = glob(
25+
include = [
26+
"*.bazel",
27+
"*.bzl",
28+
],
29+
allow_empty = True,
30+
),
31+
)
32+
33+
# Workspace Member Dependencies
34+
alias(
35+
name = "serde-1.0.228",
36+
actual = "@rtvsc__serde-1.0.228//:serde",
37+
tags = ["manual"],
38+
)
39+
40+
alias(
41+
name = "serde",
42+
actual = "@rtvsc__serde-1.0.228//:serde",
43+
tags = ["manual"],
44+
)
45+
46+
alias(
47+
name = "serde_json-1.0.145",
48+
actual = "@rtvsc__serde_json-1.0.145//:serde_json",
49+
tags = ["manual"],
50+
)
51+
52+
alias(
53+
name = "serde_json",
54+
actual = "@rtvsc__serde_json-1.0.145//:serde_json",
55+
tags = ["manual"],
56+
)
Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
###############################################################################
2+
# @generated
3+
# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
4+
# regenerate this file, run the following:
5+
#
6+
# bazel run @@//test/vscode/3rdparty:crates_vendor
7+
###############################################################################
8+
9+
load("@rules_rust//cargo:defs.bzl", "cargo_toml_env_vars")
10+
load("@rules_rust//rust:defs.bzl", "rust_library")
11+
12+
package(default_visibility = ["//visibility:public"])
13+
14+
cargo_toml_env_vars(
15+
name = "cargo_toml_env_vars",
16+
src = "Cargo.toml",
17+
)
18+
19+
rust_library(
20+
name = "itoa",
21+
srcs = glob(
22+
include = ["**/*.rs"],
23+
allow_empty = True,
24+
),
25+
compile_data = glob(
26+
include = ["**"],
27+
allow_empty = True,
28+
exclude = [
29+
"**/* *",
30+
".tmp_git_root/**/*",
31+
"BUILD",
32+
"BUILD.bazel",
33+
"WORKSPACE",
34+
"WORKSPACE.bazel",
35+
],
36+
),
37+
crate_root = "src/lib.rs",
38+
edition = "2018",
39+
rustc_env_files = [
40+
":cargo_toml_env_vars",
41+
],
42+
rustc_flags = [
43+
"--cap-lints=allow",
44+
],
45+
tags = [
46+
"cargo-bazel",
47+
"crate-name=itoa",
48+
"manual",
49+
"noclippy",
50+
"norustfmt",
51+
],
52+
target_compatible_with = select({
53+
"@rules_rust//rust/platform:aarch64-apple-darwin": [],
54+
"@rules_rust//rust/platform:aarch64-apple-ios": [],
55+
"@rules_rust//rust/platform:aarch64-apple-ios-sim": [],
56+
"@rules_rust//rust/platform:aarch64-linux-android": [],
57+
"@rules_rust//rust/platform:aarch64-pc-windows-msvc": [],
58+
"@rules_rust//rust/platform:aarch64-unknown-fuchsia": [],
59+
"@rules_rust//rust/platform:aarch64-unknown-linux-gnu": [],
60+
"@rules_rust//rust/platform:aarch64-unknown-nixos-gnu": [],
61+
"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [],
62+
"@rules_rust//rust/platform:aarch64-unknown-uefi": [],
63+
"@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [],
64+
"@rules_rust//rust/platform:armv7-linux-androideabi": [],
65+
"@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [],
66+
"@rules_rust//rust/platform:i686-apple-darwin": [],
67+
"@rules_rust//rust/platform:i686-linux-android": [],
68+
"@rules_rust//rust/platform:i686-pc-windows-msvc": [],
69+
"@rules_rust//rust/platform:i686-unknown-freebsd": [],
70+
"@rules_rust//rust/platform:i686-unknown-linux-gnu": [],
71+
"@rules_rust//rust/platform:powerpc-unknown-linux-gnu": [],
72+
"@rules_rust//rust/platform:riscv32imc-unknown-none-elf": [],
73+
"@rules_rust//rust/platform:riscv64gc-unknown-linux-gnu": [],
74+
"@rules_rust//rust/platform:riscv64gc-unknown-none-elf": [],
75+
"@rules_rust//rust/platform:s390x-unknown-linux-gnu": [],
76+
"@rules_rust//rust/platform:thumbv7em-none-eabi": [],
77+
"@rules_rust//rust/platform:thumbv8m.main-none-eabi": [],
78+
"@rules_rust//rust/platform:wasm32-unknown-emscripten": [],
79+
"@rules_rust//rust/platform:wasm32-unknown-unknown": [],
80+
"@rules_rust//rust/platform:wasm32-wasip1": [],
81+
"@rules_rust//rust/platform:wasm32-wasip1-threads": [],
82+
"@rules_rust//rust/platform:wasm32-wasip2": [],
83+
"@rules_rust//rust/platform:x86_64-apple-darwin": [],
84+
"@rules_rust//rust/platform:x86_64-apple-ios": [],
85+
"@rules_rust//rust/platform:x86_64-linux-android": [],
86+
"@rules_rust//rust/platform:x86_64-pc-windows-msvc": [],
87+
"@rules_rust//rust/platform:x86_64-unknown-freebsd": [],
88+
"@rules_rust//rust/platform:x86_64-unknown-fuchsia": [],
89+
"@rules_rust//rust/platform:x86_64-unknown-linux-gnu": [],
90+
"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu": [],
91+
"@rules_rust//rust/platform:x86_64-unknown-none": [],
92+
"@rules_rust//rust/platform:x86_64-unknown-uefi": [],
93+
"//conditions:default": ["@platforms//:incompatible"],
94+
}),
95+
version = "1.0.15",
96+
)
Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
###############################################################################
2+
# @generated
3+
# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
4+
# regenerate this file, run the following:
5+
#
6+
# bazel run @@//test/vscode/3rdparty:crates_vendor
7+
###############################################################################
8+
9+
load("@rules_rust//cargo:defs.bzl", "cargo_toml_env_vars")
10+
load("@rules_rust//rust:defs.bzl", "rust_library")
11+
12+
package(default_visibility = ["//visibility:public"])
13+
14+
cargo_toml_env_vars(
15+
name = "cargo_toml_env_vars",
16+
src = "Cargo.toml",
17+
)
18+
19+
rust_library(
20+
name = "memchr",
21+
srcs = glob(
22+
include = ["**/*.rs"],
23+
allow_empty = True,
24+
),
25+
compile_data = glob(
26+
include = ["**"],
27+
allow_empty = True,
28+
exclude = [
29+
"**/* *",
30+
".tmp_git_root/**/*",
31+
"BUILD",
32+
"BUILD.bazel",
33+
"WORKSPACE",
34+
"WORKSPACE.bazel",
35+
],
36+
),
37+
crate_features = [
38+
"alloc",
39+
"std",
40+
],
41+
crate_root = "src/lib.rs",
42+
edition = "2021",
43+
rustc_env_files = [
44+
":cargo_toml_env_vars",
45+
],
46+
rustc_flags = [
47+
"--cap-lints=allow",
48+
],
49+
tags = [
50+
"cargo-bazel",
51+
"crate-name=memchr",
52+
"manual",
53+
"noclippy",
54+
"norustfmt",
55+
],
56+
target_compatible_with = select({
57+
"@rules_rust//rust/platform:aarch64-apple-darwin": [],
58+
"@rules_rust//rust/platform:aarch64-apple-ios": [],
59+
"@rules_rust//rust/platform:aarch64-apple-ios-sim": [],
60+
"@rules_rust//rust/platform:aarch64-linux-android": [],
61+
"@rules_rust//rust/platform:aarch64-pc-windows-msvc": [],
62+
"@rules_rust//rust/platform:aarch64-unknown-fuchsia": [],
63+
"@rules_rust//rust/platform:aarch64-unknown-linux-gnu": [],
64+
"@rules_rust//rust/platform:aarch64-unknown-nixos-gnu": [],
65+
"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [],
66+
"@rules_rust//rust/platform:aarch64-unknown-uefi": [],
67+
"@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [],
68+
"@rules_rust//rust/platform:armv7-linux-androideabi": [],
69+
"@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [],
70+
"@rules_rust//rust/platform:i686-apple-darwin": [],
71+
"@rules_rust//rust/platform:i686-linux-android": [],
72+
"@rules_rust//rust/platform:i686-pc-windows-msvc": [],
73+
"@rules_rust//rust/platform:i686-unknown-freebsd": [],
74+
"@rules_rust//rust/platform:i686-unknown-linux-gnu": [],
75+
"@rules_rust//rust/platform:powerpc-unknown-linux-gnu": [],
76+
"@rules_rust//rust/platform:riscv32imc-unknown-none-elf": [],
77+
"@rules_rust//rust/platform:riscv64gc-unknown-linux-gnu": [],
78+
"@rules_rust//rust/platform:riscv64gc-unknown-none-elf": [],
79+
"@rules_rust//rust/platform:s390x-unknown-linux-gnu": [],
80+
"@rules_rust//rust/platform:thumbv7em-none-eabi": [],
81+
"@rules_rust//rust/platform:thumbv8m.main-none-eabi": [],
82+
"@rules_rust//rust/platform:wasm32-unknown-emscripten": [],
83+
"@rules_rust//rust/platform:wasm32-unknown-unknown": [],
84+
"@rules_rust//rust/platform:wasm32-wasip1": [],
85+
"@rules_rust//rust/platform:wasm32-wasip1-threads": [],
86+
"@rules_rust//rust/platform:wasm32-wasip2": [],
87+
"@rules_rust//rust/platform:x86_64-apple-darwin": [],
88+
"@rules_rust//rust/platform:x86_64-apple-ios": [],
89+
"@rules_rust//rust/platform:x86_64-linux-android": [],
90+
"@rules_rust//rust/platform:x86_64-pc-windows-msvc": [],
91+
"@rules_rust//rust/platform:x86_64-unknown-freebsd": [],
92+
"@rules_rust//rust/platform:x86_64-unknown-fuchsia": [],
93+
"@rules_rust//rust/platform:x86_64-unknown-linux-gnu": [],
94+
"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu": [],
95+
"@rules_rust//rust/platform:x86_64-unknown-none": [],
96+
"@rules_rust//rust/platform:x86_64-unknown-uefi": [],
97+
"//conditions:default": ["@platforms//:incompatible"],
98+
}),
99+
version = "2.7.6",
100+
)

0 commit comments

Comments
 (0)