VS Code 扩展,为 YKit 脚本语言(.yk)提供语法高亮、代码片段与悬停文档。
功能特性
- 语法高亮:关键字、字符串(含
$"..."插值)、数字、注释、运算符、内建函数、方法调用、task名标识。 - 代码片段:
task/if/loop/retry/let/letref(新表达式形式let a = ref b;)/callref(调用点传引用)/ 复合赋值 / 文件 I/O / 数组 / 字典 /noexcept等常用模板。 - 悬停文档:将鼠标悬停在内建函数、方法、关键字上,查看用法、签名与示例。
YKit 语言概览
YKit 是一个面向自动化流水线的轻量级解释型脚本语言。语法贴近 C/JS,运行时极小。
关键字与控制流
- 声明:
let(含let alias = ref original;引用别名)、task(形参一律按值绑定,是否引用由调用点用ref决定) - 控制流:
if / elif / else、while、loop(N [, i])、retry(N [, i]) { ... success; / fail; }、break、continue、success/fail(仅 retry body 内)、return - 模块:
include "path";(运行到该语句时按当前basedir解析并执行另一份.yk) - 字面量:整数(
true/false即 1/0;支持下划线分组1_000_000、十六进制0xDEAD_BEEF、二进制0b1111_0000)、"plain string"、r"raw string"(不解释转义,适合路径与正则)、$"interpolated {var}"、数组[a, b]、字典{ "k": v }
ref 语义(已更新)
ref 现在只有两种用法,全部以表达式前缀的形式存在:
-
调用点传引用(最常用):
task set_to_8848(a, b, c) { a = 8848; } let k = 123; set_to_8848(ref k, k, k); // 仅第 1 个实参用 ref,task 内 `a = 8848` 会写回 k print(k); // 8848被调用方对形参一视同仁,形参声明里不写
ref——是否按引用完全由调用点决定。 -
引用别名(表达式形式):
let alias = ref original; // alias 与 original 共享存储 alias += 1; // 等价于 original += 1
旧版
let ref a = b;与task f(ref x)形参语法已不再支持;请改用上述新写法。
表达式与运算符
- 复合赋值:
+=、-=、*=、/=、%= - 比较:
==、!=、<、<=、>、>= - 逻辑:
&&、||、! - 索引:
a[i](数组下标 / map key)
文件操作 —— 立即执行
所有文件操作(copy / cut / delete / create / mkdir / write / append / read / exists / listdir)调用即落盘,每一步成功/失败立即可见,符合流水线脚本的执行直觉:
- 没有事务、没有回滚、没有
commit/flush; - 路径最后一段支持
*与?通配(如copy("src/*.dat", "build/")); - 失败时携带
path:line: error: ...退出;可选on_ok/on_fail回显字符串。
错误处理
assert(cond, message)—— 断言失败立即退出;error(message)—— 立即报错退出(一参,与文档保持一致);noexcept(expr)—— 在表达式范围内捕获runtime失败,失败返回0,否则返回表达式值。
内建函数(节选)
- 文件/路径:
copy / cut / delete / create / mkdir / write / append / read / exists / listdir / isfile / isdir / join / basename / dirname / extname / setbasedir / getbasedir - 字符串/类型:
format / toint / tostr / isnum / isstr / ismap / isarray / isref - 系统:
system / system_capture / getenv / setenv / input / wait(ms) / exit / now / random_int / uuid / argc / argv - 数学:
abs / min / max / clamp / gcd / pow / sqrt_int - OS / 进程探测:
os_name / os_arch / path_sep / line_sep / cwd / chdir / pid / hostname / username - 日志:
print / log_info / log_warn / log_error
方法调用
- 数组:
push / pop / len / empty / slice / find / remove / sort / reverse / join - 字符串:
split / trim / replace / contains / starts_with / ends_with - Map:
keys / values / contains
1.4.0 更新
- 新增 OS / 进程探测内建(9 项),让跨平台脚本无需再调
system_capture("uname")之类:os_name()→"windows"/"linux"/"macos"/"freebsd"/"unknown"os_arch()→"x86_64"/"x86"/"arm64"/"arm"/"unknown"path_sep()/line_sep()—— 跨平台路径与行尾符常量cwd()/chdir(dir)—— 进程级当前工作目录(注意区分getbasedir():后者是 yk 文件 builtin 解析相对路径的逻辑基准)pid()—— 当前进程 PIDhostname()—— 机器名username()—— 当前用户名
- 同步
tmLanguagebuiltins 列表、snippets(新增os_name/os_arch/path_sep/line_sep/cwd/chdir/pid/hostname/username)、hover文档。
1.3.0 更新
- 整数升级到 64 位:
int_t = long long。now()不再于 2038 年溢出;arr.len()/arr.find()/slice()等不再受 2^31 限制;toint()现支持完整 64bit 范围。 - 数字字面量增强:
- 下划线分组:
100_000_000、0xDEAD_BEEF、0b1111_0000(仅作分隔,不允许首尾或连续下划线) - 十六进制:
0xFF、0XFF - 二进制:
0b1010、0B1010
- 下划线分组:
- 原样字符串
r"...":内部不解释任何转义,适合 Windows 路径r"C:\Users\Tom\file.txt"与正则r"\d+\.\d+"。限制:不能含"字符(要含时改用普通字符串)。 - 新增数学内建:
abs / min / max / clamp / gcd / pow / sqrt_int,全部为整数版本,零<cmath>依赖以保持轻量化。min(...)/max(...)接受变长参数(≥ 1 个)pow(base, exp)exp 必须 ≥ 0,O(log exp) 二分快速幂;溢出按 64bit 自然回卷sqrt_int(x)牛顿迭代实现,向下取整
- 同步更新
tmLanguage(数字字面量分类、r-string scope)、snippets(新增rstr/abs/min/max/clamp/gcd/pow/sqrt_int)、hover文档。
1.2.2 更新
- 项目改名:
YYToolkit→YKit,源码扩展名.yykt→.yk,语言 idyytoolkit→ykit,TextMate scopesource.yytoolkit→source.ykit。 - 同步更新 hover、snippet、tmLanguage 中的 scope 命名与示例文件名。
- 新增
isref(variable):判断变量自身是否为 ref 绑定(如以ref x形式传入的形参);附带 snippet 与 hover。 - 插值字符串
$"..."升级:{...}内允许任意表达式(语义同format(fmt, ...)的语法糖)。
1.2.1 更新
ref语义同步:当前语言只支持ref作为表达式前缀——- 调用点:
f(ref x)(被调用方形参一律按值声明,由调用点决定是否传引用) - 引用别名(表达式形式):
let a = ref b; - 已废弃语法:
let ref a = b;、task f(ref x)(task 形参不再接受ref修饰)
- 调用点:
- 同步更新
task/let/refhover 文档与 README 示例。 - snippets:删除
taskref(已不支持);letref改为新表达式形式let a = ref b;;新增callref模板。
1.2.0 更新
- 将文件操作描述统一为"立即执行"(删除原"录制 + 退出时统一提交"的事务模型相关表述)。
- 修复
error()snippet:实际签名为error("message"),单参必填。 - 修复
noexceptsnippet:是表达式形式noexcept(expr),不是块。 - 修复
waitsnippet 的描述与参数名:单位是毫秒。 - 修复
formatsnippet 中多余的右花括号。 - 新增
ismap/isarray/isfile/isdir的 snippet 与 hover。 - 完善
retry/include/ref/$"..."插值字符串等关键特性的 hover 描述。 - README 重写:补全语言概览与内建函数清单。
关于 YKit
YKit 是一个轻量级的解释型脚本语言,专为自动化流水线设计。详见项目主页。
许可
MIT License