我目前正在使用 ReSharper V8.1。我最近才开始使用 ReSharper,并对他们的 LiveTemplate 宏感兴趣。我想出了一个从常量返回 HotspotItems 列表的解决方案,类似于 ReSharper 的预定义宏“逗号分隔的值列表”。在该方法中,我采用模板参数的常量变量并对它们进行拆分字符串以提供 HotSpotItems 的集合。不幸的是,如果我在模板中多次使用宏,它就不起作用。下面是一个极端的 hack 工作,展示了我对 IMacroImplementation 的 HotspotItems 方法的实现。
我希望那里的某个人可能已经在这方面做了一些工作,并且可能提供他们如何实现 IMacroImplementation 的示例,该示例提供了来自常量的项目列表,并且还允许在单个模板中进行多种使用。谢谢你。
public override HotspotItems GetLookupItems(IHotspotContext context)
{
HotspotItems hotSpotItems = null;
foreach (var hotspot in context.HotspotSession.Hotspots)
{
if (hotspot.Expression != null && ((MacroCallExpressionNew)hotspot.Expression).Definition is Macros.DisplayMultipleItems)
{
//hotspot.CurrentValue
var multiItems = ((MacroCallExpressionNew) hotspot.Expression).Definition as DisplayMultipleItems;
if (!multiItems.ItemSet)
{
var expression = hotspot.Expression as MacroCallExpressionNew;
IMacroParameterValueNew baseValue = expression.Parameters[0].GetValue(context.SessionContext.Solution.GetLifetime(), context.HotspotSession);
string templateValue = baseValue.GetValue();
multiItems.ItemSet = true;
if (!string.IsNullOrEmpty(templateValue) && templateValue.Split(',').Any())
{
var lookupItems = templateValue.Split(',').Select(param => new TextLookupItem(param)).Cast<ILookupItem>().ToList();
if (hotSpotItems == null)
hotSpotItems = new HotspotItems(lookupItems);
else
{
foreach (var item in lookupItems)
{
hotSpotItems.Items.Add(item);
}
}
}
}
}
}
return hotSpotItems;
}