diff --git a/README.md b/README.md
index ce043ea..04b5abf 100644
--- a/README.md
+++ b/README.md
@@ -23,6 +23,8 @@ CodeForge 是一款轻量级、高性能的桌面代码执行器,专为开发
- **Node.js**
- **Go**
- **Java**
+- **Shell**
+- **Rust**
- **...更多语言敬请期待**
## 安装
diff --git a/package.json b/package.json
index 68681ab..a8d36e1 100644
--- a/package.json
+++ b/package.json
@@ -15,6 +15,7 @@
"@codemirror/lang-java": "^6.0.2",
"@codemirror/lang-javascript": "^6.2.4",
"@codemirror/lang-python": "^6.2.1",
+ "@codemirror/lang-rust": "^6.0.2",
"@codemirror/language": "^6.11.2",
"@codemirror/legacy-modes": "^6.5.1",
"@codemirror/state": "^6.5.2",
diff --git a/public/icons/rust.svg b/public/icons/rust.svg
new file mode 100644
index 0000000..89e1955
--- /dev/null
+++ b/public/icons/rust.svg
@@ -0,0 +1,3 @@
+
\ No newline at end of file
diff --git a/src-tauri/src/plugins/manager.rs b/src-tauri/src/plugins/manager.rs
index bca946b..34a0a86 100644
--- a/src-tauri/src/plugins/manager.rs
+++ b/src-tauri/src/plugins/manager.rs
@@ -3,6 +3,7 @@ use super::{
python3::Python3Plugin,
};
use crate::plugins::java::JavaPlugin;
+use crate::plugins::rust::RustPlugin;
use crate::plugins::shell::ShellPlugin;
use std::collections::HashMap;
@@ -20,6 +21,7 @@ impl PluginManager {
plugins.insert("go".to_string(), Box::new(GoPlugin));
plugins.insert("java".to_string(), Box::new(JavaPlugin));
plugins.insert("shell".to_string(), Box::new(ShellPlugin));
+ plugins.insert("rust".to_string(), Box::new(RustPlugin));
Self { plugins }
}
diff --git a/src-tauri/src/plugins/mod.rs b/src-tauri/src/plugins/mod.rs
index 0be83e7..9e3b851 100644
--- a/src-tauri/src/plugins/mod.rs
+++ b/src-tauri/src/plugins/mod.rs
@@ -335,6 +335,7 @@ pub mod manager;
pub mod nodejs;
pub mod python2;
pub mod python3;
+pub mod rust;
pub mod shell;
pub use manager::PluginManager;
diff --git a/src-tauri/src/plugins/rust.rs b/src-tauri/src/plugins/rust.rs
new file mode 100644
index 0000000..79173b2
--- /dev/null
+++ b/src-tauri/src/plugins/rust.rs
@@ -0,0 +1,67 @@
+use super::{LanguagePlugin, PluginConfig};
+use std::vec;
+
+pub struct RustPlugin;
+
+impl LanguagePlugin for RustPlugin {
+ fn get_order(&self) -> i32 {
+ 7
+ }
+
+ fn get_language_name(&self) -> &'static str {
+ "Rust"
+ }
+
+ fn get_language_key(&self) -> &'static str {
+ "rust"
+ }
+
+ fn get_file_extension(&self) -> String {
+ self.get_config()
+ .map(|config| config.extension.clone())
+ .unwrap_or_else(|| "rs".to_string())
+ }
+
+ fn get_version_args(&self) -> Vec<&'static str> {
+ vec!["--version"]
+ }
+
+ fn get_path_command(&self) -> String {
+ "rustc --print sysroot".to_string()
+ }
+
+ fn get_execute_args(&self, file_path: &str) -> Vec {
+ let cmd = if self.get_execute_home().is_some() {
+ format!("./rustc {} -o ./main && ./main", file_path)
+ } else {
+ format!(
+ "export PATH=$PATH:$HOME/.cargo/bin && rustc {} -o /tmp/main && /tmp/main",
+ file_path
+ )
+ };
+
+ vec!["-c".to_string(), cmd]
+ }
+
+ fn get_default_config(&self) -> PluginConfig {
+ PluginConfig {
+ enabled: true,
+ language: String::from("rust"),
+ before_compile: None,
+ extension: String::from("rs"),
+ execute_home: None,
+ run_command: Some(String::from("bash")),
+ after_compile: Some(String::from("rm -f /tmp/main")),
+ template: Some(String::from(
+ "// Rust 示例代码 - CodeForge 代码执行环境\n\nfn main() {\n println!(\"🎉 欢迎使用 CodeForge!\");\n println!(\"Welcome to CodeForge!\");\n println!(\"\");\n \n println!(\"=========================================\");\n println!(\" CodeForge Rust \");\n println!(\"=========================================\");\n println!(\"\");\n \n // 基本输出示例\n println!(\"✅ Rust 运行成功! (Rust is working!)\");\n println!(\"🦀 这是 Rust 版本 (This is Rust)\");\n println!(\"\");\n \n // 简单计算\n let number1 = 10;\n let number2 = 20;\n let result = number1 + number2;\n \n println!(\"🔢 简单计算 (Simple calculation):\");\n println!(\"{} + {} = {}\", number1, number2, result);\n println!(\"\");\n \n // 字符串操作\n let name = \"CodeForge\";\n let version = \"Rust\";\n \n println!(\"📝 字符串操作 (String operations):\");\n println!(\"平台名称 (Platform): {}\", name);\n println!(\"语言版本 (Language): {}\", version);\n println!(\"完整信息 (Full info): {} - {}\", name, version);\n println!(\"\");\n \n // 循环示例\n println!(\"🔄 循环输出 (Loop output):\");\n for i in 1..=5 {\n println!(\"第 {} 次输出 (Output #{}): Hello from CodeForge!\", i, i);\n }\n println!(\"\");\n \n // 向量操作\n let fruits = vec![\"苹果\", \"香蕉\", \"橙子\", \"葡萄\"];\n println!(\"🍎 水果列表 (Fruit list):\");\n for (index, fruit) in fruits.iter().enumerate() {\n println!(\"{}. {}\", index + 1, fruit);\n }\n println!(\"\");\n \n // 条件判断\n let score = 85;\n println!(\"📊 成绩评估 (Score evaluation):\");\n if score >= 90 {\n println!(\"优秀! (Excellent!)\");\n } else if score >= 80 {\n println!(\"良好! (Good!)\");\n } else if score >= 60 {\n println!(\"及格 (Pass)\");\n } else {\n println!(\"需要努力 (Need improvement)\");\n }\n \n // Rust 特有的所有权演示\n println!(\"\");\n println!(\"🔒 Rust 所有权演示 (Ownership demonstration):\");\n let mut message = String::from(\"Hello\");\n message.push_str(\", CodeForge!\");\n println!(\"可变字符串 (Mutable string): {}\", message);\n \n // Option 类型演示\n let maybe_number: Option = Some(42);\n match maybe_number {\n Some(n) => println!(\"找到数字 (Found number): {}\", n),\n None => println!(\"没有数字 (No number)\"),\n }\n \n println!(\"\");\n println!(\"🎯 CodeForge Rust 代码执行完成!\");\n println!(\"🎯 CodeForge Rust execution completed!\");\n println!(\"\");\n println!(\"感谢使用 CodeForge 代码执行环境! 🚀\");\n println!(\"Thank you for using CodeForge! 🚀\");\n}",
+ )),
+ timeout: Some(30),
+ }
+ }
+
+ fn get_default_command(&self) -> String {
+ self.get_config()
+ .and_then(|config| config.run_command.clone())
+ .unwrap_or_else(|| "/tmp/main".to_string())
+ }
+}
diff --git a/src/composables/useCodeMirrorEditor.ts b/src/composables/useCodeMirrorEditor.ts
index f66c3d7..5d7f845 100644
--- a/src/composables/useCodeMirrorEditor.ts
+++ b/src/composables/useCodeMirrorEditor.ts
@@ -3,6 +3,7 @@ import { python } from '@codemirror/lang-python'
import { javascript } from '@codemirror/lang-javascript'
import { go } from '@codemirror/lang-go'
import { java } from '@codemirror/lang-java'
+import { rust } from '@codemirror/lang-rust'
import { shell } from '@codemirror/legacy-modes/mode/shell'
import {
abcdef,
@@ -155,6 +156,8 @@ export function useCodeMirrorEditor(props: Props)
return go()
case 'java':
return java()
+ case 'rust':
+ return rust()
case 'shell':
return StreamLanguage.define(shell)
default: