编辑器、补全与悬停#
网页和 VS Code 通过共享语言分析层理解 .lay 与 .lcss。分析不执行用户代码,也不加载字体、公式或渲染引擎。
网页工作区#
切换“完整源码”即可编辑。Ctrl+Space 请求函数、方法、参数、预定义变量、单位、类名和部件选择器补全;悬停参数查看含义、单位及默认值;Ctrl+Shift+Space 查看调用签名,F12 跳转到定义。旧参数诊断提供改名修复。.lcss 与模块、CSV、JSON 在文件标签间切换,共同影响预览。
渲染仍使用独立 Worker,250ms 防抖,输入法组合期间暂停。编辑内容、主题修改和历史仅在当前页内存中,刷新、恢复或从前进后退缓存恢复页面时回到原始源码。Python/Notebook 源码只读。
补全按键与调用说明#
Tab 接受选中的补全候选,Enter 换行。没有候选时,Tab 缩进,Shift+Tab 取消缩进;方向键选择候选,Esc 关闭提示,Ctrl+Space 主动请求补全。按 Esc 后在两秒内按 Tab,可用键盘离开编辑器。输入法组合输入保留正常确认行为。
输入时保留候选列表及所选项详情,无论候选是一条还是多条。完整调用提示只在按 Ctrl+Shift+Space 时显示;悬停函数或参数名也可查看说明,普通输入或移动光标不会自动弹出完整调用提示。调用提示依次显示方法用途与返回结果、高亮当前参数的签名,以及该参数的含义、类型、单位、默认值和示例。长签名可点击展开。候选详情和悬停说明正确显示 Markdown;小屏把候选说明放到列表下方。
通过库作者文档注释,可为自己的函数、参数及导出变量提供同样的帮助。
VS Code#
安装 LayMesh 扩展或平台 VSIX 后即可使用;Windows x64、Linux x64 安装包内置引擎,无需 Python、Rust 或 npm,Remote SSH 安装包匹配远程宿主。变量悬停显示推断类型,Shift+F12 查找整个工作区的引用,F2 安全重命名;未保存内容优先。显式导入别名在本地重命名,导出改名同步更新导入源名和未起别名的使用。代码不完整或名称冲突时拒绝重命名。下述命令用于源码开发者构建安装包。
在仓库根目录运行:
python scripts/build-editors.pypython scripts/package-editor.py --output /tmp/laymesh-language.vsixcode --install-extension /tmp/laymesh-language.vsix扩展源码位于 extensions/vscode。在 VS Code 中使用扩展开发宿主打开该目录,或将本地打包的 VSIX 安装到编辑器。语言服务通过 LSP 提供补全、悬停、签名、诊断、定义跳转和旧参数修复;只读取本地模块与样式文件,不执行源码。
扩展尊重 VS Code 的用户快捷键;Tab 默认可以接受选中的建议。扩展不再以 (、, 或 = 自动触发完整参数提示;可按 Ctrl+Shift+Space 主动请求,或悬停代码查看说明。若希望这两种语言也使用 Enter 换行,可添加以下语言专属设置:
{ "[laymesh]": { "editor.acceptSuggestionOnEnter": "off" }, "[lcss]": { "editor.acceptSuggestionOnEnter": "off" }}提示语言#
网页提示跟随当前页面语言;VS Code 默认跟随其显示语言。函数名、参数名、类型名及补全插入的代码不翻译。补全详情、悬停、调用说明、相关文档链接和文档注释警告使用共享语言选择规则。
在 VS Code 设置中搜索 LayMesh: Language,或写入:
{ "laymesh.language": "auto"}可选 auto、zh-CN、en。设置立即影响后续提示和文档注释警告,不需要关闭文件,也不会丢失未保存内容。auto 使用编辑器提供的界面语言:中文语言标签使用简体中文,英文及其他尚未翻译的语言使用英文。不根据运行语言服务器的操作系统语言猜测。
库作者可用 @lang 多语言注释提供对应版本;没有翻译的说明显示原文,不进行自动翻译。
其他 IDE 的 LSP 接入#
构建后的服务器支持标准输入输出,与 VS Code 无关。以下命令从仓库根目录启动;其他目录需配置服务器文件的绝对路径:
laymesh lsp --stdio客户端可在 LSP initialize 请求中发送 locale(界面语言),并通过 initializationOptions 设置启动时的偏好:
{ "locale": "en", "initializationOptions": { "language": "zh-CN" }}上面是初始化参数片段,并非完整请求。若客户端未传语言,默认英文。未提供图形设置页的客户端可使用上述初始化选项。
支持 workspace/configuration 的客户端应返回 laymesh 配置节,例如 {"language":"en"}。配置修改后发送 workspace/didChangeConfiguration;不支持配置读取的客户端可直接发送通知参数:
{ "settings": { "laymesh": { "language": "en" } }}配置中的有效 language 优先于初始化选项,包括 auto;删除该设置后回到初始化选项。auto 再读取初始化时的 locale。修改仅通过初始化选项传递的配置,需要重启语言服务器;IDE 本身更改显示语言时,按该 IDE 的重启要求处理。
服务器按各功能的客户端能力分别返回 Markdown 或纯文本;未声明 Markdown 支持时返回纯文本。调用提示在支持位置区间时提供参数区间,否则提供参数文本。实际弹窗外观和快捷键由 IDE 决定。
颜色选择器#
VS Code 和网页在静态颜色旁显示可编辑色块。支持 HEX、RGB、HSV、OKLCH 与透明度;超出 sRGB 的颜色显示映射提示,源码中的原始通道仍保留。静态识别不执行文档或加载字体,动态表达式不提供色块。
网页点击色块,在其下方 6px 打开约 500px 宽的非模态选色器;下方空间不足时翻到上方,窄屏改为上下排列,滚动时跟随色块。HEX 输入、颜色预览及源码输出格式位于同一行;输出格式默认沿用原源码,与 RGB/HSV/OKLCH 通道页签独立。
二维饱和度/明度区域、右侧明度条、下方彩虹色相条和通道滑条均可拖动。百分比通道以百分数显示,写回时使用 DSL 的 0–1 范围;透明度滑条与预览使用棋盘背景。圆点、预览、HEX、通道数值和渐变在同一帧同步更新,拖动不写源码、不调用渲染引擎。
点击选色器外部或按 Esc 会提交最后输入并关闭;色块离开视口也执行相同流程。一次会话只产生一次源码替换,关闭后在编辑器按 Ctrl+Z 撤销,Ctrl+Shift+Z 重做。无实际修改时不创建撤销记录。未完成的 HEX 或非法通道保留在输入框中并阻止关闭,请先修正。文档同时发生变化时拒绝覆盖并显示提示,再次关闭可退出这次过期选色,保留文档已有修改;切换色块前先完成上一会话,再按最新文档确定新范围。
VS Code 的“LayMesh: 编辑颜色”命令继续打开原有多色空间面板:点击应用写回一次,取消或关闭保持源码。网页的关闭提交行为不改变 VS Code 的交互。
workflow#
本流程的完整源码与可执行验证文件列在功能覆盖清单。组合使用时请遵循本页的输入条件与限制。
参数值提示与流畅本地预览#
anchor= 补全九点名称和 self.;旧 start/end 用于线端点,plot_* 用于图表。具名与位置参数中的选项默认插入无引号变量,引号内补全保留字符串。悬停 round 只显示 round: string = "round";悬停 start_cap 解释 butt/round/square 及继承 line_cap 的默认行为。用户变量仍可作为表达式候选。
网页在输入事件中完成必要的本地颜色计算,只按动画帧合并整套界面的 DOM 提交。隐藏颜色空间按需计算,透明度修改复用已有颜色结果;RGB 和 HSV 滑条使用分段 sRGB 渐变,OKLCH 渐变保留色域映射精度。拖动期间控件身份与焦点保持稳定,渐变无需等待停顿。关闭时经 Rust 校验和格式化执行一次可撤销替换,非法输入与并发文档编辑均不会覆盖源码。
VS Code 图形预览#
预览器支持中文和英文。laymesh.language 默认 "auto" 跟随 VS Code,可设为 "en" 使用英文或 "zh-CN" 使用中文;已打开的预览立即切换文字,保留视图,不触发编译。命令名称与设置说明跟随 VS Code 显示语言;原生编译器的具体错误和图形文字保留原文。
已保存的 .lay 文件可通过编辑器右上角按钮、右键菜单或“LayMesh: 打开预览”在右侧打开实时预览。每个入口单独保留预览;编辑后默认 250 ms 刷新,未保存的模块、LCSS 和文本数据同样生效,图片与字体等本地依赖变化也触发更新。预览需要受信任的工作区,并由独立 Rust 进程渲染。
标尺与画布 X/Y 坐标跟随 canvas(unit=...),像素使用 layout_dpi 换算。鼠标进入绘图区时额外显示全部命名数据轴;支持线性、log、symlog、反向和断轴,断轴空隙显示“—”。极坐标显示 θ/r,中心不显示角度;雷达图靠近辐条时显示该维度数值。
Ctrl/⌘+滚轮围绕鼠标缩放,空格+拖动或中键平移;工具栏提供刷新、适应窗口、100%、缩放和标尺开关。100% 按布局像素显示。编译错误保留上一张图并标记过期,点击错误跳转源码。设置 laymesh.preview.debounceMs、laymesh.preview.renderTimeoutMs 和 laymesh.preview.showRulers 可调整刷新、超时及标尺默认状态。
在 .lay 编辑器执行 LayMesh:导出图形,或点击预览的 导出,选择格式、DPI、编码参数和目标文件。使用当前未保存的入口和已打开导入文件,远程窗口在扩展宿主保存文件。导出格式与编码参数