Skip to content

Commit abd83da

Browse files
authored
Merge pull request #37 from qianmoQ/dev-25.0.2
2 parents 4467c54 + 96a7325 commit abd83da

7 files changed

Lines changed: 72 additions & 6 deletions

File tree

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ CodeForge 是一款轻量级、高性能的桌面代码执行器,专为开发
2222

2323
## 支持的语言
2424

25+
- **Clojure**
2526
- **Go**
2627
- **Java**
2728
- **Kotlin**

public/icons/clojure.svg

Lines changed: 1 addition & 0 deletions
Loading

src-tauri/src/plugins/clojure.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 ClojurePlugin;
5+
6+
impl LanguagePlugin for ClojurePlugin {
7+
fn get_order(&self) -> i32 {
8+
11
9+
}
10+
11+
fn get_language_name(&self) -> &'static str {
12+
"Clojure"
13+
}
14+
15+
fn get_language_key(&self) -> &'static str {
16+
"clojure"
17+
}
18+
19+
fn get_file_extension(&self) -> String {
20+
self.get_config()
21+
.map(|config| config.extension.clone())
22+
.unwrap_or_else(|| "clj".to_string())
23+
}
24+
25+
fn get_version_args(&self) -> Vec<&'static str> {
26+
vec!["-e", "(println (clojure-version))"]
27+
}
28+
29+
fn get_path_command(&self) -> String {
30+
"which clojure".to_string()
31+
}
32+
33+
fn get_default_config(&self) -> PluginConfig {
34+
PluginConfig {
35+
enabled: true,
36+
language: String::from("clojure"),
37+
before_compile: None,
38+
extension: String::from("clj"),
39+
execute_home: None,
40+
run_command: Some(String::from("clojure $filename")),
41+
after_compile: None,
42+
template: Some(String::from(
43+
";; Clojure 示例代码 - CodeForge 代码执行环境\n\n(println \"🎉 欢迎使用 CodeForge!\")\n(println \"Welcome to CodeForge!\")\n(println \"\")\n\n(println \"=========================================\")\n(println \" CodeForge Clojure \")\n(println \"=========================================\")\n(println \"\")\n\n;; 基本输出示例\n(println \"✅ Clojure 运行成功! (Clojure is working!)\")\n(println \"🔥 这是 Clojure 脚本 (This is Clojure script)\")\n(println \"\")\n\n;; 变量操作\n(def name \"CodeForge\")\n(def version \"Clojure\")\n(def number1 10)\n(def number2 20)\n(def result (+ number1 number2))\n\n(println \"🔢 简单计算 (Simple calculation):\")\n(println (str number1 \" + \" number2 \" = \" result))\n(println \"\")\n\n;; 字符串操作\n(println \"📝 字符串操作 (String operations):\")\n(println (str \"平台名称 (Platform): \" name))\n(println (str \"语言版本 (Language): \" version))\n(println (str \"完整信息 (Full info): \" name \" - \" version))\n(println \"\")\n\n;; 循环示例\n(println \"🔄 循环输出 (Loop output):\")\n(doseq [i (range 1 6)]\n (println (str \"\" i \" 次输出 (Output #\" i \"): Hello from CodeForge!\")))\n(println \"\")\n\n;; 向量操作\n(def fruits [\"苹果\" \"香蕉\" \"橙子\" \"葡萄\"])\n(println \"🍎 水果列表 (Fruit list):\")\n(doseq [[index fruit] (map-indexed vector fruits)]\n (println (str (inc index) \". \" fruit)))\n(println \"\")\n\n;; 条件判断\n(def score 85)\n(println \"📊 成绩评估 (Score evaluation):\")\n(cond\n (>= score 90) (println \"优秀! (Excellent!)\")\n (>= score 80) (println \"良好! (Good!)\")\n (>= score 60) (println \"及格 (Pass)\")\n :else (println \"需要努力 (Need improvement)\"))\n\n;; nil 类型示例\n(def optional-value 42)\n(println \"\")\n(println \"🔍 nil 类型示例 (nil example):\")\n(if optional-value\n (println (str \"可选值: \" optional-value \" (Optional value: \" optional-value \")\"))\n (println \"值为空 (Value is nil)\"))\n\n;; 函数示例\n(defn greet-user [username]\n (str \"Hello, \" username \"! 👋\"))\n\n(println \"\")\n(println \"🎭 函数示例 (Function example):\")\n(def greeting (greet-user \"CodeForge用户\"))\n(println greeting)\n\n;; 高阶函数示例\n(println \"\")\n(println \"🔧 高阶函数示例 (Higher-order function):\")\n(def numbers (range 1 11))\n(def even-numbers (filter even? numbers))\n(def doubled (map #(* % 2) numbers))\n\n(println (str \"原始数字 (Original): \" (clojure.string/join \", \" numbers)))\n(println (str \"偶数 (Even numbers): \" (clojure.string/join \", \" even-numbers)))\n(println (str \"翻倍 (Doubled): \" (clojure.string/join \", \" doubled)))\n\n;; Lambda 表达式示例\n(println \"\")\n(println \"🎯 Lambda 表达式 (Lambda expression):\")\n(def calculate #(* %1 %2))\n(def product (calculate 6 7))\n(println (str \"6 × 7 = \" product))\n\n;; 数据结构示例\n(println \"\")\n(println \"📦 数据结构示例 (Data structures):\")\n\n;; 哈希映射\n(def person {:name \"张三\" :age 25 :city \"北京\"})\n(println (str \"姓名: \" (:name person) \", 年龄: \" (:age person) \", 城市: \" (:city person)))\n\n;; 集合操作\n(def numbers-set #{1 2 3 4 5})\n(def letters-set #{\\a \\b \\c \\d})\n(println (str \"数字集合: \" numbers-set))\n(println (str \"字母集合: \" letters-set))\n\n;; 线程宏示例\n(println \"\")\n(println \"⛓️ 线程宏示例 (Threading macro):\")\n(def result2 (->> (range 1 21)\n (filter #(= 0 (mod % 3)))\n (map #(str \"数字: \" %))\n (take 3)\n (clojure.string/join \" | \")))\n(println (str \"3的倍数前3个: \" result2))\n\n;; 原子和状态管理\n(println \"\")\n(println \"⚛️ 原子示例 (Atom example):\")\n(def counter (atom 0))\n(swap! counter inc)\n(swap! counter inc)\n(println (str \"计数器值: \" @counter))\n\n;; 解构示例\n(println \"\")\n(println \"🔍 解构示例 (Destructuring):\")\n(def coords [10 20])\n(let [[x y] coords]\n (println (str \"坐标 x: \" x \", y: \" y)))\n\n;; 递归示例\n(println \"\")\n(println \"🔄 递归示例 (Recursion):\")\n(defn fibonacci [n]\n (if (<= n 1)\n n\n (+ (fibonacci (- n 1)) (fibonacci (- n 2)))))\n\n(def fib-5 (fibonacci 5))\n(println (str \"斐波那契数列第5项: \" fib-5))\n\n;; 宏示例\n(println \"\")\n(println \"🎪 宏示例 (Macro example):\")\n(defmacro when-positive [num & body]\n `(when (pos? ~num)\n ~@body))\n\n(when-positive 5\n (println \"数字是正数!\")\n (println \"执行宏体内容\"))\n\n(println \"\")\n(println \"🎯 CodeForge Clojure 代码执行完成!\")\n(println \"🎯 CodeForge Clojure execution completed!\")\n(println \"\")\n(println \"感谢使用 CodeForge 代码执行环境! 🚀\")\n(println \"Thank you for using CodeForge! 🚀\")",
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(|| "clojure".to_string())
53+
}
54+
}

src-tauri/src/plugins/manager.rs

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
1-
use super::{
2-
LanguagePlugin, PluginConfig, go::GoPlugin, nodejs::NodeJSPlugin, python2::Python2Plugin,
3-
python3::Python3Plugin,
4-
};
1+
use super::{LanguagePlugin, PluginConfig};
2+
use crate::plugins::clojure::ClojurePlugin;
3+
use crate::plugins::go::GoPlugin;
54
use crate::plugins::java::JavaPlugin;
65
use crate::plugins::kotlin::KotlinPlugin;
6+
use crate::plugins::nodejs::NodeJSPlugin;
7+
use crate::plugins::python2::Python2Plugin;
8+
use crate::plugins::python3::Python3Plugin;
79
use crate::plugins::rust::RustPlugin;
810
use crate::plugins::scala::ScalaPlugin;
911
use crate::plugins::shell::ShellPlugin;
@@ -28,6 +30,7 @@ impl PluginManager {
2830
plugins.insert("swift".to_string(), Box::new(SwiftPlugin));
2931
plugins.insert("scala".to_string(), Box::new(ScalaPlugin));
3032
plugins.insert("kotlin".to_string(), Box::new(KotlinPlugin));
33+
plugins.insert("clojure".to_string(), Box::new(ClojurePlugin));
3134

3235
Self { plugins }
3336
}

src-tauri/src/plugins/mod.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -340,6 +340,7 @@ pub trait LanguagePlugin: Send + Sync {
340340
}
341341

342342
// 重新导出子模块
343+
pub mod clojure;
343344
pub mod go;
344345
pub mod java;
345346
pub mod kotlin;

src/components/setting/Language.vue

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,10 @@
4646
<div class="font-bold">$filename</div>
4747
<div>执行的源文件或临时生成的文件</div>
4848
</div>
49+
<div class="flex text-sm font-medium text-gray-700 dark:text-gray-300 ml-1 space-x-4">
50+
<div class="font-bold">$classname</div>
51+
<div>执行的类名,如果没有则为空</div>
52+
</div>
4953
</div>
5054
</div>
5155

src/composables/useCodeMirrorEditor.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@ 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'
10-
import { kotlin } from '@codemirror/legacy-modes/mode/clike'
9+
import { kotlin, scala } from '@codemirror/legacy-modes/mode/clike'
10+
import { clojure } from '@codemirror/legacy-modes/mode/clojure'
1111
import {
1212
abcdef,
1313
abyss,
@@ -169,6 +169,8 @@ export function useCodeMirrorEditor(props: Props)
169169
return StreamLanguage.define(scala)
170170
case 'kotlin':
171171
return StreamLanguage.define(kotlin)
172+
case 'clojure':
173+
return StreamLanguage.define(clojure)
172174
default:
173175
return null
174176
}

0 commit comments

Comments
 (0)