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 <[email protected]> --- meta/lib/oeqa/selftest/cases/devtool.py | 12 +++++++++++- scripts/lib/devtool/ide_plugins/ide_code.py | 11 +++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/meta/lib/oeqa/selftest/cases/devtool.py b/meta/lib/oeqa/selftest/cases/devtool.py index 941f54e36b..d1e15d0180 100644 --- a/meta/lib/oeqa/selftest/cases/devtool.py +++ b/meta/lib/oeqa/selftest/cases/devtool.py @@ -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): diff --git a/scripts/lib/devtool/ide_plugins/ide_code.py b/scripts/lib/devtool/ide_plugins/ide_code.py index cf7f81293c..85f286335f 100644 --- a/scripts/lib/devtool/ide_plugins/ide_code.py +++ b/scripts/lib/devtool/ide_plugins/ide_code.py @@ -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) -- 2.53.0
-=-=-=-=-=-=-=-=-=-=-=- Links: You receive all messages sent to this group. View/Reply Online (#248643): https://lists.openembedded.org/g/openembedded-core/message/248643 Mute This Topic: https://lists.openembedded.org/mt/121938786/21656 Group Owner: [email protected] Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub [[email protected]] -=-=-=-=-=-=-=-=-=-=-=-
