Skip to content
New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

这个提示好像有点怪怪的,应该和语法文件的实现有关 #161

Open
openai0229 opened this issue Nov 28, 2024 · 7 comments
Open
Assignees

Comments

@openai0229
Copy link

image

这里看到写了一个简单的查询语句,但是我没有写分号,这一块就已经开始提示create这个关键字了,这个应该和语法文件的规则有关系吧,语法文件中似乎并没有强制需要分号作为语句的结束符,所以他就识别到新的sql开始去了,所以就会有这个关键字了对吗?

这个我也不是很清楚是不是一个bug,希望可以讨论一下

@liuxy0551
Copy link
Collaborator

dt-sql-parser 将语句识别为一个 singleStatement 也就是一条完整语句时,会自动断句,并不强制要求写分号。但在部分场景中,会依赖分号进行切分,比如正在进行的两个 PR:

@openai0229
Copy link
Author

好的,谢谢,我去看看

@openai0229
Copy link
Author

image
这个情况应该怎么优化呢,其实我这里明确有一个点了,应该不是新的语句的开始了, 这个会不会和那个PREFERRED_RULES有关系?其实我也不太懂PREFERRED_RULES的作用,好像加了他之后,收集到的token似乎在某些场景下会准确一下

@JackWang032
Copy link
Collaborator

image 这个情况应该怎么优化呢,其实我这里明确有一个点了,应该不是新的语句的开始了, 这个会不会和那个PREFERRED_RULES有关系?其实我也不太懂PREFERRED_RULES的作用,好像加了他之后,收集到的token似乎在某些场景下会准确一下

preferredRules 主要是用来收集光标所处于哪个上下文的,如添加了Rule_createTableName, 当正在输入建表表名时,则会在收集结果中candidates.rules存在该规则。
输入点后会出现很多无关的关键字,是因为该处的lexerid, 而id由用户自定义输入IdentifiernonReserved非保留关键字组成,所以提示的无关关键字都是由于匹配了非保留关键字造成的,这与所有语言的语法文件有关,我们有计划在明年剔除这些多余关键字。

如果要临时解决,可以尝试根据输入上下文自行剔除,可以参考c3中如何处理上下文信息的 antlr4-c3

image

@openai0229
Copy link
Author

其实我现在的做法遇到需要用户自定义的id规则就全部直接不返回任何提示

@openai0229
Copy link
Author

openai0229 commented Dec 9, 2024

image 这个情况应该怎么优化呢,其实我这里明确有一个点了,应该不是新的语句的开始了, 这个会不会和那个PREFERRED_RULES有关系?其实我也不太懂PREFERRED_RULES的作用,好像加了他之后,收集到的token似乎在某些场景下会准确一下

其实这里我想到一个做法就是,就是判断当前光标所处的token是不是"." , 如果是的话,就不返回关键字的候选提示,应该没有关键字通过"."相连的情况

@JackWang032
Copy link
Collaborator

后续预期支持严格模式,必须以分号结尾作为语句结束标记

# for free to join this conversation on GitHub. Already have an account? # to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants