mpv/uosc Language Server为 mpv 与 uosc 配置文件提供完整语言服务的 VS Code 扩展 + 独立 stdio LSP 服务器。 简介
语言服务器核心不依赖 VS Code API,是一个可被任意 LSP 客户端(Neovim、Zed 等)拉起的独立 stdio 进程;服务器从不执行配置内容、Lua 或 shell 命令,元数据随包内置,运行期不访问网络、不调用本机 mpv。 功能特性
|
| 设置 | 默认值 | 说明 |
|---|---|---|
mpvUosc.completion.triggerOnTyping |
true |
输入时自动触发补全;关闭后仅手动触发(如 Ctrl+Space)。启动时注册,更改后需重启语言服务器 |
mpvUosc.hover.enabled |
true |
关闭后悬停请求返回空 |
mpvUosc.formatting.enabled |
true |
格式化总开关 |
mpvUosc.formatting.mpv / .input / .uosc |
true |
分语言格式化开关 |
mpvUosc.diagnostics.unknownOption |
warning |
mpv.unknown-option 诊断级别(warning / hint / off) |
mpvUosc.diagnostics.unknownCommand |
warning |
input.unknown-command 诊断级别 |
mpvUosc.diagnostics.duplicateBinding |
hint |
input.duplicate-binding 诊断级别 |
mpvUosc.diagnostics.formatWhitespace |
hint |
format.whitespace 诊断级别 |
mpvUosc.diagnostics.deprecatedOption |
hint |
mpv.deprecated-option 诊断级别 |
mpvUosc.diagnostics.includeMissing |
warning |
mpv.include-missing 诊断级别 |
mpvUosc.diagnostics.keyNormalization |
warning |
input.key-normalization 诊断级别 |
mpvUosc.diagnostics.unknownScriptBinding |
hint |
input.unknown-script-binding 诊断级别 |
mpvUosc.diagnostics.unknownScriptOpt |
hint |
mpv.unknown-script-opt 诊断级别 |
mpvUosc.include.maxDepth |
8 |
include 嵌套深度上限(1–32),超出的 include 报 mpv.include-missing |
mpvUosc.metadata.version |
auto |
元数据集选择:auto / builtin / 精确版本号 |
mpvUosc.metadata.liveMpv |
false |
激活时由客户端运行本机 mpv(--no-config --list-options / --input-cmdlist)采集最新元数据并合并;服务器本身不执行任何命令 |
mpvUosc.externalSchemas |
[] |
第三方脚本 script-opts 的 JSON schema 文件路径列表 |
mpvUosc.recognition |
见下 | 自定义文件识别规则 |
文件识别(mpvUosc.recognition)
默认按文件名识别 mpv.conf / input.conf / uosc.conf。通过 mpvUosc.recognition 可扩展识别规则:
filenames:按 basename(小写)匹配到对应 kind,例如把include=引用的profiles.conf识别为 mpv;extensions:按 basename 后缀(大小写不敏感)匹配到对应 kind,例如{"mpv": [".mpv"]},默认{};directories:URI 路径中完整匹配某个目录段(大小写不敏感)且文件以.conf结尾时,回退识别为 mpv——例如~/.config/mpv/下的任意.conf;目录段要求精确相等,my-mpv-stuff不会匹配mpv。默认mpv/.mpv(遗留配置目录,mpv 至今仍会读取)/portable_config;includeInheritance:被include=引用的文件(出现在任一已打开 mpv 文档的 include 图中)自动继承父文档 kind,无需额外配置即可获得完整 LSP 支持。
已知盲区:$MPV_HOME 或 --config-dir 指向任意目录名时无法按目录段推断,请用 filenames/extensions 显式识别这类目录中的配置。
"mpvUosc.recognition": {
"filenames": {
"mpv": ["mpv.conf", "profiles.conf"],
"input": ["input.conf"],
"uosc": ["uosc.conf"]
},
"extensions": {},
"directories": ["mpv", ".mpv", "portable_config"],
"includeInheritance": true
}
外部脚本 schema(mpvUosc.externalSchemas)
第三方 mpv Lua 脚本(sponsorblock、autoload、thumbnail 等)有自己的 script-opts。通过 mpvUosc.externalSchemas 设置注册 JSON schema 文件后,这些脚本的 script-opts-<script>-<key> 也能获得补全、悬停与未知选项诊断。相对路径基于工作区根目录解析,绝对路径原样使用。schema 文件为单个对象或对象数组,每项形如 { script, options: [{ name, valueKind, description?, defaultValue? }] },其中 valueKind 取 boolean / enum / number / string。例如:
[
{
"script": "sponsorblock",
"options": [
{ "name": "server_address", "valueKind": "string", "description": "SponsorBlock 服务器地址", "defaultValue": "https://sponsor.ajay.app" },
{ "name": "skip_categories", "valueKind": "string", "description": "自动跳过的分类" }
]
}
]
开发
要求 Node.js 22.13+ 与 VS Code 1.125+。
npm install
npm test
npm run check
npm run build
npm run package
npm run generate:metadata # 从本机 mpv 重新生成选项/命令覆盖层(需要已安装 mpv)
npm run generate:uosc-metadata # 从上游 uosc 默认配置重新生成 uosc 配置项元数据(需要网络)
注意:npm test 包含一个拉起 dist/server.js 的 stdio 协议集成测试,干净检出后需先 npm run build 再 npm test。
仓库还有元数据漂移检测 CI:定时比对本机 mpv 元数据产物,漂移时自动开 Issue(见 docs/03-metadata-drift.md)。
文档索引
更多设计与集成文档见 docs/README.md,包括设计规格、迭代历史、分发流程与各编辑器接入指南。
贡献
欢迎提交 Issue 与 Pull Request,开始之前请先阅读 CONTRIBUTING.md。
安全
发现安全漏洞请通过私密渠道报告,详见 SECURITY.md。