提交 f7446f70 编写于 作者: C CyrusNajmabadi

Allow properties to be passed with DefinitionItems for FAR.

上级 d9254bc1
......@@ -20,10 +20,11 @@ internal sealed class DocumentLocationDefinitionItem : DefinitionItem
ImmutableArray<TaggedText> displayParts,
ImmutableArray<TaggedText> nameDisplayParts,
ImmutableArray<DocumentSpan> sourceSpans,
ImmutableDictionary<string, string> properties,
bool displayIfNoReferences)
: base(tags, displayParts, nameDisplayParts,
ImmutableArray.Create(new TaggedText(TextTags.Text, sourceSpans[0].Document.Project.Name)),
sourceSpans, displayIfNoReferences)
ImmutableArray.Create(new TaggedText(TextTags.Text, sourceSpans[0].Document.Project.Name)),
sourceSpans, properties, displayIfNoReferences)
{
}
......
......@@ -19,10 +19,11 @@ private sealed class NonNavigatingDefinitionItem : DefinitionItem
ImmutableArray<string> tags,
ImmutableArray<TaggedText> displayParts,
ImmutableArray<TaggedText> originationParts,
ImmutableDictionary<string, string> properties,
bool displayIfNoReferences)
: base(tags, displayParts, ImmutableArray<TaggedText>.Empty,
originationParts, ImmutableArray<DocumentSpan>.Empty,
displayIfNoReferences)
originationParts, ImmutableArray<DocumentSpan>.Empty,
properties, displayIfNoReferences)
{
}
......
......@@ -31,11 +31,13 @@ private sealed class MetadataDefinitionItem : DefinitionItem
ImmutableArray<string> tags,
ImmutableArray<TaggedText> displayParts,
ImmutableArray<TaggedText> nameDisplayParts,
ImmutableDictionary<string, string> properties,
bool displayIfNoReferences,
Solution solution, ISymbol definition)
: base(tags, displayParts, nameDisplayParts,
GetOriginationParts(definition),
ImmutableArray<DocumentSpan>.Empty,
properties,
displayIfNoReferences)
{
_workspace = solution.Workspace;
......
......@@ -24,6 +24,12 @@ internal abstract partial class DefinitionItem
/// </summary>
public ImmutableArray<string> Tags { get; }
/// <summary>
/// Additional properties that can be attached to the definition for clients that want to
/// keep track of additional data.
/// </summary>
public ImmutableDictionary<string, string> Properties { get; }
/// <summary>
/// The DisplayParts just for the name of this definition. Generally used only for
/// error messages.
......@@ -66,15 +72,17 @@ internal abstract partial class DefinitionItem
ImmutableArray<string> tags,
ImmutableArray<TaggedText> displayParts,
ImmutableArray<TaggedText> nameDisplayParts,
ImmutableArray<TaggedText> originationParts = default(ImmutableArray<TaggedText>),
ImmutableArray<DocumentSpan> sourceSpans = default(ImmutableArray<DocumentSpan>),
bool displayIfNoReferences = true)
ImmutableArray<TaggedText> originationParts,
ImmutableArray<DocumentSpan> sourceSpans,
ImmutableDictionary<string, string> properties,
bool displayIfNoReferences)
{
Tags = tags;
DisplayParts = displayParts;
NameDisplayParts = nameDisplayParts.IsDefaultOrEmpty ? displayParts : nameDisplayParts;
OriginationParts = originationParts.NullToEmpty();
SourceSpans = sourceSpans.NullToEmpty();
Properties = properties;
DisplayIfNoReferences = displayIfNoReferences;
}
......@@ -93,11 +101,25 @@ internal abstract partial class DefinitionItem
nameDisplayParts, displayIfNoReferences);
}
// Kept around for binary compat with F#/TypeScript.
public static DefinitionItem Create(
ImmutableArray<string> tags,
ImmutableArray<TaggedText> displayParts,
ImmutableArray<DocumentSpan> sourceSpans,
ImmutableArray<TaggedText> nameDisplayParts,
bool displayIfNoReferences)
{
return Create(
tags, displayParts, sourceSpans, nameDisplayParts,
properties: null, displayIfNoReferences: displayIfNoReferences);
}
public static DefinitionItem Create(
ImmutableArray<string> tags,
ImmutableArray<TaggedText> displayParts,
ImmutableArray<DocumentSpan> sourceSpans,
ImmutableArray<TaggedText> nameDisplayParts = default(ImmutableArray<TaggedText>),
ImmutableDictionary<string, string> properties = null,
bool displayIfNoReferences = true)
{
if (sourceSpans.Length == 0)
......@@ -106,7 +128,7 @@ internal abstract partial class DefinitionItem
}
return new DocumentLocationDefinitionItem(
tags, displayParts, nameDisplayParts, sourceSpans, displayIfNoReferences);
tags, displayParts, nameDisplayParts, sourceSpans, properties, displayIfNoReferences);
}
internal static DefinitionItem CreateMetadataDefinition(
......@@ -114,21 +136,35 @@ internal abstract partial class DefinitionItem
ImmutableArray<TaggedText> displayParts,
ImmutableArray<TaggedText> nameDisplayParts,
Solution solution, ISymbol symbol,
ImmutableDictionary<string, string> properties = null,
bool displayIfNoReferences = true)
{
return new MetadataDefinitionItem(
tags, displayParts, nameDisplayParts,
tags, displayParts, nameDisplayParts, properties,
displayIfNoReferences, solution, symbol);
}
// Kept around for binary compat with F#/TypeScript.
public static DefinitionItem CreateNonNavigableItem(
ImmutableArray<string> tags,
ImmutableArray<TaggedText> displayParts,
ImmutableArray<TaggedText> originationParts,
bool displayIfNoReferences)
{
return CreateNonNavigableItem(
tags, displayParts, originationParts,
properties: null, displayIfNoReferences: displayIfNoReferences);
}
public static DefinitionItem CreateNonNavigableItem(
ImmutableArray<string> tags,
ImmutableArray<TaggedText> displayParts,
ImmutableArray<TaggedText> originationParts = default(ImmutableArray<TaggedText>),
ImmutableDictionary<string, string> properties = null,
bool displayIfNoReferences = true)
{
return new NonNavigatingDefinitionItem(
tags, displayParts, originationParts, displayIfNoReferences);
tags, displayParts, originationParts, properties, displayIfNoReferences);
}
internal static ImmutableArray<TaggedText> GetOriginationParts(ISymbol symbol)
......
......@@ -180,6 +180,7 @@ internal static class DefinitionItemExtensions
showMetadataSymbolsWithoutReferences: false);
var sourceLocations = ArrayBuilder<DocumentSpan>.GetInstance();
ImmutableDictionary<string, string> properties = null;
// If it's a namespace, don't create any normal location. Namespaces
// come from many different sources, but we'll only show a single
......@@ -192,7 +193,7 @@ internal static class DefinitionItemExtensions
{
return DefinitionItem.CreateMetadataDefinition(
tags, displayParts, nameDisplayParts, solution,
definition, displayIfNoReferences);
definition, properties, displayIfNoReferences);
}
else if (location.IsInSource)
{
......@@ -230,12 +231,12 @@ internal static class DefinitionItemExtensions
return DefinitionItem.CreateNonNavigableItem(
tags, displayParts,
DefinitionItem.GetOriginationParts(definition),
displayIfNoReferences);
properties, displayIfNoReferences);
}
return DefinitionItem.Create(
tags, displayParts, sourceLocations.ToImmutableAndFree(),
nameDisplayParts, displayIfNoReferences);
nameDisplayParts, properties, displayIfNoReferences);
}
public static SourceReferenceItem TryCreateSourceReferenceItem(
......
......@@ -93,7 +93,11 @@ private class ExternalDefinitionItem : DefinitionItem
string filePath,
int lineNumber,
int charOffset)
: base(tags, displayParts, ImmutableArray<TaggedText>.Empty)
: base(tags, displayParts, ImmutableArray<TaggedText>.Empty,
originationParts: default(ImmutableArray<TaggedText>),
sourceSpans: default(ImmutableArray<DocumentSpan>),
properties: null,
displayIfNoReferences: true)
{
_serviceProvider = serviceProvider;
_filePath = filePath;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册