internal ILinkResponse ResolveLink()

in src/dotnet/RiderPlugin.UnrealLink/LinkResolver.cs [136:175]


        internal ILinkResponse ResolveLink(LinkRequest @struct, IRdCall<FString, bool> isBlueprintPathName)
        {
            // ReSharper disable once LocalFunctionCanBeMadeStatic
            string SqueezeBorders(string s, out int l, out int r)
            {
                l = 0;
                r = s.Length;
                if (s.EndsWith("."))
                {
                    --r;
                }

                if (PairSymbol.TryGetValue(s[r - 1], out var value))
                {
                    l = s.AsSpan(l, r - l - 1).LastIndexOf(value) + 1;
                    --r;
                }

                return s.Substring(l, r - l);
            }

            var link = @struct.Data.Data;
            var squeezed = SqueezeBorders(link, out var left, out var right);
            var range = new StringRange(left, right);

            var fullPath = TryParseFullPath(squeezed, range);
            if (fullPath != null)
            {
                return fullPath;
            }

            var fullName = TryParseFullName(squeezed, range, isBlueprintPathName);
            if (fullName != null)
            {
                return fullName;
            }


            return new LinkResponseUnresolved();
        }