VS Code 摸鱼插件开发小记

插件地址:

https://marketplace.visualstudio.com/items?itemName=bugbreeder.vscode-readhub
原文链接:

https://github.com/alex-yh99/vscode-readhub/blob/master/docs/develop-note.md


一、关于插件

在 VSCode 中快捷查阅科技动态、开发者资讯等 Readhub 内容,有效利用日常工作碎片时间,功能包含:

  • 展示 Readhub 各板块资讯及摘要信息

  • 支持 PC 本地浏览器访问资讯内容源站

  • 支持快速预览资讯全文

如对 JetBrains IDE(如 IntelliJ IDEA) 中使用 ReadHub 插件感兴趣,请访问 ReadHub IntelliJ Plugin

640?wx_fmt=png

二、VSCode 体验

随着 VSCode 生态的日益繁荣,作为 IntelliJ 粉终于坐不住了,以围观的姿态开始试用,慢慢到如今高呼真香。花了周末学习写了下插件,稍微记录一下开发过程。

最初作为文本编辑器写 Markdown,慢慢熟悉几个快捷键之后,开始用来做开发工具。用作开发的历程比预想顺利,记忆了一个类似 IntelliJ 的 Search Everywhere 的快捷键,并装上 VIM 插件感觉就够了。如果用户是个沉迷打磨工具的 Power User,插件市场有大把的玩具还可以拿来折腾。

VSCode 作为开发工具上,由于入职新厂时的全栈化转型,开始学写 React / Redux,这个过程切实体会到了 VSCode 的便利,各种示例项目 Git 签出之后 npm i && code .,就能直接看代码了。初学者之路,往往只是想看 API 用法示例,又不希望在 GitHub 页面上走读代码文本,VSCode 此时的轻量优势就体现出来了:打开项目不需要复杂的工程导入配置,基本够用的 Code IntelliSense,且首次加载的建索引过程很快。

640?wx_fmt=png

IntelliJ 的索引耗时,Java 程序员苦之久矣,社区有个 Nyan Progress bar 的插件,就是把进度条换成一只喵,为瞪眼等着索引建完的程序员减减压。因此 VSCode 的轻量特性,非常利于学习 + 试错的低代码场景,即随意打开 / 关闭多个项目,频繁地在项目间切换焦点(当然 IntelliJ 也有 Power-Save 模式,调 VM 参数也能做到类似的秒速启动,但还是要承认两者的竞争优势不同)

三、插件开发

动手写插件,主要是出于进一步了解 VSCode 扩展性和 API Framework 的考虑。选择资讯阅读插件场景,一方面场景比较经典,不论 Android、WebUI 框架的学习示例项目中,除了写 Hello World、ToDo List,就是写一个 ListView 了。另一方面比较喜欢无码科技出品的 ReadHub,之前也在 IntelliJ 上做了一个 ReadHub 插件,这次迁移到 VSCode 很多接口调用等等逻辑也就直接从 Kotlin 硬翻译到 TypeScript 了。

插件技术体系涉及到插件生命周期管理、UI 定制、网络请求、配置持久化等等,基本参考几篇官方文档和示例项目,就能写出大概了,代码详见 vscode-readhub

  • 项目脚手架 

    https://code.visualstudio.com/api/get-started/your-first-extension

  • VSCode UI 组件介绍及扩展点 

    https://code.visualstudio.com/api/extension-capabilities/extending-workbench

  • TreeView 详细介绍,包括事件注册、数据绑定 

    https://code.visualstudio.com/api/extension-guides/tree-view

  • Command 定义 

    https://code.visualstudio.com/api/extension-guides/command

  • Configuration API 

    https://code.visualstudio.com/api/references/contribution-points#contributes.configuration

  • 测试 

    https://code.visualstudio.com/api/working-with-extensions/testing-extension

四、开发备忘

1. 语言方面

TypeScript 现学现用,不过由于 Google / SO 上问题和解答都很多,基本没有太多阻塞的问题;一些零散的点记录:

  1. TypeScript 枚举类,如何添加方法以及自定义构造函数?似乎只能定义一个类,然后用静态成员变量代替枚举类型

    // Invalid
    enum Category {
    TOPIC('topic'), NEWS('news')
    constructor(nameKey: string) {
    }
    }

    // Workaround
    class Category {
    public static TOPIC = new Category("topic");
    public static NEWS = new Category("news");
    constructor(public nameKey: string = "") { }
    }
  2. StrickNullChecks 可以让 IDE 更好做空检查,不过没有类似 Kotlin 的 Safe calls (?.),代码出现了不少强制非空断言 (!.),比如 a?.b?.c 如果不想啰嗦 a && a.b && a.b.c || undefined 只好冒险写 a!.b!.c. 在 JSON 反序列化中和写测试用例时碰到。这里有个 Proposal,目前在 Stage3

  3. 联合类型(Union Types)private myDate: Date | undefined 在 Nullable 变量的类型声明比较方便

  4. TypeScript 类型断言只是编译时的,没有运行时类型检查;所以 Type casting 之后访问对象属性时,还要检查一下

