2 "name": "rust-analyzer",
3 "displayName": "rust-analyzer",
4 "description": "An alternative rust language server to the RLS",
8 "version": "0.4.0-dev",
10 "publisher": "matklad",
12 "url": "https://github.com/rust-analyzer/rust-analyzer.git",
15 "homepage": "https://rust-analyzer.github.io/",
16 "license": "MIT OR Apache-2.0",
21 "Programming Languages"
26 "enableProposedApi": true,
28 "vscode:prepublish": "tsc && rollup -c",
29 "package": "vsce package -o rust-analyzer.vsix",
31 "watch": "tsc --watch",
32 "lint": "tsfmt --verify && eslint -c .eslintrc.js --ext ts ./src ./tests",
33 "fix": " tsfmt -r && eslint -c .eslintrc.js --ext ts ./src ./tests --fix",
34 "pretest": "npm run build",
35 "test": "node ./out/tests/runTests.js"
38 "node-fetch": "^2.6.1",
39 "vscode-languageclient": "7.0.0"
42 "@rollup/plugin-commonjs": "^17.0.0",
43 "@rollup/plugin-node-resolve": "^11.0.0",
44 "@types/glob": "^7.1.3",
45 "@types/mocha": "^8.0.4",
46 "@types/node": "~12.12.6",
47 "@types/node-fetch": "^2.5.7",
48 "@types/vscode": "^1.52.0",
49 "@typescript-eslint/eslint-plugin": "^4.9.0",
50 "@typescript-eslint/parser": "^4.9.0",
56 "typescript": "^4.1.2",
57 "typescript-formatter": "^7.2.2",
59 "vscode-test": "^1.4.1"
63 "onCommand:rust-analyzer.analyzerStatus",
64 "onCommand:rust-analyzer.memoryUsage",
65 "onCommand:rust-analyzer.reloadWorkspace",
66 "workspaceContains:**/Cargo.toml"
68 "main": "./out/src/main",
91 "patternProperties": {
102 "command": "rust-analyzer.syntaxTree",
103 "title": "Show Syntax Tree",
104 "category": "Rust Analyzer"
107 "command": "rust-analyzer.viewHir",
109 "category": "Rust Analyzer"
112 "command": "rust-analyzer.expandMacro",
113 "title": "Expand macro recursively",
114 "category": "Rust Analyzer"
117 "command": "rust-analyzer.matchingBrace",
118 "title": "Find matching brace",
119 "category": "Rust Analyzer"
122 "command": "rust-analyzer.parentModule",
123 "title": "Locate parent module",
124 "category": "Rust Analyzer"
127 "command": "rust-analyzer.joinLines",
128 "title": "Join lines",
129 "category": "Rust Analyzer"
132 "command": "rust-analyzer.run",
134 "category": "Rust Analyzer"
137 "command": "rust-analyzer.copyRunCommandLine",
138 "title": "Copy Run Command Line",
139 "category": "Rust Analyzer"
142 "command": "rust-analyzer.debug",
144 "category": "Rust Analyzer"
147 "command": "rust-analyzer.newDebugConfig",
148 "title": "Generate launch configuration",
149 "category": "Rust Analyzer"
152 "command": "rust-analyzer.analyzerStatus",
154 "category": "Rust Analyzer"
157 "command": "rust-analyzer.memoryUsage",
158 "title": "Memory Usage (Clears Database)",
159 "category": "Rust Analyzer"
162 "command": "rust-analyzer.reloadWorkspace",
163 "title": "Reload workspace",
164 "category": "Rust Analyzer"
167 "command": "rust-analyzer.reload",
168 "title": "Restart server",
169 "category": "Rust Analyzer"
172 "command": "rust-analyzer.updateGithubToken",
173 "title": "Update Github API token",
174 "category": "Rust Analyzer"
177 "command": "rust-analyzer.onEnter",
178 "title": "Enhanced enter key",
179 "category": "Rust Analyzer"
182 "command": "rust-analyzer.ssr",
183 "title": "Structural Search Replace",
184 "category": "Rust Analyzer"
187 "command": "rust-analyzer.serverVersion",
188 "title": "Show RA Version",
189 "category": "Rust Analyzer"
192 "command": "rust-analyzer.toggleInlayHints",
193 "title": "Toggle inlay hints",
194 "category": "Rust Analyzer"
197 "command": "rust-analyzer.openDocs",
198 "title": "Open docs under cursor",
199 "category": "Rust Analyzer"
202 "command": "rust-analyzer.openCargoToml",
203 "title": "Open Cargo.toml",
204 "category": "Rust Analyzer"
209 "command": "rust-analyzer.parentModule",
210 "key": "ctrl+shift+u",
211 "when": "editorTextFocus && editorLangId == rust"
214 "command": "rust-analyzer.matchingBrace",
215 "key": "ctrl+shift+m",
216 "when": "editorTextFocus && editorLangId == rust"
219 "command": "rust-analyzer.joinLines",
220 "key": "ctrl+shift+j",
221 "when": "editorTextFocus && editorLangId == rust"
226 "title": "Rust Analyzer",
228 "rust-analyzer.cargoRunner": {
234 "description": "Custom cargo runner extension ID."
236 "rust-analyzer.runnableEnv": {
248 "description": "Runnable name mask"
252 "description": "Variables in form of { \"key\": \"value\"}"
259 "description": "Variables in form of { \"key\": \"value\"}"
263 "markdownDescription": "Environment variables passed to the runnable launched using `Test` or `Debug` lens or `rust-analyzer.run` command."
265 "rust-analyzer.inlayHints.enable": {
268 "description": "Whether to show inlay hints."
270 "rust-analyzer.updates.channel": {
277 "markdownEnumDescriptions": [
278 "`stable` updates are shipped weekly, they don't contain cutting-edge features from VSCode proposed APIs but have less bugs in general.",
279 "`nightly` updates are shipped daily (extension updates automatically by downloading artifacts directly from GitHub), they contain cutting-edge features and latest bug fixes. These releases help us get your feedback very quickly and speed up rust-analyzer development **drastically**."
281 "markdownDescription": "Choose `nightly` updates to get the latest features and bug fixes every day. While `stable` releases occur weekly and don't contain cutting-edge features from VSCode proposed APIs."
283 "rust-analyzer.updates.askBeforeDownload": {
286 "description": "Whether to ask for permission before downloading any files from the Internet."
288 "rust-analyzer.server.path": {
294 "markdownDescription": "Path to rust-analyzer executable (points to bundled binary by default). If this is set, then `#rust-analyzer.updates.channel#` setting is not used"
296 "rust-analyzer.server.extraEnv": {
302 "markdownDescription": "Extra environment variables that will be passed to the rust-analyzer executable. Useful for passing e.g. `RA_LOG` for debugging."
304 "rust-analyzer.trace.server": {
312 "enumDescriptions": [
318 "description": "Trace requests to the rust-analyzer (this is usually overly verbose and not recommended for regular users)."
320 "rust-analyzer.trace.extension": {
321 "description": "Enable logging of VS Code extensions itself.",
325 "rust-analyzer.debug.engine": {
329 "vadimcn.vscode-lldb",
333 "description": "Preferred debug engine.",
334 "markdownEnumDescriptions": [
335 "First try to use [CodeLLDB](https://marketplace.visualstudio.com/items?itemName=vadimcn.vscode-lldb), if it's not installed try to use [MS C++ tools](https://marketplace.visualstudio.com/items?itemName=ms-vscode.cpptools).",
336 "Use [CodeLLDB](https://marketplace.visualstudio.com/items?itemName=vadimcn.vscode-lldb)",
337 "Use [MS C++ tools](https://marketplace.visualstudio.com/items?itemName=ms-vscode.cpptools)"
340 "rust-analyzer.debug.sourceFileMap": {
342 "description": "Optional source file mappings passed to the debug engine.",
344 "/rustc/<id>": "${env:USERPROFILE}/.rustup/toolchains/<toolchain-id>/lib/rustlib/src/rust"
347 "rust-analyzer.debug.openDebugPane": {
348 "markdownDescription": "Whether to open up the `Debug Panel` on debugging start.",
352 "rust-analyzer.debug.engineSettings": {
355 "markdownDescription": "Optional settings passed to the debug engine. Example: `{ \"lldb\": { \"terminal\":\"external\"} }`"
357 "$generated-start": false,
358 "rust-analyzer.assist.importMergeBehavior": {
359 "markdownDescription": "The strategy to use when inserting new imports or merging imports.",
367 "enumDescriptions": [
369 "Merge all layers of the import trees",
370 "Only merge the last layer of the import trees"
373 "rust-analyzer.assist.importPrefix": {
374 "markdownDescription": "The path structure for newly inserted paths to use.",
382 "enumDescriptions": [
383 "Insert import paths relative to the current module, using up to one `super` prefix if the parent module contains the requested item.",
384 "Prefix all import paths with `self` if they don't begin with `self`, `super`, `crate` or a crate name.",
385 "Force import paths to be absolute by always starting them with `crate` or the crate name they refer to."
388 "rust-analyzer.callInfo.full": {
389 "markdownDescription": "Show function name and docs in parameter hints.",
393 "rust-analyzer.cargo.autoreload": {
394 "markdownDescription": "Automatically refresh project info via `cargo metadata` on `Cargo.toml` changes.",
398 "rust-analyzer.cargo.allFeatures": {
399 "markdownDescription": "Activate all available features (`--all-features`).",
403 "rust-analyzer.cargo.features": {
404 "markdownDescription": "List of features to activate.",
411 "rust-analyzer.cargo.loadOutDirsFromCheck": {
412 "markdownDescription": "Run `cargo check` on startup to get the correct value for package OUT_DIRs.",
416 "rust-analyzer.cargo.noDefaultFeatures": {
417 "markdownDescription": "Do not activate the `default` feature.",
421 "rust-analyzer.cargo.target": {
422 "markdownDescription": "Compilation target (target triple).",
429 "rust-analyzer.cargo.noSysroot": {
430 "markdownDescription": "Internal config for debugging, disables loading of sysroot crates.",
434 "rust-analyzer.checkOnSave.enable": {
435 "markdownDescription": "Run specified `cargo check` command for diagnostics on save.",
439 "rust-analyzer.checkOnSave.allFeatures": {
440 "markdownDescription": "Check with all features (`--all-features`). Defaults to `#rust-analyzer.cargo.allFeatures#`.",
447 "rust-analyzer.checkOnSave.allTargets": {
448 "markdownDescription": "Check all targets and tests (`--all-targets`).",
452 "rust-analyzer.checkOnSave.command": {
453 "markdownDescription": "Cargo command to use for `cargo check`.",
457 "rust-analyzer.checkOnSave.noDefaultFeatures": {
458 "markdownDescription": "Do not activate the `default` feature.",
465 "rust-analyzer.checkOnSave.target": {
466 "markdownDescription": "Check for a specific target. Defaults to `#rust-analyzer.cargo.target#`.",
473 "rust-analyzer.checkOnSave.extraArgs": {
474 "markdownDescription": "Extra arguments for `cargo check`.",
481 "rust-analyzer.checkOnSave.features": {
482 "markdownDescription": "List of features to activate. Defaults to `#rust-analyzer.cargo.features#`.",
492 "rust-analyzer.checkOnSave.overrideCommand": {
493 "markdownDescription": "Advanced option, fully override the command rust-analyzer uses for checking. The command should include `--message-format=json` or similar option.",
503 "rust-analyzer.completion.addCallArgumentSnippets": {
504 "markdownDescription": "Whether to add argument snippets when completing functions.",
508 "rust-analyzer.completion.addCallParenthesis": {
509 "markdownDescription": "Whether to add parenthesis when completing functions.",
513 "rust-analyzer.completion.postfix.enable": {
514 "markdownDescription": "Whether to show postfix snippets like `dbg`, `if`, `not`, etc.",
518 "rust-analyzer.completion.autoimport.enable": {
519 "markdownDescription": "Toggles the additional completions that automatically add imports when completed. Note that your client must specify the `additionalTextEdits` LSP client capability to truly have this feature enabled.",
523 "rust-analyzer.diagnostics.enable": {
524 "markdownDescription": "Whether to show native rust-analyzer diagnostics.",
528 "rust-analyzer.diagnostics.enableExperimental": {
529 "markdownDescription": "Whether to show experimental rust-analyzer diagnostics that might have more false positives than usual.",
533 "rust-analyzer.diagnostics.disabled": {
534 "markdownDescription": "List of rust-analyzer diagnostics to disable.",
542 "rust-analyzer.diagnostics.warningsAsHint": {
543 "markdownDescription": "List of warnings that should be displayed with info severity.\\n\\nThe warnings will be indicated by a blue squiggly underline in code and a blue icon in the `Problems Panel`.",
550 "rust-analyzer.diagnostics.warningsAsInfo": {
551 "markdownDescription": "List of warnings that should be displayed with hint severity.\\n\\nThe warnings will be indicated by faded text or three dots in code and will not show up in the `Problems Panel`.",
558 "rust-analyzer.files.watcher": {
559 "markdownDescription": "Controls file watching implementation.",
563 "rust-analyzer.files.excludeDirs": {
564 "markdownDescription": "These directories will be ignored by rust-analyzer.",
571 "rust-analyzer.hoverActions.debug": {
572 "markdownDescription": "Whether to show `Debug` action. Only applies when `#rust-analyzer.hoverActions.enable#` is set.",
576 "rust-analyzer.hoverActions.enable": {
577 "markdownDescription": "Whether to show HoverActions in Rust files.",
581 "rust-analyzer.hoverActions.gotoTypeDef": {
582 "markdownDescription": "Whether to show `Go to Type Definition` action. Only applies when `#rust-analyzer.hoverActions.enable#` is set.",
586 "rust-analyzer.hoverActions.implementations": {
587 "markdownDescription": "Whether to show `Implementations` action. Only applies when `#rust-analyzer.hoverActions.enable#` is set.",
591 "rust-analyzer.hoverActions.run": {
592 "markdownDescription": "Whether to show `Run` action. Only applies when `#rust-analyzer.hoverActions.enable#` is set.",
596 "rust-analyzer.hoverActions.linksInHover": {
597 "markdownDescription": "Use markdown syntax for links in hover.",
601 "rust-analyzer.inlayHints.chainingHints": {
602 "markdownDescription": "Whether to show inlay type hints for method chains.",
606 "rust-analyzer.inlayHints.maxLength": {
607 "markdownDescription": "Maximum length for inlay hints. Default is unlimited.",
615 "rust-analyzer.inlayHints.parameterHints": {
616 "markdownDescription": "Whether to show function parameter name inlay hints at the call site.",
620 "rust-analyzer.inlayHints.typeHints": {
621 "markdownDescription": "Whether to show inlay type hints for variables.",
625 "rust-analyzer.lens.debug": {
626 "markdownDescription": "Whether to show `Debug` lens. Only applies when `#rust-analyzer.lens.enable#` is set.",
630 "rust-analyzer.lens.enable": {
631 "markdownDescription": "Whether to show CodeLens in Rust files.",
635 "rust-analyzer.lens.implementations": {
636 "markdownDescription": "Whether to show `Implementations` lens. Only applies when `#rust-analyzer.lens.enable#` is set.",
640 "rust-analyzer.lens.run": {
641 "markdownDescription": "Whether to show `Run` lens. Only applies when `#rust-analyzer.lens.enable#` is set.",
645 "rust-analyzer.lens.methodReferences": {
646 "markdownDescription": "Whether to show `Method References` lens. Only applies when `#rust-analyzer.lens.enable#` is set.",
650 "rust-analyzer.lens.references": {
651 "markdownDescription": "Whether to show `References` lens. Only applies when `#rust-analyzer.lens.enable#` is set.",
655 "rust-analyzer.linkedProjects": {
656 "markdownDescription": "Disable project auto-discovery in favor of explicitly specified set of projects.\\n\\nElements must be paths pointing to `Cargo.toml`, `rust-project.json`, or JSON objects in `rust-project.json` format.",
666 "rust-analyzer.lruCapacity": {
667 "markdownDescription": "Number of syntax trees rust-analyzer keeps in memory. Defaults to 128.",
675 "rust-analyzer.notifications.cargoTomlNotFound": {
676 "markdownDescription": "Whether to show `can't find Cargo.toml` error message.",
680 "rust-analyzer.procMacro.enable": {
681 "markdownDescription": "Enable Proc macro support, `#rust-analyzer.cargo.loadOutDirsFromCheck#` must be enabled.",
685 "rust-analyzer.procMacro.server": {
686 "markdownDescription": "Internal config, path to proc-macro server executable (typically, this is rust-analyzer itself, but we override this in tests).",
693 "rust-analyzer.runnables.overrideCargo": {
694 "markdownDescription": "Command to be executed instead of 'cargo' for runnables.",
701 "rust-analyzer.runnables.cargoExtraArgs": {
702 "markdownDescription": "Additional arguments to be passed to cargo for runnables such as tests or binaries.\\nFor example, it may be `--release`.",
709 "rust-analyzer.rustcSource": {
710 "markdownDescription": "Path to the rust compiler sources, for usage in rustc_private projects.",
717 "rust-analyzer.rustfmt.extraArgs": {
718 "markdownDescription": "Additional arguments to `rustfmt`.",
725 "rust-analyzer.rustfmt.overrideCommand": {
726 "markdownDescription": "Advanced option, fully override the command rust-analyzer uses for formatting.",
736 "$generated-end": false
744 "regexp": "^(warning|warn|error)(?:\\[(.*?)\\])?: (.*)$",
750 "regexp": "^[\\s->=]*(.*?):(\\d*):(\\d*)\\s*$",
758 "name": "rustc-json",
761 "regexp": "^.*\"message\":{\"message\":\"([^\"]*).*?\"file_name\":\"([^\"]+).*?\"line_start\":(\\d+).*?\"line_end\":(\\d+).*?\"column_start\":(\\d+).*?\"column_end\":(\\d+).*}$",
774 "id": "ra_syntax_tree",
788 "configuration": "language-configuration.json"
793 "language": "ra_syntax_tree",
794 "scopeName": "source.ra_syntax_tree",
795 "path": "ra_syntax_tree.tmGrammar.json"
810 "name": "rustc-json",
817 "pattern": "$rustc-json"
820 "name": "rustc-watch",
828 "beginsPattern": "^\\[Running\\b",
829 "endsPattern": "^\\[Finished running\\b"
836 "id": "rust_analyzer.inlayHints.foreground",
837 "description": "Foreground color of inlay hints (is overriden by more specific rust_analyzer.inlayHints.foreground.* configurations)",
841 "highContrast": "#BEBEBE"
845 "id": "rust_analyzer.inlayHints.background",
846 "description": "Background color of inlay hints (is overriden by more specific rust_analyzer.inlayHints.background.* configurations)",
849 "light": "#11223300",
850 "highContrast": "#11223300"
854 "id": "rust_analyzer.inlayHints.foreground.typeHints",
855 "description": "Foreground color of inlay type hints for variables (overrides rust_analyzer.inlayHints.foreground)",
857 "dark": "rust_analyzer.inlayHints.foreground",
858 "light": "rust_analyzer.inlayHints.foreground",
859 "highContrast": "rust_analyzer.inlayHints.foreground"
863 "id": "rust_analyzer.inlayHints.foreground.chainingHints",
864 "description": "Foreground color of inlay type hints for method chains (overrides rust_analyzer.inlayHints.foreground)",
866 "dark": "rust_analyzer.inlayHints.foreground",
867 "light": "rust_analyzer.inlayHints.foreground",
868 "highContrast": "rust_analyzer.inlayHints.foreground"
872 "id": "rust_analyzer.inlayHints.foreground.parameterHints",
873 "description": "Foreground color of function parameter name inlay hints at the call site (overrides rust_analyzer.inlayHints.foreground)",
875 "dark": "rust_analyzer.inlayHints.foreground",
876 "light": "rust_analyzer.inlayHints.foreground",
877 "highContrast": "rust_analyzer.inlayHints.foreground"
881 "id": "rust_analyzer.inlayHints.background.typeHints",
882 "description": "Background color of inlay type hints for variables (overrides rust_analyzer.inlayHints.background)",
884 "dark": "rust_analyzer.inlayHints.background",
885 "light": "rust_analyzer.inlayHints.background",
886 "highContrast": "rust_analyzer.inlayHints.background"
890 "id": "rust_analyzer.inlayHints.background.chainingHints",
891 "description": "Background color of inlay type hints for method chains (overrides rust_analyzer.inlayHints.background)",
893 "dark": "rust_analyzer.inlayHints.background",
894 "light": "rust_analyzer.inlayHints.background",
895 "highContrast": "rust_analyzer.inlayHints.background"
899 "id": "rust_analyzer.inlayHints.background.parameterHints",
900 "description": "Background color of function parameter name inlay hints at the call site (overrides rust_analyzer.inlayHints.background)",
902 "dark": "rust_analyzer.inlayHints.background",
903 "light": "rust_analyzer.inlayHints.background",
904 "highContrast": "rust_analyzer.inlayHints.background"
908 "id": "rust_analyzer.syntaxTreeBorder",
909 "description": "Color of the border displayed in the Rust source code for the selected syntax node (see \"Show Syntax Tree\" command)",
913 "highContrast": "#b700ff"
917 "semanticTokenTypes": [
920 "description": "Style for attributes"
924 "description": "Style for boolean literals",
925 "superType": "keyword"
929 "description": "Style for builtin types",
934 "description": "Style for lifetimes"
938 "description": "Style for the self keyword",
939 "superType": "keyword"
943 "description": "Style for type aliases",
948 "description": "Style for C-style untagged unions",
952 "id": "unresolvedReference",
953 "description": "Style for names which can not be resolved due to compilation errors"
956 "id": "formatSpecifier",
957 "description": "Style for {} placeholders in format strings"
961 "description": "generic punctuation"
965 "description": "( or )",
966 "superType": "punctuation"
970 "description": "[ or ]",
971 "superType": "punctuation"
975 "description": "{ or }",
976 "superType": "punctuation"
980 "description": "< or >",
981 "superType": "punctuation"
986 "superType": "punctuation"
991 "superType": "punctuation"
996 "superType": "punctuation"
1001 "superType": "punctuation"
1004 "semanticTokenModifiers": [
1007 "description": "Style for elements within attributes"
1011 "description": "Style for compile-time constants"
1014 "id": "controlFlow",
1015 "description": "Style for control flow keywords"
1019 "description": "Style for mutable bindings"
1023 "description": "Style for unsafe operations"
1027 "description": "Style for non-Copy lvalues consumed by method/function call"
1031 "description": "Style for variables/parameters that can be used in call expressions"
1034 "semanticTokenScopes": [
1039 "meta.attribute.rust"
1041 "function.attribute": [
1042 "entity.name.function.attribute.rust"
1045 "constant.language.boolean.rust"
1048 "support.type.primitive.rust"
1051 "storage.modifier.lifetime.rust"
1054 "entity.name.type.typeAlias.rust"
1057 "entity.name.type.union.rust"
1060 "entity.name.type.struct.rust"
1063 "keyword.other.rust"
1065 "keyword.controlFlow": [
1066 "keyword.control.rust"
1068 "variable.constant": [
1069 "variable.other.constant.rust"
1071 "formatSpecifier": [
1072 "punctuation.section.embedded.rust"
1083 "command": "rust-analyzer.syntaxTree",
1084 "when": "inRustProject"
1087 "command": "rust-analyzer.viewHir",
1088 "when": "inRustProject"
1091 "command": "rust-analyzer.expandMacro",
1092 "when": "inRustProject"
1095 "command": "rust-analyzer.matchingBrace",
1096 "when": "inRustProject"
1099 "command": "rust-analyzer.parentModule",
1100 "when": "inRustProject"
1103 "command": "rust-analyzer.joinLines",
1104 "when": "inRustProject"
1107 "command": "rust-analyzer.run",
1108 "when": "inRustProject"
1111 "command": "rust-analyzer.debug",
1112 "when": "inRustProject"
1115 "command": "rust-analyzer.newDebugConfig",
1116 "when": "inRustProject"
1119 "command": "rust-analyzer.analyzerStatus",
1120 "when": "inRustProject"
1123 "command": "rust-analyzer.memoryUsage",
1124 "when": "inRustProject"
1127 "command": "rust-analyzer.reloadWorkspace",
1128 "when": "inRustProject"
1131 "command": "rust-analyzer.reload",
1132 "when": "inRustProject"
1135 "command": "rust-analyzer.updateGithubToken",
1136 "when": "inRustProject"
1139 "command": "rust-analyzer.onEnter",
1140 "when": "inRustProject"
1143 "command": "rust-analyzer.ssr",
1144 "when": "inRustProject"
1147 "command": "rust-analyzer.serverVersion",
1148 "when": "inRustProject"
1151 "command": "rust-analyzer.toggleInlayHints",
1152 "when": "inRustProject"
1155 "command": "rust-analyzer.openDocs",
1156 "when": "inRustProject"
1159 "command": "rust-analyzer.openCargoToml",
1160 "when": "inRustProject"