public static Task<IFunctionInfo> GetFunctionInfoAsync(IFunctionIndex functionIndex, string functionName) {
            var tcs = new TaskCompletionSource<IFunctionInfo>();
            var result = functionIndex.GetFunctionInfo(functionName, null, (o, p) => {
                var r = functionIndex.GetFunctionInfo(functionName, p);
                tcs.TrySetResult(r);
            });

            if (result != null) {
                tcs.TrySetResult(result);
            }

            return tcs.Task;
        }
Exemple #2
0
        public static Task <IFunctionInfo> GetFunctionInfoAsync(IFunctionIndex functionIndex, string functionName)
        {
            var tcs    = new TaskCompletionSource <IFunctionInfo>();
            var result = functionIndex.GetFunctionInfo(functionName, o => {
                var r = functionIndex.GetFunctionInfo(functionName);
                tcs.TrySetResult(r);
            });

            if (result != null)
            {
                tcs.TrySetResult(result);
            }

            return(tcs.Task);
        }
        public static async Task <IFunctionInfo> GetFunctionInfoAsync(this IFunctionIndex functionIndex, string functionName, string packageName = null)
        {
            var fi = functionIndex.GetFunctionInfo(functionName, packageName);

            if (fi != null)
            {
                return(fi);
            }

            packageName = await functionIndex.GetPackageNameAsync(functionName);

            if (!string.IsNullOrEmpty(packageName))
            {
                return(functionIndex.GetFunctionInfo(functionName, packageName));
            }

            return(null);
        }
        public static void GetFunctionInfoAsync(this IFunctionIndex functionIndex, string functionName, string packageName, Action <IFunctionInfo, object> callback, object parameter = null)
        {
            var fi = functionIndex.GetFunctionInfo(functionName, packageName);

            if (fi != null)
            {
                callback(fi, parameter);
            }
            else
            {
                GetFunctionInfoFromPackageAsync(functionIndex, functionName, packageName, callback, parameter).DoNotWait();
            }
        }
        private static async Task GetFunctionInfoFromPackageAsync(IFunctionIndex functionIndex, string functionName, string packageName, Action <IFunctionInfo, object> callback, object parameter)
        {
            IFunctionInfo fi = null;

            packageName = packageName ?? await functionIndex.GetPackageNameAsync(functionName);

            if (!string.IsNullOrEmpty(packageName))
            {
                fi = functionIndex.GetFunctionInfo(functionName, packageName);
            }
            await functionIndex.Services.MainThread().SwitchToAsync();

            callback(fi, parameter);
        }
        /// <summary>
        /// Extracts information on the current function in the completion context, if any.
        /// </summary>
        /// <returns></returns>
        private IFunctionInfo GetFunctionInfo(IRIntellisenseContext context)
        {
            // Retrieve parameter positions from the current text buffer snapshot
            IFunctionInfo functionInfo = null;

            var parametersInfo = context.AstRoot.GetSignatureInfoFromBuffer(context.EditorBuffer.CurrentSnapshot, context.Position);

            if (parametersInfo != null)
            {
                // User-declared functions take priority
                functionInfo = context.AstRoot.GetUserFunctionInfo(parametersInfo.FunctionName, context.Position)
                               ?? _functionIndex.GetFunctionInfo(parametersInfo.FunctionName, null);
            }
            return(functionInfo);
        }
        /// <summary>
        /// Extracts information on the current function in the completion context, if any.
        /// </summary>
        /// <returns></returns>
        private IFunctionInfo GetFunctionInfo(RCompletionContext context)
        {
            // Retrieve parameter positions from the current text buffer snapshot
            IFunctionInfo functionInfo = null;

            ParameterInfo parametersInfo = SignatureHelp.GetParametersInfoFromBuffer(context.AstRoot, context.TextBuffer.CurrentSnapshot, context.Position);

            if (parametersInfo != null)
            {
                // User-declared functions take priority
                functionInfo = context.AstRoot.GetUserFunctionInfo(parametersInfo.FunctionName, context.Position);
                if (functionInfo == null)
                {
                    // Get collection of function signatures from documentation (parsed RD file)
                    functionInfo = _functionIndex.GetFunctionInfo(parametersInfo.FunctionName, null, (o, p) => { }, context.Session.TextView);
                }
            }
            return(functionInfo);
        }