2. 框架感受

  1. VSCode 的 UI 扩展能力实在是太有限,或者说太克制了。比如一个 TreeView,无法定制 Renderer,这导致基本上所有插件使用 TreeView 做出来的视图都差不多一个样

  2. WebView 很便利,至少比使用 JavaFX WebView 和 Swing 组件交互简单很多;复杂插件交互可以考虑用 WebView 实现

  3. 涉及并发或重度计算的场景,可能需要剥离出插件逻辑来实现了;目前看到 VSC Extension 主要关注的是 UI 和 Language 层面的扩展,复杂的任务集成型场景可能受限于框架能力

五、Azure DevOps 尝试

试了一下 Azure Pipelines 做 CI,体验也是很顺畅,Azure 注册直接用 GitHub Account,创建 Organization 并导入 GitHub 工程。如果包含了 .azure-pipelines.yml 可以智能识别模板,并且有 YAML Live Editor 直接编辑及触发 Job.\

640?wx_fmt=png

CI 效率不错,Azure DevOps 的页面设计个人还是比较喜欢的,视觉链路非常清晰,不像很多面向开发者的产品把一堆有的没的都展示出来。

640?wx_fmt=png


六、题外

有 Azure DevOps + GitHub 的加持,VSCode Online 似乎有着一统未来云端编程界面的趋势。目前看起来能打的只有 JetBrains + Google 的组合了,什么时候 JetBrains 能丢弃 TeamCity、Upsource 等明显掉队且追赶无望的 PaaS 业务,把 IntelliJ Platform 搬到到云端,同时和 GCP 深度合作、把整个 JVM 生态的开发工具链云化,估计才能有跟微软一较高下的可能吧。

JetBrains 起家于2000年左右给 JBuilder 做插件,彼时叫 IntelliJ Renamer,那时候「重构」Refactor 一词刚被 Martin Fowler 提出没多久,还算是个 Buzzword,跟今天程序员言必称 FaaS、Serverless 化一样。JBuilder 是 Borland 搞的 Java IDE,今天的高龄程序员们在校用的 Turbo C++ 同是这家公司出品的。

之后风云变幻,Borland 掉队,传奇人物 Anders Hejlsberg 转投微软主导了 C# 和今天的 TypeScript(P.S. 推荐图书《Borland 传奇》);整个历史进程 JetBrains 是亲历者,而今天有点历史重演的感觉。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/313933.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

9月数据库排行:Microsoft SQL Server分数罕见下滑

DB-Engines 数据库流行度排行榜 9 月更新已发布,排名前二十如下:明显能看出来,整体排名和上个月的保持一致。而上个月出现分数下跌的 PostgreSQL 和 MongoDB 终于“回归正道”,分数有了稍微的上升。与上个月相比,Postg…

Exceptionless使用介绍

一.Exceptionless介绍Exceptionless专注于.net平台提供实时错误和日志报告。主要包括:错误通知、智能分组异常、详细错误报告堆栈跟踪、支持离线、UI查看重要错误和确定优先级、仪表板上的统计信息和趋势、对异常标记为已修复,监视回归、将事件标记为关键…

Net Core DocXCore 实现word模板导出

实际工作中,往往有这样的需求,需要导出word,还有各种各样的样式,于是有了word模板导出。实现以下几个需求:1、表单导出2、表格导出3、表单表格混合导出4、实际用例测试解决方案:实现是基于NET Core 2.1 &am…

密钥分离,.Net程序猿不再背锅

引言互联网每隔一段时间就会爆出 【某程序猿在代码托管平台上传了公司机密配置信息,导致公司核心数据被黑客获取或修改】, 一茬又一茬背锅侠层出不穷。拯救自我软件工程理论早以加粗字体给出 经典原则:Never store production passwords or o…

Chrome让人失望,是时候转到Firefox或Edge?

我们曾报道过谷歌正在移除 Chrome 的关闭其他选项卡,这引起很多用户的讨论,很多用户表现出对 Chrome 浏览器的失望。而在国外,也有很多人认为谷歌这项修改使 Chrome 变得越来越臃肿。还有前段时间,谷歌在 Chrome 76 中隐藏了 “ht…

我认真写下9段如翔一般的代码,只为等你来品鉴

溪源 | 长沙.NET技术社区开篇我们总是很容易就能写出满足某个特定功能的代码,却很难写出优雅代码。又最欣赏那些优雅的代码,因为优雅代码更能体现一个开发者的积累。就像写一篇散文,有的就像初学者不得其门而入,遣词造句都非常困难…

「标签管理」用数据管理思维去管理你的日常电子化资料、文件、笔记等

