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]]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to