public static void WriteParameterDeclaration(this IndentedTextWriter writer, ITypeScriptFunction function, bool returnTypeFatArrow) { writer.Write("("); if (function.Parameters?.Count > 0) { for (var i = 0; i < function.Parameters.Count; i++) { if (i > 0) { writer.Write(", "); } var p = function.Parameters[i]; writer.Write(p.Name); if (p.IsOptional) { writer.Write('?'); } writer.Write(": "); if (p.ParameterType == null) { writer.Write("any"); } else { p.ParameterType.WriteTypeName(writer); } } } writer.Write(")"); if (returnTypeFatArrow) { writer.Write(" => "); } else { writer.Write(": "); } if (function.ReturnType != null) { writer.Write(function.ReturnType.Name); } else { writer.Write("void"); } writer.WriteLine(";"); }
private void ProcessFunctionCore(TypeScriptContext tsc, string name, HtmlNode div, ITypeScriptFunction fd) { fd.Name = name; fd.Documentation = new Documentation(); fd.Documentation.Summary = div.SelectNodes("p[not(@class)]").SanitizeDocumentation(); var returnValue = div.SelectSingleNode("dl/dd/p"); if (returnValue != null) { fd.ReturnType = ResolveType(tsc, returnValue.SelectSingleNode("code").InnerText).Type; fd.Documentation.Returns = returnValue.SelectNodes("text()").SanitizeDocumentation(); } var trs = div.SelectNodes("section//table/tbody/tr"); if (trs != null) { foreach (var tr in trs) { var mn = tr.SelectSingleNode("td[1]")?.InnerText?.Trim(); if (mn != null) { var pt = ResolveType(tsc, tr.SelectSingleNode("td[2]/p[@class='details-table-types']")?.InnerText?.Trim()); fd.Parameters.Add(new ParameterDeclaration() { Name = mn, ParameterType = pt.Type, IsRequired = tr.SelectSingleNode("td[2]/p[@class='details-table-optional']") == null && !pt.IsNullable }); fd.Documentation.Parameters.Add(new ParameterDocumentation() { ParameterName = mn, Description = tr.SelectNodes("td[2]/p[not(@class)]").SanitizeDocumentation() }); } } } }