public PythonSignature(VsProjectAnalyzer analyzer, ITrackingSpan span, AP.Signature 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.optional) { 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.optional) { content.Append(']'); ppContent.Append(']'); } ppContent.AppendLine(","); if (lastKeywordArg != null && param.name == lastKeywordArg) { paramIndex = i; } parameters[i] = new PythonParameter( this, param, paramSpan, ppParamSpan, param.variables != null ? param.variables.Select(analyzer.ToAnalysisVariable).ToArray() : null ); } content.Append(')'); ppContent.Append(')'); _content = content.ToString(); _ppContent = ppContent.ToString(); _documentation = overload.doc.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 PythonSignature(VsProjectAnalyzer analyzer, ITrackingSpan span, AP.Signature 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.optional) { 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.optional) { content.Append(']'); ppContent.Append(']'); } ppContent.AppendLine(","); if (lastKeywordArg != null && param.name == lastKeywordArg) { paramIndex = i; } parameters[i] = new PythonParameter( this, param, paramSpan, ppParamSpan, param.variables != null ? param.variables.Select(analyzer.ToAnalysisVariable).ToArray() : null ); } content.Append(')'); ppContent.Append(')'); _content = content.ToString(); _ppContent = ppContent.ToString(); _documentation = overload.doc.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]; } }