一起写atom插件(2)——插件间的数据交互

来源:互联网 发布:淘宝买单机游戏 编辑:程序博客网 时间:2024/06/06 14:21

简介

atom插件之间是通过service交流的,我目前在写一个自动补全的插件,是依赖于facebook的hyperclick插件的,就以这个为例讲下插件间的数据交互。

学过android的童鞋应该都懂,这不就是provider吗。

声明service

声明service在package.json中用providedServices,具体的方法是带版本号的,

  "providedServices": {    "hyperclick.provider": {      "versions": {        "0.0.0": "getProvider"      }    }  },

getProvider方法返回的是一个hyperclick.provider的对象,代码分析:

  getProvider() {    return makeProvider(this.subscriptions)  },

makePrivoder我这里是返回的provider对象:

return {    providerName: "lp-js-hyperclick",    wordRegExp: /[$0-9\w]+/g,    getSuggestionForWord(      textEditor: TextEditor,      text: string,      range: AtomRange,    ) {      if (isJavascript(textEditor)) {        const info = cache.get(textEditor)        if (info.parseError) return        const buffer = textEditor.getBuffer()        const start = buffer.characterIndexForPosition(range.start)        const end = buffer.characterIndexForPosition(range.end)        const options = {          jumpToImport: atom.config.get("lp-js-hyperclick.jumpToImport"),        }        const suggestion = buildSuggestion(info, text, {          start,          end        }, options)        if (suggestion) {          return buildResult(textEditor, range, suggestion, false)        }      }    },  }

接收service

调用service在package.json中用consumedServices

 "consumedServices": {    "hyperclick.provider": {      "versions": {        "0.0.0": "addLegacyProvider"      }    },


版本对的上就可以接收了,注意这不是调用而是接收,接收的也是provider对象,

addLegacyProvider(    provider: HyperclickProvider | Array<HyperclickProvider>,  ): IDisposable {    return this.addProvider(      Array.isArray(provider)        ? provider.map(fixLegacyProvider)        : fixLegacyProvider(provider),    );  }

至此你应该非常清楚Atom插件间的数据交互了