namespace Unity.VisualScripting { [FuzzyOption(typeof(Member))] public sealed class MemberOption : DocumentedOption { public MemberOption(Member member) : this(member, ActionDirection.Any, false) { } public MemberOption(Member member, ActionDirection direction, bool expectingBoolean) { Ensure.That(nameof(member)).IsNotNull(member); value = member; documentation = member.info.Documentation(); UnityAPI.Async(() => icon = member.pseudoDeclaringType.Icon()); if (member.isPseudoInherited) { style = FuzzyWindow.Styles.optionWithIconDim; } if (member.isInvocable) { label = $"{member.info.DisplayName(direction, expectingBoolean)} ({member.methodBase.DisplayParameterString(member.targetType)})"; } else { label = member.info.DisplayName(direction, expectingBoolean); } } private static string MemberNameWithTargetType(Member member, ActionDirection direction, bool expectingBoolean) { return $"{member.targetType.DisplayName()}{(BoltCore.Configuration.humanNaming ? ": " : ".")}{member.info.DisplayName(direction, expectingBoolean)}"; } public static string Haystack(Member member, ActionDirection direction, bool expectingBoolean) { return MemberNameWithTargetType(member, direction, expectingBoolean); } public static string SearchResultLabel(Member member, string query, ActionDirection direction, bool expectingBoolean) { var label = SearchUtility.HighlightQuery(Haystack(member, direction, expectingBoolean), query); if (member.isInvocable) { label += $" ({member.methodBase.DisplayParameterString(member.targetType)})"; } return label; } } }