Skip to content

Commit 0a8a48f

Browse files
committed
feat (language): 支持 Scala 语言
1 parent 40ca30d commit 0a8a48f

5 files changed

Lines changed: 66 additions & 0 deletions

File tree

public/icons/scala.svg

Lines changed: 6 additions & 0 deletions
Loading

src-tauri/src/plugins/manager.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ use super::{
44
};
55
use crate::plugins::java::JavaPlugin;
66
use crate::plugins::rust::RustPlugin;
7+
use crate::plugins::scala::ScalaPlugin;
78
use crate::plugins::shell::ShellPlugin;
89
use crate::plugins::swift::SwiftPlugin;
910
use std::collections::HashMap;
@@ -24,6 +25,7 @@ impl PluginManager {
2425
plugins.insert("shell".to_string(), Box::new(ShellPlugin));
2526
plugins.insert("rust".to_string(), Box::new(RustPlugin));
2627
plugins.insert("swift".to_string(), Box::new(SwiftPlugin));
28+
plugins.insert("scala".to_string(), Box::new(ScalaPlugin));
2729

2830
Self { plugins }
2931
}

src-tauri/src/plugins/mod.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -337,6 +337,7 @@ pub mod nodejs;
337337
pub mod python2;
338338
pub mod python3;
339339
pub mod rust;
340+
pub mod scala;
340341
pub mod shell;
341342
pub mod swift;
342343

src-tauri/src/plugins/scala.rs

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
use super::{LanguagePlugin, PluginConfig};
2+
use std::vec;
3+
4+
pub struct ScalaPlugin;
5+
6+
impl LanguagePlugin for ScalaPlugin {
7+
fn get_order(&self) -> i32 {
8+
9
9+
}
10+
11+
fn get_language_name(&self) -> &'static str {
12+
"Scala"
13+
}
14+
15+
fn get_language_key(&self) -> &'static str {
16+
"scala"
17+
}
18+
19+
fn get_file_extension(&self) -> String {
20+
self.get_config()
21+
.map(|config| config.extension.clone())
22+
.unwrap_or_else(|| "scala".to_string())
23+
}
24+
25+
fn get_version_args(&self) -> Vec<&'static str> {
26+
vec!["-version"]
27+
}
28+
29+
fn get_path_command(&self) -> String {
30+
"which scala".to_string()
31+
}
32+
33+
fn get_default_config(&self) -> PluginConfig {
34+
PluginConfig {
35+
enabled: true,
36+
language: String::from("scala"),
37+
before_compile: None,
38+
extension: String::from("scala"),
39+
execute_home: None,
40+
run_command: Some(String::from("scala $filename")),
41+
after_compile: Some(String::from("rm -f *.class")),
42+
template: Some(String::from(
43+
"// Scala 示例代码 - CodeForge 代码执行环境\n\nobject Main {\n def main(args: Array[String]): Unit = {\n println(\"🎉 欢迎使用 CodeForge!\")\n println(\"Welcome to CodeForge!\")\n println(\"\")\n\n println(\"=========================================\")\n println(\" CodeForge Scala \")\n println(\"=========================================\")\n println(\"\")\n\n // 基本输出示例\n println(\"✅ Scala 运行成功! (Scala is working!)\")\n println(\"⚡ 这是 Scala 脚本 (This is Scala script)\")\n println(\"\")\n\n // 变量操作\n val name = \"CodeForge\"\n val version = \"Scala\"\n val number1 = 10\n val number2 = 20\n val result = number1 + number2\n\n println(\"🔢 简单计算 (Simple calculation):\")\n println(s\"$number1 + $number2 = $result\")\n println(\"\")\n\n // 字符串操作\n println(\"📝 字符串操作 (String operations):\")\n println(s\"平台名称 (Platform): $name\")\n println(s\"语言版本 (Language): $version\")\n println(s\"完整信息 (Full info): $name - $version\")\n println(\"\")\n\n // 循环示例\n println(\"🔄 循环输出 (Loop output):\")\n for (i <- 1 to 5) {\n println(s\"第 $i 次输出 (Output #$i): Hello from CodeForge!\")\n }\n println(\"\")\n\n // 列表操作\n val fruits = List(\"苹果\", \"香蕉\", \"橙子\", \"葡萄\")\n println(\"🍎 水果列表 (Fruit list):\")\n fruits.zipWithIndex.foreach { case (fruit, index) =>\n println(s\"${index + 1}. $fruit\")\n }\n println(\"\")\n\n // 条件判断\n val score = 85\n println(\"📊 成绩评估 (Score evaluation):\")\n score match {\n case s if s >= 90 => println(\"优秀! (Excellent!)\")\n case s if s >= 80 => println(\"良好! (Good!)\")\n case s if s >= 60 => println(\"及格 (Pass)\")\n case _ => println(\"需要努力 (Need improvement)\")\n }\n\n // Option 类型示例\n val optionalValue: Option[Int] = Some(42)\n println(\"\")\n println(\"🔍 Option 类型示例 (Option example):\")\n optionalValue match {\n case Some(value) => println(s\"可选值: $value (Optional value: $value)\")\n case None => println(\"值为空 (Value is None)\")\n }\n\n // 函数示例\n def greetUser(name: String): String = {\n s\"Hello, $name! 👋\"\n }\n\n println(\"\")\n println(\"🎭 函数示例 (Function example):\")\n val greeting = greetUser(\"CodeForge用户\")\n println(greeting)\n\n // 集合操作示例\n println(\"\")\n println(\"🗂️ 集合操作示例 (Collection operations):\")\n val numbers = (1 to 10).toList\n val evenNumbers = numbers.filter(_ % 2 == 0)\n val doubled = numbers.map(_ * 2)\n \n println(s\"原始数字 (Original): ${numbers.mkString(\", \")}\")\n println(s\"偶数 (Even numbers): ${evenNumbers.mkString(\", \")}\")\n println(s\"翻倍 (Doubled): ${doubled.mkString(\", \")}\")\n \n // Case Class 示例\n case class Person(name: String, age: Int)\n val person = Person(\"张三\", 25)\n \n println(\"\")\n println(\"👤 Case Class 示例:\")\n println(s\"姓名: ${person.name}, 年龄: ${person.age}\")\n\n println(\"\")\n println(\"🎯 CodeForge Scala 代码执行完成!\")\n println(\"🎯 CodeForge Scala execution completed!\")\n println(\"\")\n println(\"感谢使用 CodeForge 代码执行环境! 🚀\")\n println(\"Thank you for using CodeForge! 🚀\")\n }\n}",
44+
)),
45+
timeout: Some(45),
46+
}
47+
}
48+
49+
fn get_default_command(&self) -> String {
50+
self.get_config()
51+
.and_then(|config| config.run_command.clone())
52+
.unwrap_or_else(|| "scala".to_string())
53+
}
54+
}

src/composables/useCodeMirrorEditor.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import { java } from '@codemirror/lang-java'
66
import { rust } from '@codemirror/lang-rust'
77
import { shell } from '@codemirror/legacy-modes/mode/shell'
88
import { swift } from '@codemirror/legacy-modes/mode/swift'
9+
import { scala } from '@codemirror/legacy-modes/mode/clike'
910
import {
1011
abcdef,
1112
abyss,
@@ -163,6 +164,8 @@ export function useCodeMirrorEditor(props: Props)
163164
return StreamLanguage.define(shell)
164165
case 'swift':
165166
return StreamLanguage.define(swift)
167+
case 'scala':
168+
return StreamLanguage.define(scala)
166169
default:
167170
return null
168171
}

0 commit comments

Comments
 (0)