如何为js创造更好的语法提示环境?

最近遇到个问题,发现在vsc中写js的时候,语法高亮不是很满意,没有明确的语法颜色,观察了十几种颜色主题,发现每种主题的完成度都不相同,一般的主题对js的支持不是很好,一眼看去基本就一两种颜色.其中做的较好的有one monakai系列等

主题换来换去,突然衍生了一个对颜色主题的工作原理的思考.js和python都是弱类型语言,也就是没有变量类型声明,那么语法高亮不是很好处理,特别是函数的形参

 

(以下是实测+脑测)

vsc的语法提示引擎处理首次var声明和表达式

 

未经声明直接使用变量,无任何提示

 

 

存在其他未声明变量,提示所有变量名(除了第一个变量)

 

 存在其他已声明变量,提示所有变量名

 

 已声明,显示声明值(计算后)所属数据类型的属性方法(包装类).如下,a的语法提示类型为string包装类

 

先声明后赋值,显示赋值后数据类型语法提示.先赋值后声明结果一样

 

多次声明/赋值(综合起来分析,这种应该是属于第一次声明时就赋值的情况),a的语法提示为第一次声明+赋值的类型,后续赋值或声明无效

 

对照上一个,这个就有趣了.多次声明/赋值,但是第一次声明时不赋值.结果完全不同,vsc会计算所有的声明/赋值语句,以最终的数据类型作为语法提示.如下为最终值string包装类

 

再次确认以上情形.对比以下情形.区别在于第一次声明时是否赋值.差异很大,几乎是两个极端

这就有意思了,难道说我们声明变量时不要赋值?毕竟这样才能得到最新数据类型的语法提示

不过一般来说,我们使用一个变量时也很少改变其数据类型,一般就是保持一个确定的数据类型

除非刻意的使用一个变量存放各种类型的临时数据,这时候仅声明不赋值比较好

 

 通过以上测试,明确了以下几点:

1.变量在第一次声明时就赋值,使用此数据类型作为语法提示(好像无所谓,随便用吧)

2.变量在第一次声明时不赋值,使用最新值的数据类型作为语法提示(然并卵)

 

 

 

上面的几种情况,说到底其实没什么问题,了解即可

看下面,估计应该有插件能解决,可惜我不知道.难道vsc不知道内置方法的返回类型?有点奇怪

 

此外,如果函数的形参是对象,在函数中又要引用其属性方法,怎么办?

 

最近才意识到这个问题.难怪一直觉得vsc的语法提示怪怪的,似有似无

如果谁知道怎么解决,麻烦告诉我

 

暂时的解决办法:

1.先写完代码,然后拷贝到函数里

2.想办法给形参一个默认值,用完再去掉

 

最后,希望有人看到能指点下

 

2018-11-01更新:

找到了js中的类型声明

https://blog.csdn.net/supergao222/article/details/80658525

posted @ 2018-10-29 01:00  alexzshl  阅读(618)  评论(0编辑  收藏  举报