Skip to content
| Marketplace
Sign in
Visual Studio Code>Programming Languages>yscriptNew to Visual Studio Code? Get it now.
yscript

yscript

弈秋啊

|
5 installs
| (0) | Free
YScript 语言支持:语法高亮、LSP 智能补全、悬停文档、跳转定义、代码片段(网安专用脚本语言)
Installation
Launch VS Code Quick Open (Ctrl+P), paste the following command, and press enter.
Copied to clipboard
More Info

YScript VSCode 插件

为 YScript(网安专用脚本语言)提供 VSCode 完整支持:语法高亮、LSP 智能补全、悬停文档、跳转定义、代码片段。

当前适配 YScript 解释器 v0.1.5.3;VS Code 扩展包版本独立管理。扩展可识别并高亮 ysc.models / ysc.sum 项目依赖清单。

项目依赖清单

ysc.models 和 ysc.sum 使用独立的 yscmanifest 语法高亮,覆盖项目/依赖声明、版本、Git URL 与 h1: 校验值。依赖获取和同步由解释器命令 ysc mod get / ysc mod sync 执行。

YScript v0.1.5.3

  • package 只声明源文件所属包;多文件包的声明文件无需单独包含 func main(),避免库文件和测试文件的入口误报。
  • cli 支持 app.command() 子命令、自动转换 int / float / bool、choices 与数值范围校验、互斥参数组及 multi_option() 重复参数列表;同步命令行参数库文档与集成测试。
  • 泛型函数与泛型结构体支持类型参数、实参/字段类型推导、内建约束(any / number / ordered / comparable)和结构化接口约束;语法高亮支持泛型声明、类型参数/实参及约束,编辑器新增泛型函数、结构体与约束代码片段。
  • load 新增模块生命周期接口:load.install(path) 安装而不执行,load.start(path) 执行已安装模块,load.stop(path) 调用可选的模块级 stop(),load.uninstall(path) 必要时先停止再移除声明。
  • ysc doc 支持按函数名关联任意位置的文档块:@functionName HEAD 到 @functionName END 之间的 # 注释会覆盖就近注释;注解标记有专用语法高亮。

YScript v0.1.5.2

  • 识别 name <- expression 类型推断声明,提供语法诊断、变量符号/类型提示与自动补全。
  • 同步无符号整数类型提示、OCR 与顶层代码诊断。
  • 二进制命名空间补全新增 binary.FileCopy,支持大文件有界内存流式复制。
  • sys 命名空间补充跨平台进程、同步命令执行、文件句柄、内存映射、信号、CPU 特性等系统接口。
  • io 命名空间补充 Reader / Writer / Closer 契约、Pipe、TeeReader、MultiWriter、SectionReader、Discard / NopCloser、缓存流适配器与错误常量,方便流式处理与 sys 层桥接。
  • 补全缓冲流 API:Reader / Writer 的容量查询与 Reset、Peek / 回退 / 分隔读取 / 逐行读取、WriteTo / ReadFrom / Flush,合并 ReadWriter,以及支持行、词、字节、rune 分割和缓冲区配置的 Scanner。
  • 更新 package main 入口和函数代码片段说明。

load 命名空间补全和悬停文档覆盖全部接口。生命周期方法接收 YScript 源文件路径字符串:load.install(path) 解析、编译并注册模块,不执行初始化或顶层代码;load.start(path) 执行已安装模块的初始化和顶层代码;load.stop(path) 调用模块可选的 stop() 函数;load.uninstall(path) 在需要时先停止模块,再移除其声明。

兼容的既有热加载接口仍可使用:load.load(path) 加载模块并返回可调用的导出字典;源文件更新后调用 load.reload(path) 替换已加载模块;load.unload(path) 卸载模块并清空导出字典;load.loaded() 列出已加载路径。


功能

