-
Notifications
You must be signed in to change notification settings - Fork 3
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
讨论一下 ultisnips parser 和 extends 功能 #19
Comments
关于正则解析的问题: 你所说的状态机解析方式, 我在一开始设计Vsnips时就考虑过这个问题, 看到你改了VISUAL的那个测试用例, 请问是有什么和预期不一致的行为吗? |
关于extend的功能: 这个功能应该是比较重要且紧急的功能了, 这部分代码你怎么改都可以, 你本地测试了. 另外看到你说要检查语言更新时的策略, 动态的监听snip文件, 我之前也考虑过, 既然说道到检查snip文件, 你是否有考虑过当运行网页版VSCode时的可能会遇到的问题, |
感谢老哥这么用心哈 |
那个 VISUAL 的测试用例,snippet body 有两个 tabstop 都是 VISUAL,然后原先的解析只出来了第一个,第二个就只有 |
Web 版我倒是没有考虑过,但是应该也不难,因为我觉着 |
我们用的fs模块是node的fs模块, 在浏览器中是不能用的吧 |
可以的,web vscode 这里重新实现一个 runtime 就行,fs 的接口也就那么些,实际的持久化可能是 indexedDb 之类的。 |
目前的 snippet parse 基于正则 global search,实现 ultisnips 的一些语法解析稍微有点麻烦。比较容易的解析思路是:
extends
/priority
等其他关键词snippet
, 开始进入 “snippet 文本解析”状态endsnippet
,结束 “snippet 解析”状态,将读取到的完整 snippet 文本放入更细的 snippet body 解析函数中不知道之后你有没有实现的思路,我在这里继续自荐一下 @unisnips/ultisnips ,基本按照 UltiSnips 用 ts 重写了一遍,基础 parsing 部分不会有什么分歧,可以去 demo 站试一下解析结果。然后 Vsnips 内相关的模板函数改写是在此之后的过程,不会受到影响。
这个是我目前在用的本地分支,包括两个新的 commit。
@unisnips/ultisnips
进行,同时修复了之前parse.spec.ts
里一个解析结果的错误extends 功能
关于 extends 功能,也是一个想要探讨的点。
我目前在的实现方式是在 SnippetManager 里记录好继承关系,然后
getSnippets
的时候再不断向上查询和添加。这样主要是考虑到之后会在用户改变.snippets
文件的时候重新解析并更新对应 language 的 Snippet。假如继承链为 'a -> b -> c' ,箭头方向表示 b 继承 a 。那么在 a 语言文件有更新的时候,只需要更新 a 的记录,b 和 c 的记录不需要改变。
The text was updated successfully, but these errors were encountered: