internal EpochFunctionSignature(ITextBuffer subjectBuffer, string basename, Parser.FunctionOverload content, string doc, ReadOnlyCollection <IParameter> parameters) { m_subjectBuffer = subjectBuffer; m_content = content.Format(basename); m_documentation = doc; m_parameters = parameters; m_subjectBuffer.Changed += new EventHandler <TextContentChangedEventArgs>(OnSubjectBufferChanged); }
private EpochFunctionSignature CreateSignature(ITextBuffer textBuffer, string basename, Parser.FunctionOverload methodSig, string methodDoc, ITrackingSpan span) { EpochFunctionSignature sig = new EpochFunctionSignature(textBuffer, basename, methodSig, methodDoc, null); textBuffer.Changed += new EventHandler <TextContentChangedEventArgs>(sig.OnSubjectBufferChanged); List <IParameter> paramList = new List <IParameter>(); int locusSearchStart = 0; for (int i = 0; i < methodSig.Parameters.Count; ++i) { string param = methodSig.Parameters[i].ToString(); int locusStart = methodSig.Format(basename).IndexOf(param, locusSearchStart); if (locusStart >= 0) { Span locus = new Span(locusStart, param.Length); locusSearchStart = locusStart + param.Length; paramList.Add(new EpochParameter("Parameter documentation goes here.", locus, param, sig)); } } sig.Parameters = new ReadOnlyCollection <IParameter>(paramList); sig.ApplicableToSpan = span; sig.ComputeCurrentParameter(); return(sig); }
public static FunctionSignature Parse(ParseSession parser) { var nametoken = parser.PeekToken(0); if (nametoken == null || string.IsNullOrEmpty(nametoken.Text)) { return(null); } int totaltokens = 1; if (parser.CheckToken(totaltokens, "<")) { ++totaltokens; if (!parser.ParseTemplateParameters(totaltokens, nametoken, out totaltokens)) { return(null); } } if (!parser.CheckToken(totaltokens, ":")) { return(null); } ++totaltokens; var overload = new FunctionOverload(); if (!parser.CheckToken(totaltokens, "[")) { var paramlist = ParseFunctionParams(parser, totaltokens, out totaltokens); var funcreturn = ParseFunctionReturn(parser, totaltokens, out totaltokens); overload.Parameters = paramlist; overload.ReturnType = funcreturn?.Type; } var tags = ParseFunctionTags(parser, totaltokens, out totaltokens); overload.Tags = tags; if (parser.CheckToken(totaltokens, "{")) { ++totaltokens; var scope = ParseCodeBlock(parser, null, totaltokens, out totaltokens); overload.Scope = scope; if (overload.Scope != null && overload.Parameters != null) { foreach (var p in overload.Parameters) { var v = new Variable { Name = p.Name, Type = p.Type, Origin = Variable.Origins.Parameter }; overload.Scope.Variables.Add(v); } } } parser.ConsumeTokens(totaltokens); var ret = new FunctionSignature { Name = nametoken, Overloads = new List <FunctionOverload>() }; ret.Overloads.Add(overload); return(ret); }