前一阵收到 JetBrains 用研团队的邮件,做一个关于插件开发和插件市场的开发者访谈。在 Calendly 上选了时间,还是挺有意思的交流过程;然后收获了一份 JetBrains 全家桶的一年订阅 License :-)
提前了五分钟左右打开了会议链接,在 Google Meet 的入会页面发现主持人 Burtsev 已到位了,很快另外两位 JetBrains 的同事也入会。Burtsev 说可以叫他 Kesha,并讲了会议会被录制等事项,接下来就是一个小时左右的英语听说练习了。大致的问题和沟通内容:
- Brief Introduction & Past Experience with Plugin Development
- Introduction to personal plugins
- (Follow up questions) How frequently do you update the plugin, and what kinds of updates do you make? Who is the plugin built for?
- Why did you begin building IntelliJ plugins?
- What motivated you to publish on the marketplace?
- On which other platforms have you built plugins?
- What are the differences between the VS Code marketplace, and what are the challenges/problems with marketplace/plugin development?
- Can you describe your workflow for developing an IntelliJ plugin?
- Have you encountered any problems related to the updating and uploading process?
- Are you familiar with the Organization in the marketplace and JetBrains admin page?
- Have you updated the information about your plugins?
- Questions/opinions related to paid plugins
下午会议前,稍微准备了下提纲,考虑到可能会被问到的两个问题,感谢 ChatGPT 帮忙润色英文
What JetBrains Plugins have you built
I have released 3 free and open-sourced plugins on the JetBrains Marketplace.
The most popular one of these is "ReadHub", which is a Chinese tech News Reader within the IntelliJ IDE. It is a UI plugin that adds a ToolWindow to the IDE, it also support news search and remembering your read status. It could also open up a Web Browser view to display full article.
I created this plugin with my personal needs in mind. It helps me to relax by roughly reading articles, when I'm stuck on a problem in the IDE or waiting for a build to complete. I can avoid a heavy context switch by not having to exit the IDE completely. I even added a VIM mode for easy navigation within the list view.
I didn't put in much effort to promote the plugin, but it has gradually gained some popularity among Chinese developers, also resulting in several dozens of stars on GitHub.
Another one is called "Awesome Kotlin". As you can probably tell from the name, the plugin reflects my passion for Kotlin. It displays the content from site called Awesome Kotlin, and users can search for Kotlin projects inside IDE based on various categories, topics, and more.
A plugin that I recently developed is called "StatisticsView," which enables the tracking of IDE actions and displays statistical data. For example, it shows the total number of times a file has been opened, as well as the last time it was opened. The logs that it gathers can also be used for data mining.
In addition to these plugins, I developed several IntelliJ plugins for internal developers while working at Alibaba Group and Tencent. Both companies have thousands of developers, and they also have various in-house development infrastructures. An IDE plugin that provides an integrated developer experience can greatly enhance productivity.
Some features
- Custom view and notifications for CI/CD pipelines & Code Review (similar to GitHub’s Pull Request capabilities, but connected to our in-house code hosting platform)
- Some pre-check hooks before VCS commit, which triggers static analysis directly inside the IDE. We use our own custom PMD rulesets
- Remote deployment & HotCode
- Some code inspections features for our internal development framework, such as analyzing outdated Maven dependencies for middleware
- Configuration as Code supports
- Some event tracking features
What are the biggest challenges for plugin development
Firstly, it is the discovery of extension points and available APIs of the IntelliJ Platform SDK. The IntelliJ Platform SDK has been well documented over the years. However, In my experience, I often need to search through the IntelliJ-CE codebase for usage examples. Enabling the internal mode and using the UI inspector helps with UI-related requirements, but for complex scenarios, I have to dive deep into the IntelliJ-CE codebases and try to understand how IntelliJ IDE implements similar features.
Another tough challenge is trying to identify what happened when users report crashing or sluggishness while using the plugin. It could be due to issues on the user's client side, but the plugin developers have very few diagnostics and logs that could provide assistance.
Starting a local development IDE instance is also resource-intensive. It can be difficult to prototype plugin features, and if I have limited time, it may discourage me from adding experimental features to the plugin.