# weapp-support-plugin **Repository Path**: xeroin/weapp-support-plugin ## Basic Information - **Project Name**: weapp-support-plugin - **Description**: 为webstorm添加开发微信小程序相关支持的插件。因为对于IDEA插件开发刚刚入门,所以尝试了只实现了最简单的一些功能,需要IDEA插件开发的高手加入来完善这一插件,微信小程序官方的ide我反正是不爱用的。 - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 3 - **Forks**: 0 - **Created**: 2018-12-25 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # WeApp Support Plugin 微信小程序支持插件 想要实现一个微信小程序的JetBrain IDE插件,但是经过尝试发现写BNF的Grammar对我来说实在有点困 难了,短时间之内没有可能全面的学习这个东东,近期工作上的事情也还比较忙,只好将这个项目暂时搁置了。 JetBrains的Plugin开发虽然官方有很多文档,但是工程太庞大了,而且这几天学习研究过程中似乎搜索的 结论都提到无法对现有的语言支持做扩展。其实微信小程序的支持,只需要对xml(wxml),css(wxss), js做一些扩展就可以用了,可惜的是没有发现支持的扩展路径。这两天尝试写wxml的bnf语法文件,已经有点 焦头烂额的感觉。 IDEA官方文档中,对于语言支持插件开发的文档"Part VII - Custom Languages"包括两大部分: [介绍框架](http://www.jetbrains.org/intellij/sdk/docs/reference_guide/custom_language_support.html) [具体的教程](http://www.jetbrains.org/intellij/sdk/docs/tutorials/custom_language_support_tutorial.html) ## 更新日记 ### 2018.12.18 今天发现jetbrains还有一个社区的js库定义,专门辅助完善一些js框架的类库定义。可以在`Preferences | Languages & Frameworks | JavaScript | Libraries`设置中添加一些library,而且这个设置界面 直接提供了下载功能,列举了git上该开源项目相关的定义,其中找到三个可能和微信小程序有关的 * weapp-api * wegame-api * wexin-app git上的开源项目地址: [DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped) 关于ide的javascript library介绍: [How WebStorm Works: Completion for JavaScript Libraries](https://blog.jetbrains.com/webstorm/2014/07/how-webstorm-works-completion-for-javascript-libraries/) [Configuring JavaScript Libraries](https://www.jetbrains.com/help/idea/configuring-javascript-libraries.html) 文2中注明了 > This feature is only supported in the Ultimate edition. 目前在webstorm中测试过,三个library都可以用,但是weapp-api定义没有wexin-app定义全面 ### 2018.12.19 终于找到了一个合适的方案来把wexin-app的api添加到plugin,直接添加到javascript的支持 首先要从IDEA的plugin目录中找到JavascriptLanguage,从其子目录lib中找到 JavaScriptLanguage.jar,最好是将这个jar包添加到sdk的library中去,这样才能够在开发插件 的时候使用 在`plugin.xml`中加入 ``` JavaScript ... ``` * depends不是必须的,这个会使得插件只能在支持Javascript的平台上使用 * extensions的声明,是为javascript的`extensionPoint:predefinedLibraryProvider`添加实现 #### 弹窗显示内容 跟怒官方文档的提示,可以在插件代码中使用来弹出对话框,显示一些信息,另外用logger来输出的log暂时没找到显示窗口 > Messages.showInfoMessage("Message", "Title"); #### 将文件注册为已知类型 如果是在FileTypeFactory的createFileTypes中使用FileTypeManager的getFileTypeByExtension会导致循环依 赖的异常,从而使得ide无法启动,需要在/User/Library/Application Support/xxxxx/中找到plugin并删除方可正 常启动ide。 目前将Wxml文件注册为Html文件,做法是在WxmlFileTypeFactory中直接使用HtmlFileType返回(因为HtmlFileType 的构造函数都不是public/protected的,故而无法继承),而wxss文件则通过将WxssFileType继承CssFileType来解决 以后可以抽时间继续完善wxml的更多的语法支持,比如 > * *