最近一时兴起,研究了一些文件管理的方法论和笔记管理类的知识,自己想到一些不错的方法及落地方案,可能对一部分朋友来说,这些方法和工具的落地会有一些共鸣,故简单给大家做一下分享。跨界应用:数据表结构应…

Java之JMS

一:JMS简介   JMS即Java消息服务(Java Message Service),是一个Java平台定义的关于面向消息中间件的API,用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信。JMS是一个与具体平台无…

程序员过关斩将--更加优雅的Token认证方式JWT

点击上方“蓝字”带你去看小星星菜菜,上次你讲的cookie和session认证方式,我这次面试果然遇到了结果怎么样?结果面试官问我还有没有更好的方式?看来你又挂了别说了,伤心呀。到底还有没有更好的方式呢?你猜&…

Java之JMX

JMX,即Java Management Extensions,Java管理扩展。是一个为应用程序、设备、系统等植入管理功能的框架。   JMX提供了一种简单、基础的方法,用来管理应用、设置、服务等资源。由于JMX是动态的,你可以使用JMX技术来监控和管理处于…

[NewLife.XCode]分表分库(百亿级大数据存储)

NewLife.XCode是一个有15年历史的开源数据中间件,支持netcore/net45/net40,由新生命团队(2002~2019)开发完成并维护至今,以下简称XCode。整个系列教程会大量结合示例代码和运行日志来进行深入分析,蕴含多年开发经验于其中&#xf…

你的技术债还了吗?

什么是技术债?技术债是由沃德坎宁安在1992年提出,指我们在软件架构或代码编写过程中有意无意地做了错误的决策。随着时间的累积,这种错误会越来越多,就像背负了很多债务一样。技术债的危害技术债同财务债一样,是有利息…

拿 C# 搞函数式编程

最近闲下来了&#xff0c;准备出一个 C# 搞 FP 的合集。本合集所有代码均以 C# 8 为示例。可能你说&#xff0c;为什么要这么做呢&#xff1f;回答&#xff1a;为了好玩。另外&#xff0c;意义党们请 gun cu ke&#xff01;C# 有委托&#xff0c;而且有 Func<> 和 Action…

CNCF发布K8s项目历程报告,35k贡献者有你吗?

云原生计算基金会 CNCF 首次发布了 Kubernetes 项目历程报告。Kubernetes 托管于 CNCF&#xff0c;它是目前使用最广泛的容器编排平台&#xff0c;通常被称为“云端 Linux”&#xff0c;CNCF 介绍此报告旨在客观地评估 Kubernetes 项目的状态以及 CNCF 如何影响 Kubernetes 的发…

API 和 SPI

简介&#xff1a; API&#xff1a;Application Programming Interface应用程序接口 SPI&#xff1a;Service Provider Interface服务商提供接口 JDK中有描述&#xff0c; the API is the description of classes/interfaces/methods/… that you call and use to achieve a go…

编程语言这一年

最近开源中国&#xff08;OSCHINA&#xff09;在庆祝 11 周年生日&#xff0c;编辑部借着这个机会梳理了一下这一年来我们追过的那些开源界/开发界的热点新闻&#xff0c;算作一个阶段性小结。&#xff08;其实只有 9 个月&#xff5e;&#xff09;开源中国是目前国内为数不多深…

使用Elastic APM监控你的.NET Core应用

前言在应用实际的运维过程中&#xff0c;我们需要更多的日志和监控来让我们对自己的应用程序的运行状况有一个全方位的了解。然而对于大部分开发者而言&#xff0c;平时大家所关注的更多的是如何更优雅的实现业务&#xff0c;或者是如何让应用的响应速度更快等等与编码相关的技…

ASP.NET Core结合Nacos来完成配置管理和服务发现

前言今年4月份的时候&#xff0c;和平台组的同事一起调研了一下Nacos&#xff0c;也就在那个时候写了.net core版本的非官方版的SDK。虽然公司内部由于某些原因最后没有真正的用起来&#xff0c;但很多人还是挺看好的。在和镇汐大大沟通后&#xff0c;决定写一篇博客简单介绍一…

Java 时间处理

时区、冬令时和夏令时、时间戳 时间戳 距离一个标准参照时间经过的秒数&#xff08;毫秒数&#xff09; 有两个常用参照时间&#xff1a; 1970-01-01 00:00:00 应用最广泛的时间戳参照点2001-01-01 00:00:00 常被苹果系统使用 注意&#xff1a;以上时间节点皆采用UTC的标准时…

试试这个Excel知识测验,得分超过80分算你赢

大家可能都知道&#xff0c;全世界使用Excel的用户超过了10亿。Excel的知识真所谓是博大精深&#xff0c;并且还很有趣味。我最近编写了一个Excel小工具&#xff0c;可以让大家可以在Excel里面进行各种知识小测验&#xff0c;并且与全世界的高手一比高低。这个小工具&#xff0…