hollowtree / vscode-vue-snippets

A Vue.js 2 Snippets Extension for VSCode
https://marketplace.visualstudio.com/items?itemName=hollowtree.vue-snippets
96 stars 30 forks source link

Full support of offical vue api #16

Closed beeplin closed 6 years ago

beeplin commented 6 years ago

@hollowtree I love this vscode extension while found some of vue API's are not supported. Here I make lots of more snippets for offical vue/vue-router/vuex API. Hope you like it. 😄

hollowtree commented 6 years ago

@beeplin hi,我看了下你提交的 snippets,有些是我以前没有添加的,比如说 html.json 里的 include、exclude等等,javascript.json里你也添加了大量有用的 description以及一些新的 snippets,这些都是很有用的。但同时,你也删掉了html.json里的 v-html、v-show、v-if 等等,我有些疑惑删除这些 snippets 的原因。

beeplin commented 6 years ago

我回忆了一下,当时我做这个pr的定位是建议这个包成为官方vetur 插件的snippets补充。vetur插件基本所有人都会装,里面已经提供了一些基本的 snippets,比如你提到的 v-html、v-show、v-if等:

image

你看这个图里面,上半部分黄色的是 vetur 提供的,下半部白色的是你提供的。这里面有不少重复, 发生重复的时候反而选择起来不方便,所以我从 html.json 里面把大部分重复的删掉了。一个例外是 v-for,vetur 提供的 v-for 太弱了,所以我保留了 v-for 并增加了增强版的 v-for-with-key。

同样,你原来的 vue.json 里面提供的 snippets,目前官方 vetur 都已经覆盖到了,所以我觉得没有必要保留了。

我的改进主要在javascript.json里面,包括:

  1. 按照最新的 vue vue-router vuex vue-ssr文档的 api 描述原文,原样copy了所有的 api description,这样 snippets基本就可以当作文档来看了,实时查看详细 api

  2. 在你的基础上补全了和 route 相关的 this.$router.xxx this.$route.xxx

  3. 增加了几个我感觉比较常用的特殊 snippets:method-with-comma,watcher-with-handler。实际输入时只需要写mwc wwh之类缩写就可以。

  4. 因为 data props method 这几个最常用的 snippets 在 vetur 里面已经提供了,但是 vetur 里面的很弱,就是补全单词而已,基本不会用到,但敲 data 的时候老是先出来 vetur 的,所以我另外写了 vdata vprops vmethod 三个,输入这三个就不需要再按上下键选择咱们自己的。

  5. 所有 vue api snippets 的 prefix 都改成了 api 完整原名。比如你原来用 VueConfigWarnHandler,我改成了Vue.config.warnHandler,你原来用 vmWatch, 我改成了 $vm.watch。输入起来反正都是自动匹配,没区别,而从 snippets 列表里进行选择的时候看得清晰一点。

  6. 你的第一条 import 其实不属于 vue 的内容,其他 es6 snippets插件已经提供了,所以我删掉了。

beeplin commented 6 years ago

上个月本来提完 pr 就打算写一个 comment 解释一下的,当时没发现你写中文,我自己写英文也费劲,后来一忙就忘了。。。抱歉哈。

hollowtree commented 6 years ago

@beeplin 你说的删掉与 vetur 重复的 snippets,这是一种思路,不过这样会增加不少后面维护这个 snippets 插件的工作量,或许你可以试下在 settings.json 中添加{ "editor.snippetSuggestions": "top" }

关于你提的几点:

  1. 挺有用的
  2. vue 相关的库的 snippets 我确实很久没有对照文档更新了,刚刚看到另外一个 issue 也提到了这点。
  3. 有用
  4. 有一定作用吧,vmethods 那个 prefix 你漏掉了m 好像。
  5. 有一定的历史原因,很久以前这个插件第一版的时候,prefix 就是 Vue.config.warnHandler 这种格式的,当时 vscode 对 prefix 里的 .$ 支持不够友好,所以改成了目前的这种,现在 vscode 对 prefix 的特殊字符的支持好像变好了。
  6. 之前感觉这个是极其常用的,所以加了进来。

关于你说的comment,我好像以前没太注意 github 的comment,刚刚才看到这个项目的几个 issues ,至于你提的这个pr,上周末看到的吧,说老实话,当时看到有点懵,增删的有点多,一眼也看不出来改了哪些东西,所以就没处理,拖到昨天比对了了下改了哪些才回复的你。

beeplin commented 6 years ago

你说的删掉与 vetur 重复的 snippets,这是一种思路,不过这样会增加不少后面维护这个 snippets 插件的工作量

其实哈,我觉得吧,最好的方式是咱们把这个repo变成 vetur 的一个pr,整合到 vetur里面去。随时根据官方文档的更新来更新 snippets,本身就应该是官方 vetur插件应该干的事儿,只是之前vetur在snippets方面特别不上心。。。。

beeplin commented 6 years ago

@hollowtree 我根据你之前提到的几点,重新定位了这个snippets,不再设想为vetur的补充,所以把html.json和vue.json都恢复回来了。jasavscript.json 除了修正了你提到的 vmethods 之外没有改动。

html.json的v-for增加了key,因为2.5版的vue已经强制要求v-for必须有key了,所以我觉得没有必要提供不含key的v-for了。另外增加了v-for-with-index,因为感觉要附加index的情况也挺多的。

你再看看,还有哪些地方需要调的,我继续改~

hollowtree commented 6 years ago

@beeplin 刚刚加了些东西,你拉下代码,合并下冲突。你修改的时候应该可以按F5调试了。对了,那些prefix 感觉还是改回不带特殊字符和空格的比较好,之前我说的原因5不太对,你可以试下,在我这边是这样的,比如说vm.$scopedSlots 这个prefix,必须键入以vmvm开头的,然后才有提示,直接输scopedSlots反而好像不会有提示。另外,最好把json文件里的注释去掉,虽然说vscode支持带注释的json,不过标准的json应该是不支持注释的。至于把文档都搬到 description 里,在预览snippet的时候,如果 description 特别多,预览区域会出现滚动条,由于 snippet 代码在预览区域的下方,反而有可能造成看不到 snippet 代码的情况。还有,Vue.next.tick 这个 prefix 不太对。如果方便的话,你邮件我下你的联系方式,细节有点多,讨论起来 issue 感觉还是不太方便。

hollowtree commented 6 years ago

对了,还有把 readme 同步补充一下