如何获取窗口上下文,以便可以在 resharper 插件中创建 NavigationOptions

Posted

技术标签:

【中文标题】如何获取窗口上下文,以便可以在 resharper 插件中创建 NavigationOptions【英文标题】:How do I get a window context so I can create NavigationOptions in a resharper plugin 【发布时间】:2015-07-01 17:38:07 【问题描述】:

我有一个navigation plugin,我想扩展它以支持上下文导航。除了 NavigationOptions 实例之外,我拥有所需的一切。在我的INavigateFromHereProvider 中,我使用IDataContext 调用,因此可以使用NavigationOptions.FromDataContext 方法从中创建NavigationOptions。伟大的。

在我的上下文操作中,我不会被IDataContext 调用,而是在构建过程中得到ICSharpContextActionDataProvider。我可以从中获取我的IDeclaredElement 以作为我导航决策的基础,但我不确定如何创建我的NavigationOptions 实例。感觉我应该使用NavigationOptions.FromWindowContext,但我似乎需要PopupWindowContextSource,我不知道从哪里获得其中之一。

那么我在哪里可以获得相关的PopupWindowContextSource 来创建我的NavigationOptions

【问题讨论】:

【参考方案1】:

啊,找到了答案(嗯,一个答案)。

我可以用这个:

 var popupWindowContextSource = solution.GetComponent<MainWindowPopupWindowContext>().Source;

我不确定这是否最适合使用,但它似乎有效。

【讨论】:

【参考方案2】:

使用NavigationOptions.FromDataContext 可能会更好。这将从您已经拥有的IDataContext 中提取一个窗口上下文。这应该为您提供一个弹出窗口上下文,该上下文适合您被调用的位置 - 锚定到编辑器窗口或树视图或其他任何内容。使用 MainWindowPopupContext 将为您提供一个基于 Visual Studio 主窗口的上下文,它可能会正常工作,但可能不是最相关的。

【讨论】:

我现在没有IDataContext。我正在添加对通过 Alt-Enter(上下文操作)进行导航的支持,因此在我的 IsAvailable(IUserDataHolder cache) 方法中,我只能访问构造函数中给出的 ICSharpContextActionDataProvider 就是在这个方法中我想得到一个popupwindowcontextsource 糟糕。误读了问题。我认为使用MainWindowPopupContext 很好,那么,或者您甚至可以创建自己的派生自PopupWindowContext

以上是关于如何获取窗口上下文,以便可以在 resharper 插件中创建 NavigationOptions的主要内容,如果未能解决你的问题,请参考以下文章

Resharper 运行配置

如何在 resharper 插件中提供带有 datacontext 类型的智能感知?

如何区分消息是来自 ReSharper 还是 Visual Studio

犰狳的自定义 natvis 文件仅适用于 resharper

如何防止 ReSharper 在我的 MSpec 字段之间插入空行?

如何获取特定 JetBrains.ReSharper.Psi.IDeclaredElement 的文件名和行号?