Hayden

Results 59 comments of Hayden

抱歉,这暂时不在我们的计划之内,如果你需要的话,可以自行下载源码编译。

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/)上看到的报错信息和位置,与你所提供的报错信息并不一致: ![image](https://github.com/DTStack/dt-sql-parser/assets/58289241/b0a7570b-73fe-45bc-b969-7a6119e35a7f) 图中显示的报错信息相对更加准确。 另外,我在 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...