syntax-parser icon indicating copy to clipboard operation
syntax-parser copied to clipboard

SQL 语句前面存在空白行时,错误提示未能在正确的位置显示

Open whinc opened this issue 4 years ago • 1 comments

当 SQL 语句前面存在空白行时,解析结果中的 error.suggestions.token 为null,导致无法正确提示发生错误的位置,现象如下: image

解析结果如下:

{
  "success": false,
  "ast": null,
  "cursorKeyPath": [],
  "nextMatchings": [
    {
      "type": "string",
      "value": "UPDATE"
    },
    {
      "type": "string",
      "value": "set"
    },
    {
      "type": "string",
      "value": "insert"
    },
    {
      "type": "string",
      "value": "create"
    },
    {
      "type": "string",
      "value": "select"
    }
  ],
  "error": {
    "suggestions": [
      {
        "type": "string",
        "value": "select"
      },
      {
        "type": "string",
        "value": "create"
      },
      {
        "type": "string",
        "value": "insert"
      },
      {
        "type": "string",
        "value": "set"
      },
      {
        "type": "string",
        "value": "UPDATE"
      }
    ],
    "token": null,
    "reason": "incomplete"
  },
  "debugInfo": {
    "tokens": [
      {
        "type": "word",
        "value": "selec",
        "position": [
          2,
          6
        ]
      }
    ],
    "callVisiterCount": 38,
    "costs": {
      "lexer": 0,
      "parser": 0
    }
  }
}

Demo 中关于错误提示位置的处理: https://github.com/ascoders/syntax-parser/blob/5818f52f7dbdcef610d2600aa1fb04b4a9e55fb7/src/demo/monaco-plugin/index.ts#L60-L72

期望结果: 未完整的语句,error.suggestion.token 能给出错误位置的token,如{type: "string", value: "selec", position: [1, 6]}

whinc avatar Apr 17 '20 07:04 whinc

debugInfo 中有这个未完成语句的 token 信息,用这个信息可以设置正确的错误提示位置,但是这个是 debugInfo,担心依赖该字段会导致后续升级 break。

image

whinc avatar Apr 17 '20 07:04 whinc