能力 说明
语法高亮 关键字、类型、内置函数、命名空间、函数调用与变量引用的语义高亮、文档注解标记、字符串插值、Shell 反引号、bytes 字面量、注释、数字、常量、Test 表达式、C/FFI 类型(struct:int32,double、clong/culong、ptr/cstring)
命名空间补全 输入命名空间名即可预览成员,ns. 后继续补全(含 io 缓冲流 / Scanner、c.、ffi.、lstd.、ocr. 与 load.);标准库注册表中的成员均提供悬停与签名帮助,选择函数会插入 ()
自动 import 检测「用了内置库却没 import」并给出警告;支持一键快速修复(Ctrl+.)与补全联动(输入 binary. 时列表首项即为「+ 添加 import"binary"」,选中即自动写入)
智能补全 关键字、类型、内置函数(250+)、函数调用括号与参数占位、warp/WaitGroup 成员、dict/list 方法、import 路径(标准库模块名 + 相对路径下的 .ys 文件/目录);子串匹配(输入 file 即可补出 io.read_file)
类型上下文补全 let x: 变量注解、函数参数与 struct 字段的 :、-> 返回类型、new、extends、is 处只提示类型名(内置类型 + 自定义/第三方结构体、枚举、接口),不再混入函数与关键字
结构体 / 枚举补全 对象. 补全结构体字段(含继承字段)与继承方法(Dog extends Animal 时 dog. 也可补出 speak()),支持 this. 与链式访问(pkt.ip.);Color. 补全枚举成员;Config{...} 字面量内补全尚未赋值的字段名;带类型注解的函数参数(func f(s: string))同样按类型补全成员,均带悬停说明与跳转定义
作用域感知补全 只提示当前可见的变量:排除其他函数的局部变量与光标之后才声明的变量;自定义变量/函数/参数排序优先于内置项
字符串插值补全 在 "${...}" 插值内补全可见变量(优先)与函数,如 println("hi ${us 可补出 user
悬停文档 关键字/类型/内置函数及标准库函数的中文说明和调用形式;缺少扩展内置详解的成员可跳转到标准库函数速查表
跳转定义 跳转到当前文件或第三方库的 func/let/const/struct/enum/interface 声明
文档符号 大纲视图中显示函数、变量、类型
诊断 插件内置 YScript 词法/语法检查、静态检查警告、括号未闭合、重复函数声明、顶层变量声明与函数外可执行语句检测、第三方导入函数同名冲突提示、敏感操作的 #!permit 权限提示;无需启动 ysc -c
自定义符号解析 当前文件和第三方库中的自定义函数、结构体方法支持补全、签名帮助、悬停和跳转定义;支持导入别名及相对路径库,并读取 @函数名 HEAD/END 文档块;同名函数候选不再按导入顺序误选
格式化 右键菜单、命令面板支持“YScript: 格式化文档”,通过 ysc fmt -t 使用与 CLI 一致的格式化器,并仅更新编辑器缓冲区
一键运行 编辑器标题栏 ▶ 按钮,通过 ysc 运行当前脚本
调试 左侧 YScript Debug 入口和 VS Code 原生 DAP:行/函数/条件断点、日志点、单步、变量/栈查看、表达式求值与修改、未捕获异常暂停、执行跟踪及 TCP attach
代码片段 60+ 网安场景模板

lstd. 补全和悬停覆盖白名单加载、名称/序号符号查找、签名绑定、调用、内存与回调接口。 安全策略和 ysc pkg -cgo 限制见 lstd 安全动态库调用指南。

代码片段速查

前缀 描述 前缀 描述
main / pkgmain main 函数 / 完整入口 ifile 检查文件存在
func / funcr 函数定义 idir 检查目录存在
genericfunc / genericstruct / genericconstraint 泛型函数、泛型结构体与约束 infer name <- value 类型推断声明
plnred / plngreen / plnyellow / plncyan 彩色 println cprint / cprintln color 库彩色输出
arrow 箭头函数 defer defer 延迟执行
if / ifelse / ifelif if 分支 drec defer+recover
fori / forc / forr / fore / forl / ford 索引 / C 风格 / 范围 / 集合 / 列表 / 字典循环 warp / wawait 并发线程
match 模式匹配(=> 分支) shell / sv Shell 命令
tern / stm / mret / wsel 三元 / struct 方法 / 多返回值 / sync.select warp / wawait 并发线程
st / stm struct/方法 bx / b64 bytes 字面量
en / iface enum/interface pscan / sscan 端口扫描
let / lett / const / ret / retn 变量声明 / 返回 pln / pf 输出
ifnil / iferr / raise / catchmatch nil / error 检查与异常处理 deferclose 延迟关闭资源
infer name <- value 类型推断声明 hsess / hform HTTP 会话 / 表单
hup / hdown HTTP 上传 / 下载 pf printf
imp import # / #* 注释
todo TODO

配置项

设置项 说明 默认值
yscript.server.path 自定义 LSP 可执行文件路径 ""
yscript.server.trace LSP 通信追踪级别 "off"
yscript.ysc.path 自定义 ysc 解释器可执行文件路径(留空自动查找) ""
yscript.format.tabSize 格式化缩进大小 4

命令

  • Reload Language YScript — 重启 YScript 语言服务器
  • YScript: Show Output — 打开服务器输出面板
  • YScript: Run (ysc) — 运行当前编辑的脚本(编辑器标题栏 ▶ 按钮)
  • YScript: 格式化文档 (Format Document) — 使用已配置的 ysc 格式化当前 .ys 文档

程序入口

可执行文件使用 package main 和 func main() 作为入口。package 用于标记当前声明文件所属的包;同一包可由多个文件组成,库声明文件无需各自声明 func main(),导入后即可调用其函数。func main() 只能声明在 package main 中。文件顶层可声明全局 let 变量和 const 常量(在 main() 前初始化);var 及其他执行语句应放入 main() 或其他函数中。插件语言服务器会在编辑时直接检查词法和常见语法错误,并提供自定义函数及方法的关联提示,不需要安装或启动 ysc -c 才能获得诊断。

package main
import ["ocr", "io"]

func main() {
  let image = io.read_bytes("sample.png")
  println(ocr.recognize(image))
}

func recognize_file(path) {
  return ocr.from_file(path, "eng", 6)
}

一键运行

在 .ys / .yscript 文件的编辑器标题栏点击 ▶ 按钮(或从命令面板执行 YScript: Run (ysc)),插件会先自动保存当前文件,再检查语言服务器提供的语法诊断;存在语法错误时会取消运行,否则在集成终端中调用 ysc 执行脚本。yscript.ysc.path、YSC_BIN 和 PATH 仅用于定位运行脚本所需的解释器。

插件按以下顺序定位 ysc 可执行文件:

  1. 设置 yscript.ysc.path(在设置界面或 settings.json 中指定解释器绝对路径)
  2. 环境变量 YSC_BIN(例如 export YSC_BIN=/usr/local/bin/ysc)
  3. PATH 中的 ysc

如果以上都找不到 ysc,插件会弹窗提示:可直接打开 GitHub 下载页(https://github.com/xiguayiqiu/YScript)下载安装,或点击"选择解释器路径"手动指定 ysc 文件(选择后自动写入全局设置 yscript.ysc.path)。

运行输出显示在名为 YScript Run 的集成终端中。

调试

点击左侧字母 Y 图标打开 YScript Debug,再点“调试当前文件”即可启动当前 .ys / .yscript 文件;启动后会自动显示 Debug Console。也可在行号边栏设置断点后按 F5。可在调试控制台求值、在 WATCH 面板跟踪表达式,并在 VARIABLES 中查看或修改变量。launch 配置也支持 stopOnEntry、traceLines 和 traceCalls。远程 attach 需要提供目标机上的 program 路径;目标机运行 ysc debug-adapter --listen=tcp:127.0.0.1:4711 后,在 VS Code 选择 YScript: Attach。详细能力和安全边界见调试器文档。

文件识别

自动识别 .ys 和 .yscript 文件。

文件图标(侧边栏 logo)

插件自带一套 YScript File Icons 文件图标主题,为 .ys / .yscript 文件在资源管理器侧边栏显示 YS logo。安装插件后需要手动启用(图标主题无法由插件自动切换):

  1. 打开命令面板(Ctrl+Shift+P),执行 Preferences: File Icon Theme;
  2. 选择 YScript File Icons。

也可以在 settings.json 中直接指定:

{
  "workbench.iconTheme": "yscript-icons"
}

未启用该主题时(例如使用默认 Seti 主题),.ys 文件仍会通过语言默认图标显示 YS logo。


维护:标准库成员数据从实现自动生成

命名空间成员表 server/src/ns_members.ts 由脚本从解释器源码生成,不要手工编辑:

cd yscript && python3 tools/gen_ns_members.py > ../vscode/server/src/ns_members.ts
cd ../vscode && npm run compile      # 或 ./node_modules/.bin/tsc -p server/tsconfig.json

提取来源:

  1. MakeNS("ns", map[string]value.BuiltinFunc{...}) —— 各命名空间注册表
  2. buildCFuncNames() —— c 模块(成员动态拼装,静态扫描抓不到)

这样改了 internal/std/*.go 后重新生成即可,不会再出现「插件漏收录新函数」。

新增代码片段前缀:c call、c callback、c header bind、c parse header、 ffi struct、ffi alloc、c variadic、raw pcap、worker。


自动 import 的行为

YScript 的标准库必须先 import 才能用。LSP 会自动帮你补上:

1. 自动导入:在代码中使用未导入的内置模块成员(如 binary.ReadFile(...))后, 插件会自动在 package 声明后添加对应的 import ["binary"],已有导入列表则会自动合并, 无需手动维护标准库导入。

2. 诊断与快速修复:自动导入未能应用时,该行会出现黄色波浪线,例如

未导入模块 "binary",请先写 import ["binary"](或用快速修复自动添加)

import ["string"] 之后实际用的是 strings.xxx; error 同理对应 import ["error"] 和 errors.xxx。

光标放在波浪线处按 Ctrl+.(或 Cmd+.),也可手动选择「添加 import "binary"」。 支持三种插入风格,且不会重复添加:

现状 结果
import [ … ] 多行列表 插进列表,缩进跟随已有项
import ["c"] 单行列表 追加为 import ["c", "binary"]
import "c" 单行 另起一行 import "binary"
完全没有 import 插到 package 行之后

3. 补全联动:输入 binary. 时,若未导入,补全列表首项仍提供 + 添加 import "binary",按回车选中即自动写入 import 语句。

自动检测适用于插件已知的标准库命名空间;第三方脚本库的路径无法仅凭成员名推断, 仍需在 import [...] 中显式声明。

显式导入带别名的项目脚本库后,插件会分析导入的 .ys 文件并提供成员补全、悬停文档、 签名帮助与跳转定义。例如 import ["../lib/text/encoding_utils" as enc] 后输入 enc., 可补全 base64_round_trip、hex_round_trip、decode_url_or、html_escape、 encoding_utils_encode_as 等库函数;函数的 @name HEAD 文档注解会显示在悬停中。

误报已排除:字符串内、注释内、局部变量遮蔽(let binary = 1)、 成员访问(foo.binary)均不会触发。

核心逻辑在 server/src/imports.ts(parseImports / findUnimportedUses / buildImportEdit),命名空间数据来自自动生成的 ns_members.ts。

#!permit 权限提示

编辑器会识别常见的文件读写、外部命令和网络调用。没有 #!permit 时显示信息提示,说明 YScript 默认不启用沙箱;已有策略但未声明该调用类别时显示警告,因为运行时可能拒绝调用。诊断快速修复会在文件开头(保留 shebang)插入 #!permit <类别>;此声明授权该类别的全部目标,建议按需改为具体路径或命令规则。提示属于静态分析,动态路径、io.open 模式以及命令行 --sandbox 覆盖规则仍以运行时为准。

  • Contact us
  • Jobs
  • Privacy
  • Manage cookies
  • Terms of use
  • Trademarks
  • Your Privacy Choices
  • Consumer Health Privacy
© 2026 Microsoft