You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VS Code语言服务器Code Lens调用peekLocations命令报错排查

问题分析与解决方案

你遇到的argument does not match one of these constraints错误,核心原因是Code Lens返回的editor.action.peekLocations命令参数不符合VS Code的严格类型校验要求。以下是常见问题点及排查方向:

常见参数错误类型

1. URI格式不合法

peekLocations要求所有文件路径必须是标准的file://协议URI字符串,不能直接使用本地路径(比如/home/user/file.ml)。如果JSON中uri字段是本地路径而非URI格式,会直接触发类型校验失败。

2. Position/Range结构错误

  • position和range中的line、character必须是非负整数,不能是负数或字符串类型。
  • range必须包含start和end两个子对象,每个子对象必须同时有line和character字段,不能遗漏或拼写错误(比如把line写成lin)。

3. 参数顺序或结构错误

peekLocations的参数支持两种传递方式,但都需要严格符合规范:

  • 数组形式:参数顺序必须是 [目标文件URI, 当前触发位置Position, 要展示的Location数组, 可选PeekOptions],顺序混乱会导致类型不匹配。
  • 对象形式:必须包含uri、position、locations三个必填字段,字段名必须完全匹配,不能出现大小写错误或拼写错误。

4. Locations数组格式错误

locations必须是Location对象的数组,不能是单个对象或其他类型。每个Location对象必须包含uri和range两个必填字段,缺一不可。

正确参数示例

以下是符合要求的Code Lens命令JSON片段:

{
  "command": "editor.action.peekLocations",
  "title": "Peek Definition",
  "arguments": [
    "file:///home/user/project/target.ml",
    { "line": 8, "character": 5 },
    [
      {
        "uri": "file:///home/user/project/target.ml",
        "range": {
          "start": { "line": 2, "character": 0 },
          "end": { "line": 2, "character": 12 }
        }
      }
    ]
  ]
}

排查建议

  1. 检查JSON响应中arguments的每个字段类型,确保所有数值类型都是整数、字符串类型符合URI格式。
  2. 对比VS Code官方定义的PeekLocationsArgs结构,确认参数的完整性和正确性。
  3. 尝试简化参数(比如只传递最基础的uri、position和单个Location),逐步排查是哪个参数导致的错误。

内容的提问来源于stack exchange,提问作者Li-yao Xia

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 23:42:35