@@ -4341,7 +4341,7 @@ class DevtoolIdeSdkGccTests(DevtoolIdeSdkTests):
class DevtoolIdeSdkRustTests(DevtoolIdeSdkTests):
- def test_code_cargo_rust_analyzer_recommendation(self):
+ def test_code_cargo_rust_analyzer_configuration(self):
recipe_name = "cargo-example"
self._check_workspace()
self._write_bb_config()
@@ -4349,8 +4349,18 @@ class DevtoolIdeSdkRustTests(DevtoolIdeSdkTests):
runCmd('devtool ide-sdk %s oe-selftest-image --ide=code' % recipe_name,
output_log=self._cmd_logger)
+ with open(os.path.join(tempdir, '.vscode', 'settings.json')) as settings_file:
+ settings = json.load(settings_file)
with open(os.path.join(tempdir, '.vscode', 'extensions.json')) as extensions_file:
extensions = json.load(extensions_file)
+ cargo_config = os.path.join(
+ self.workspacedir, 'ide-sdk', recipe_name, 'cargo-config.toml')
+ self.assertExists(cargo_config, 'Cargo config was not generated')
+ self.assertEqual(settings['rust-analyzer.cargo.configPath'], cargo_config)
+ self.assertEqual(
+ settings['rust-analyzer.cargo.target'],
+ get_bb_var('RUST_HOST_SYS', recipe_name))
+ self.assertNotIn('rust-analyzer.cargo.extraEnv', settings)
self.assertIn('rust-lang.rust-analyzer', extensions['recommendations'])
class DevtoolIdeSdkKernelTests(DevtoolIdeSdkTests):
@@ -228,6 +228,16 @@ class IdeVSCode(IdeBase):
}
]
+ def __vscode_settings_cargo(self, settings_dict, modified_recipe):
+ if modified_recipe.build_tool is not BuildTool.CARGO:
+ return
+ cargo_config = modified_recipe.update_cargo_config()
+ settings_dict["rust-analyzer.server.extraEnv"] = {
+ "PATH": modified_recipe.path
+ }
+ settings_dict["rust-analyzer.cargo.target"] = modified_recipe.cargo_target
+ settings_dict["rust-analyzer.cargo.configPath"] = cargo_config
+
def __vscode_settings_clangd(self, settings_dict, modified_recipe):
if not (modified_recipe.ide_sdk_intellisense == 'clangd' and modified_recipe.build_tool.is_c_cpp):
return
@@ -294,6 +304,7 @@ class IdeVSCode(IdeBase):
self.__vscode_settings_cmake(settings_dict, modified_recipe)
self.__vscode_settings_meson(settings_dict, modified_recipe)
self.__vscode_settings_kernel_module(settings_dict, modified_recipe)
+ self.__vscode_settings_cargo(settings_dict, modified_recipe)
self.__vscode_settings_clangd(settings_dict, modified_recipe)
self.__vscode_settings_format(settings_dict, modified_recipe)
Point Rust Analyzer at the generated Cargo config and target, while keeping its process environment limited to the recipe PATH. Verify the workspace config path and target in the Cargo selftest. AI-Generated: Uses GitHub Copilot Signed-off-by: Enguerrand de Ribaucourt <enguerrand.de-ribaucourt@savoirfairelinux.com> --- meta/lib/oeqa/selftest/cases/devtool.py | 12 +++++++++++- scripts/lib/devtool/ide_plugins/ide_code.py | 11 +++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-)