private static string FormatSignature(IOverloadResult sig) { return(sig.Name + "(" + String.Join(", ", sig.Parameters.Select(param => param.Name + ": " + param.Type)) + ")"); }
private SignatureInformation ToSignatureInformation(IOverloadResult overload) { var si = new SignatureInformation(); if (_clientCaps?.textDocument?.signatureHelp?.signatureInformation?._shortLabel ?? false) { si.label = overload.Name; } else { si.label = "{0}({1})".FormatInvariant( overload.Name, string.Join(", ", overload.Parameters.Select(FormatParameter)) ); } si.documentation = string.IsNullOrEmpty(overload.Documentation) ? null : overload.Documentation; si.parameters = overload.Parameters.MaybeEnumerate().Select(p => new ParameterInformation { label = p.Name, documentation = string.IsNullOrEmpty(p.Documentation) ? null : p.Documentation, _type = p.Type, _defaultValue = p.DefaultValue }).ToArray(); var formatSetting = _clientCaps.textDocument?.signatureHelp?.signatureInformation?.documentationFormat; si.documentation = GetMarkupContent(si.documentation.value, formatSetting); foreach (var p in si.parameters) { p.documentation = GetMarkupContent(p.documentation.value, formatSetting); } si._returnTypes = (overload as IOverloadResult2)?.ReturnType.OrderBy(k => k).ToArray(); return(si); }
private List <IAnalysisVariable> GetKeywordParameters(Expression expr, string originalName) { List <IAnalysisVariable> paramVars = new List <IAnalysisVariable>(); if (expr is NameExpression) { // let's check if we'r re-naming a keyword argument... ITrackingSpan span = _view.GetCaretSpan(); var sigs = _view.TextBuffer.CurrentSnapshot.GetSignatures(_serviceProvider, span); foreach (var sig in sigs.Signatures) { IOverloadResult overloadRes = sig as IOverloadResult; if (overloadRes != null) { foreach (var param in overloadRes.Parameters) { if (param.Name == originalName && param.Variables != null) { paramVars.AddRange(param.Variables); } } } } } return(paramVars); }
private CompletionItem ToOverrideCompletionItem(IOverloadResult o, ClassDefinition cd, string indent) { return(new CompletionItem { label = o.Name, insertText = MakeOverrideCompletionString(indent, o, cd.Name), kind = CompletionItemKind.Method }); }
public JSignature(ITrackingSpan span, IOverloadResult overload, int paramIndex, string lastKeywordArg = null) { _span = span; _overload = overload; if (lastKeywordArg != null) { paramIndex = Int32.MaxValue; } var content = new StringBuilder(overload.Name); content.Append('('); int start = content.Length; var parameters = new IParameter[overload.Parameters.Length]; for (int i = 0; i < overload.Parameters.Length; i++) { var param = overload.Parameters[i]; if (param.IsOptional) { content.Append("["); } if (i > 0) { content.Append(", "); start = content.Length; } content.Append(param.Name); if (param.Type != null && param.Type != "object") { content.Append(": "); content.Append(param.Type); } if (!String.IsNullOrWhiteSpace(param.DefaultValue)) { content.Append(" = "); content.Append(param.DefaultValue); } var paramSpan = new Span(start, content.Length - start); if (param.IsOptional) { content.Append("]"); } if (lastKeywordArg != null && param.Name == lastKeywordArg) { paramIndex = i; } parameters[i] = new JParameter(this, param, paramSpan); } content.Append(')'); _content = content.ToString(); _parameters = new ReadOnlyCollection<IParameter>(parameters); if (paramIndex < parameters.Length) { _currentParameter = parameters[paramIndex]; } else { _currentParameter = null; } }
public PythonSignature(ITrackingSpan span, IOverloadResult overload, int paramIndex) { _span = span; _overload = overload; var content = new StringBuilder(overload.Name); content.Append('('); int start = content.Length; var parameters = new IParameter[overload.Parameters.Length]; for (int i = 0; i < overload.Parameters.Length; i++) { var param = overload.Parameters[i]; if (param.IsOptional) { content.Append("["); } if (i > 0) { content.Append(", "); start = content.Length; } content.Append(param.Name); if (param.Type != null && param.Type != "object") { content.Append(": "); content.Append(param.Type); } var paramSpan = new Span(start, content.Length - start); if (param.IsOptional) { content.Append("]"); } parameters[i] = new PythonParameter(this, param, paramSpan); } content.Append(')'); _content = content.ToString(); _parameters = new ReadOnlyCollection <IParameter>(parameters); if (paramIndex < parameters.Length) { _currentParameter = parameters[paramIndex]; } else { _currentParameter = null; } }
private string MakeCompletionString(IOverloadResult result, string className) { var sb = new StringBuilder(); sb.AppendLine(result.Name + "(" + string.Join(", ", result.Parameters.Select((p, i) => GetSafeParameterName(p, i))) + "):"); var span = Span.GetSpan(TextBuffer.CurrentSnapshot); int defIndent = span.Start.GetContainingLine().GetText().IndexOf("def"); if (_options.ConvertTabsToSpaces) { sb.Append(' ', defIndent + _options.IndentSize); } else { sb.Append('\t', defIndent / 8 + 1); } if (result.Parameters.Length > 0) { var parameterString = string.Join(", ", result.Parameters.Skip(1).Select((p, i) => GetSafeArgumentName(p, i + 1))); var analysis = GetAnalysisEntry(); if (analysis != null && analysis.ProjectState.LanguageVersion.Is3x()) { sb.AppendFormat("return super().{0}({1})", result.Name, parameterString); } else if (!string.IsNullOrEmpty(className)) { sb.AppendFormat("return super({0}, {1}).{2}({3})", className, result.Parameters.First().Name, result.Name, parameterString); } else { sb.Append("pass"); } } else { sb.Append("pass"); } return(sb.ToString()); }
private SignatureInformation ToSignatureInformation(IOverloadResult overload) { var si = new SignatureInformation(); si.parameters = overload.Parameters.MaybeEnumerate().Select(p => new ParameterInformation { label = p.Name, documentation = string.IsNullOrEmpty(p.Documentation) ? null : p.Documentation, _type = p.Type, _defaultValue = p.DefaultValue }).ToArray(); si._returnTypes = (overload as IOverloadResult2)?.ReturnType.OrderBy(k => k).ToArray(); if (_clientCaps?.textDocument?.signatureHelp?.signatureInformation?._shortLabel ?? false) { si.label = overload.Name; } else { var doc = overload.Documentation; // Some function contain signature in the documentation. Example: print. // We want to use that signature in VS Code since it contains all arguments. if (si.parameters.Length == 0 && !string.IsNullOrEmpty(doc) && doc.StartsWithOrdinal($"{overload.Name}(")) { return(GetSignatureFromDoc(doc)); } si.label = "{0}({1})".FormatInvariant( overload.Name, string.Join(", ", overload.Parameters.Select(FormatParameter)) ); } si.documentation = string.IsNullOrEmpty(overload.Documentation) ? null : overload.Documentation; var formatSetting = _clientCaps?.textDocument?.signatureHelp?.signatureInformation?.documentationFormat; si.documentation = GetMarkupContent(si.documentation.value, formatSetting); foreach (var p in si.parameters) { p.documentation = GetMarkupContent(p.documentation.value, formatSetting); } return(si); }
private string MakeOverrideCompletionString(string indentation, IOverloadResult result, string className) { var sb = new StringBuilder(); sb.AppendLine(result.Name + "(" + string.Join(", ", result.Parameters.Select((p, i) => GetSafeParameterName(p, i))) + "):"); sb.Append(indentation); sb.Append('\t'); if (result.Parameters.Length > 0) { var parameterString = string.Join(", ", result.Parameters.Skip(1).Select((p, i) => GetSafeArgumentName(p, i + 1))); if (Tree.LanguageVersion.Is3x()) { sb.AppendFormat("return super().{0}({1})", result.Name, parameterString); } else if (!string.IsNullOrEmpty(className)) { sb.AppendFormat("return super({0}, {1}).{2}({3})", className, result.Parameters.First().Name, result.Name, parameterString); } else { sb.Append("pass"); } } else { sb.Append("pass"); } return(sb.ToString()); }
private string MakeCompletionString(IOverloadResult result, string className) { var sb = new StringBuilder(); sb.AppendLine(result.Name + "(" + string.Join(", ", result.Parameters.Select((p, i) => GetSafeParameterName(p, i))) + "):"); var span = Span.GetSpan(TextBuffer.CurrentSnapshot); int defIndent = span.Start.GetContainingLine().GetText().IndexOf("def"); if (_options.ConvertTabsToSpaces) { sb.Append(' ', defIndent + _options.IndentSize); } else { sb.Append('\t', defIndent / 8 + 1); } if (result.Parameters.Length > 0) { var parameterString = string.Join(", ", result.Parameters.Skip(1).Select((p, i) => GetSafeArgumentName(p, i + 1))); var analysis = GetAnalysisEntry(); if (analysis != null && analysis.ProjectState.LanguageVersion.Is3x()) { sb.AppendFormat("return super().{0}({1})", result.Name, parameterString); } else if (!string.IsNullOrEmpty(className)) { sb.AppendFormat("return super({0}, {1}).{2}({3})", className, result.Parameters.First().Name, result.Name, parameterString); } else { sb.Append("pass"); } } else { sb.Append("pass"); } return sb.ToString(); }
public PythonSignature(ITrackingSpan span, IOverloadResult overload, int paramIndex, string lastKeywordArg = null) { _span = span; _overload = overload; if (lastKeywordArg != null) { paramIndex = Int32.MaxValue; } var content = new StringBuilder(overload.Name); var ppContent = new StringBuilder(overload.Name); content.Append('('); ppContent.AppendLine("("); int start = content.Length, ppStart = ppContent.Length; var parameters = new IParameter[overload.Parameters.Length]; for (int i = 0; i < overload.Parameters.Length; i++) { ppContent.Append(" "); ppStart = ppContent.Length; var param = overload.Parameters[i]; if (param.IsOptional) { content.Append('['); ppContent.Append('['); } if (i > 0) { content.Append(", "); start = content.Length; } content.Append(param.Name); ppContent.Append(param.Name); if (!string.IsNullOrEmpty(param.Type) && param.Type != "object") { content.Append(": "); content.Append(param.Type); ppContent.Append(": "); ppContent.Append(param.Type); } if (!String.IsNullOrWhiteSpace(param.DefaultValue)) { content.Append(" = "); content.Append(param.DefaultValue); ppContent.Append(" = "); ppContent.Append(param.DefaultValue); } var paramSpan = new Span(start, content.Length - start); var ppParamSpan = new Span(ppStart, ppContent.Length - ppStart); if (param.IsOptional) { content.Append(']'); ppContent.Append(']'); } ppContent.AppendLine(","); if (lastKeywordArg != null && param.Name == lastKeywordArg) { paramIndex = i; } parameters[i] = new PythonParameter(this, param, paramSpan, ppParamSpan); } content.Append(')'); ppContent.Append(')'); _content = content.ToString(); _ppContent = ppContent.ToString(); _documentation = overload.Documentation.LimitLines(15, stopAtFirstBlankLine: true); _parameters = new ReadOnlyCollection<IParameter>(parameters); if (lastKeywordArg == null) { for (int i = 0; i < parameters.Length; ++i) { if (i == paramIndex || IsParamArray(parameters[i].Name)) { _currentParameter = parameters[i]; break; } } } else if (paramIndex < parameters.Length) { _currentParameter = parameters[paramIndex]; } }
public NodejsSignature(ITrackingSpan span, IOverloadResult overload, int paramIndex, string lastKeywordArg = null) { _span = span; _overload = overload; if (lastKeywordArg != null) { paramIndex = Int32.MaxValue; } string documentation = overload.Documentation; var content = new StringBuilder(overload.Name); var ppContent = new StringBuilder(overload.Name); content.Append('('); ppContent.AppendLine("("); int start = content.Length, ppStart = ppContent.Length; var parameters = new IParameter[overload.Parameters.Length]; for (int i = 0; i < overload.Parameters.Length; i++) { ppContent.Append(" "); ppStart = ppContent.Length; var param = overload.Parameters[i]; if (i > 0) { content.Append(", "); start = content.Length; } // Try to locate and parse the corresponding @param in the doclet. string docRegex = // @param, @arg or @argument, and optional {type} (@"@(param|arg|argument) (\s+|\s*\{(?<Type>[^}]*?)\}\s*)" + // Either just name by itself, or [name] if it's optional, or [name=value] if defaulted. @"(?<IsOptional>\[\s*)? {{VariableName}} (?(IsOptional)\s*(=\s*(?<DefaultValue>.*?)\s*)?\])" + // Associated docstring. Ends at the end of doclet, or at the next non-inline @tag, or at the next empty line (paragraph break). @"\s* (?<Documentation>.*?) \s* ($|\r\n\r\n|(?<!\{)@)" ).Replace("{{VariableName}}", param.Name); var m = Regex.Match(documentation, docRegex, RegexOptions.IgnorePatternWhitespace | RegexOptions.Singleline | RegexOptions.ExplicitCapture); content.Append(param.Name); ppContent.Append(param.Name); if (param.IsOptional || m.Groups["IsOptional"].Success) { content.Append("?"); ppContent.Append("?"); } string type = null; if (!string.IsNullOrEmpty(param.Type) && param.Type != "object") { type = param.Type; } else if (m.Groups["Type"].Success) { type = m.Groups["Type"].Value; } if (type != null) { content.Append(": "); content.Append(type); ppContent.Append(": "); ppContent.Append(type); } if (m.Groups["DefaultValue"].Success && m.Groups["DefaultValue"].Length > 0) { content.Append(" = "); content.Append(m.Groups["DefaultValue"].Value); } var paramSpan = new Span(start, content.Length - start); var ppParamSpan = new Span(ppStart, ppContent.Length - ppStart); ppContent.AppendLine(","); if (lastKeywordArg != null && param.Name == lastKeywordArg) { paramIndex = i; } string paramDoc = null; if (m.Groups["Documentation"].Success) { paramDoc = m.Groups["Documentation"].Value.Replace("\r\n", " "); } parameters[i] = new NodejsParameter(this, param, paramSpan, ppParamSpan, paramDoc); } content.Append(')'); ppContent.Append(')'); _content = content.ToString(); _ppContent = ppContent.ToString(); _documentation = overload.Documentation.LimitLines(15, stopAtFirstBlankLine: true); _parameters = new ReadOnlyCollection <IParameter>(parameters); if (paramIndex < parameters.Length) { _currentParameter = parameters[paramIndex]; } else { _currentParameter = null; } }
public OverloadResultTestInfo(IOverloadResult value, string name) { Value = value; Name = name; }
public NodejsSignature(ITrackingSpan span, IOverloadResult overload, int paramIndex, string lastKeywordArg = null) { _span = span; _overload = overload; if (lastKeywordArg != null) { paramIndex = Int32.MaxValue; } string documentation = overload.Documentation; var content = new StringBuilder(overload.Name); var ppContent = new StringBuilder(overload.Name); content.Append('('); ppContent.AppendLine("("); int start = content.Length, ppStart = ppContent.Length; var parameters = new IParameter[overload.Parameters.Length]; for (int i = 0; i < overload.Parameters.Length; i++) { ppContent.Append(" "); ppStart = ppContent.Length; var param = overload.Parameters[i]; if (i > 0) { content.Append(", "); start = content.Length; } // Try to locate and parse the corresponding @param in the doclet. string docRegex = // @param, @arg or @argument, and optional {type} (@"@(param|arg|argument) (\s+|\s*\{(?<Type>[^}]*?)\}\s*)" + // Either just name by itself, or [name] if it's optional, or [name=value] if defaulted. @"(?<IsOptional>\[\s*)? {{VariableName}} (?(IsOptional)\s*(=\s*(?<DefaultValue>.*?)\s*)?\])" + // Associated docstring. Ends at the end of doclet, or at the next non-inline @tag, or at the next empty line (paragraph break). @"\s* (?<Documentation>.*?) \s* ($|\r\n\r\n|(?<!\{)@)" ).Replace("{{VariableName}}", param.Name); var m = Regex.Match(documentation, docRegex, RegexOptions.IgnorePatternWhitespace | RegexOptions.Singleline | RegexOptions.ExplicitCapture); content.Append(param.Name); ppContent.Append(param.Name); if (param.IsOptional || m.Groups["IsOptional"].Success) { content.Append("?"); ppContent.Append("?"); } string type = null; if (!string.IsNullOrEmpty(param.Type) && param.Type != "object") { type = param.Type; } else if (m.Groups["Type"].Success) { type = m.Groups["Type"].Value; } if (type != null) { content.Append(": "); content.Append(type); ppContent.Append(": "); ppContent.Append(type); } if (m.Groups["DefaultValue"].Success && m.Groups["DefaultValue"].Length > 0) { content.Append(" = "); content.Append(m.Groups["DefaultValue"].Value); } var paramSpan = new Span(start, content.Length - start); var ppParamSpan = new Span(ppStart, ppContent.Length - ppStart); ppContent.AppendLine(","); if (lastKeywordArg != null && param.Name == lastKeywordArg) { paramIndex = i; } string paramDoc = null; if (m.Groups["Documentation"].Success) { paramDoc = m.Groups["Documentation"].Value.Replace("\r\n", " "); } parameters[i] = new NodejsParameter(this, param, paramSpan, ppParamSpan, paramDoc); } content.Append(')'); ppContent.Append(')'); _content = content.ToString(); _ppContent = ppContent.ToString(); _documentation = overload.Documentation.LimitLines(15, stopAtFirstBlankLine: true); _parameters = new ReadOnlyCollection<IParameter>(parameters); if (paramIndex < parameters.Length) { _currentParameter = parameters[paramIndex]; } else { _currentParameter = null; } }
public PythonSignature(ITrackingSpan span, IOverloadResult overload, int paramIndex, string lastKeywordArg = null) { _span = span; _overload = overload; if (lastKeywordArg != null) { paramIndex = Int32.MaxValue; } var content = new StringBuilder(overload.Name); var ppContent = new StringBuilder(overload.Name); content.Append('('); ppContent.AppendLine("("); int start = content.Length, ppStart = ppContent.Length; var parameters = new IParameter[overload.Parameters.Length]; for (int i = 0; i < overload.Parameters.Length; i++) { ppContent.Append(" "); ppStart = ppContent.Length; var param = overload.Parameters[i]; if (param.IsOptional) { content.Append('['); ppContent.Append('['); } if (i > 0) { content.Append(", "); start = content.Length; } content.Append(param.Name); ppContent.Append(param.Name); if (!string.IsNullOrEmpty(param.Type) && param.Type != "object") { content.Append(": "); content.Append(param.Type); ppContent.Append(": "); ppContent.Append(param.Type); } if (!String.IsNullOrWhiteSpace(param.DefaultValue)) { content.Append(" = "); content.Append(param.DefaultValue); ppContent.Append(" = "); ppContent.Append(param.DefaultValue); } var paramSpan = new Span(start, content.Length - start); var ppParamSpan = new Span(ppStart, ppContent.Length - ppStart); if (param.IsOptional) { content.Append(']'); ppContent.Append(']'); } ppContent.AppendLine(","); if (lastKeywordArg != null && param.Name == lastKeywordArg) { paramIndex = i; } parameters[i] = new PythonParameter(this, param, paramSpan, ppParamSpan); } content.Append(')'); ppContent.Append(')'); _content = content.ToString(); _ppContent = ppContent.ToString(); _documentation = overload.Documentation.LimitLines(15, stopAtFirstBlankLine: true); _parameters = new ReadOnlyCollection <IParameter>(parameters); if (lastKeywordArg == null) { for (int i = 0; i < parameters.Length; ++i) { if (i == paramIndex || IsParamArray(parameters[i].Name)) { _currentParameter = parameters[i]; break; } } } else if (paramIndex < parameters.Length) { _currentParameter = parameters[paramIndex]; } }
private static string FormatSignature(IOverloadResult sig) { return sig.Name + "(" + String.Join(", ", sig.Parameters.Select(param => param.Name + ": " + param.Type)) + ")"; }
private string MakeCompletionString(AP.OverridesCompletionRequest request, IOverloadResult result, string className) { var sb = new StringBuilder(); sb.AppendLine(result.Name + "(" + string.Join(", ", result.Parameters.Select((p, i) => GetSafeParameterName(p, i))) + "):"); sb.Append(request.indentation); if (result.Parameters.Length > 0) { var parameterString = string.Join(", ", result.Parameters.Skip(1).Select((p, i) => GetSafeArgumentName(p, i + 1))); if (InterpreterFactory.GetLanguageVersion().Is3x()) { sb.AppendFormat("return super().{0}({1})", result.Name, parameterString); } else if (!string.IsNullOrEmpty(className)) { sb.AppendFormat("return super({0}, {1}).{2}({3})", className, result.Parameters.First().Name, result.Name, parameterString); } else { sb.Append("pass"); } } else { sb.Append("pass"); } return sb.ToString(); }