Hayden
Hayden
@dependabot rebase
@dependabot rebase
抱歉,这暂时不在我们的计划之内,如果你需要的话,可以自行下载源码编译。
Sorry, it is not currently supported, but theoretically you can access all nodes on ParserTree through the ANTLR4Visitor.
Closed because it hasn't been active for too long.
+ https://www.npmjs.com/package/util + https://www.npmjs.com/package/assert 实际上在浏览器中使用 dt-sql-parser 需要这两个 polyfills 是因为 dt-sql-parser 依赖的 antlr4 运行时 [antlr4ts ](https://github.com/tunnelvisionlabs/antlr4ts) 使用了这些 NodeJS API, 目前我们正在计划从 antlr4ts 切换到 antr4ng, 切换后,则不再需要这些冗余的 polyfills 了,但这还需要一些时间,相关进展可以在这里看到 https://github.com/DTStack/dt-sql-parser/issues/260 和 https://github.com/DTStack/dt-sql-parser/issues/261。 目前关于 antlr4ng...
> 在使用语法校验功能时,有些疑问,报错信息中只有column和line信息,并没有index信息 此前,关于报错位置,我们一般用于在编辑器中添加对应的错误标记,对于编辑器(如 monaco editor) 一般只需要行列号就够了,所以并没有加上错误位置的索引信息(即 index),如果你确实有需要,可以考虑新增 index 信息。 > 其中'ASs'是错误的,我想准确定位到是'ASs'的索引位置,因为报错信息中“mismatched input 'CASE' expecting ”并不准确 我在 [monaco-sql-langauges](https://github.com/DTStack/monaco-sql-languages) 的[在线预览网站](https://dtstack.github.io/monaco-sql-languages/)上看到的报错信息和位置,与你所提供的报错信息并不一致:  图中显示的报错信息相对更加准确。 另外,我在 dt-sql-parser 的单元测试中测试的结果与 moanco-sql-languages 的在线预览网站的结果相同: 你可以检查一下你的代码是否存在其他问题,如果仍然无法解决,请提供最小的能复现此问题的demo仓库,让我可以复现并解决此问题。
@wanglufei561 首先,感谢你的 demo。 > 这里的括号丢失的问题,按照直觉,会认为【错误位置】应当出现在"("处 这很难做到,即使是在vscode 中编写 javascript/typescipt 代码时,如果括号不成对,那么飘红位置也在结尾位置,如下图所示: 这主要是因为语法解析器的策略导致的,在遇到错误时,它只能告诉我们它遇到了错误,并且提供信息表明它认为后面期望得到一个什么。并且有的时候,它提供的期望信息也可能不准(不符合开发者的期望)。 > 所以关于validate功能提供的【错误位置】信息是否准确,或者这里我需要对报错信息进行二次处理? dt-sql-parser 中收集报错信息,实际上是依赖于 antlr4 的 errorListener, dt-sql-parser 队 errorListener 接收到的异常错了一些简单的处理。目前看起来这个错误处理部分过于粗糙了,以你提供的demo为例,我认为 `endColumn` 的值不太准确。 除此之外,message 部分也可以进行优化,根据不同的异常类型,生成不同的 message。
> @HaydenOrz 谢谢你的答疑,所以dt-sql-parser后续会针对【错误信息】进行优化是吗?请问大概哪个版本会加入这部分的优化 错误信息优化已经在我们的计划中了,目前该优化优先级并不是最高,错误信息优化完成并发布后我将会在这个 issue 下面通知你。 关于此项优化,我们准备参照 https://github.com/mike-lischke/antlr4ng/blob/master/tests/benchmarks/support/MySQLErrorListener.ts 目前你也可以参照此文件创建 ErrorListener 来自定义错误信息。 ```js const mysql = new MySQL(); const parser = mysql.createParser(sql); // 创建 antlr4 mysql parser parser.removeErrorListeners(); // 移除内置的 ErrorListener...
#272