/// <summary> /// Called from PowerShell to get additional metdata from a language block, such as comment help. /// </summary> /// <param name="path"></param> /// <param name="start"></param> /// <returns></returns> internal static CommentMetadata GetCommentMeta(string path, int lineNumber, int offset) { var context = RunspaceContext.CurrentThread; //if (lineNumber < 0 || context.Pipeline.ExecutionScope == ExecutionScope.None || context.Source.SourceContentCache == null) // return new CommentMetadata(); var lines = context.Source.Content; var i = lineNumber; var comments = new List <string>(); // Back track lines with comments immediately before block for (; i >= 0 && lines[i].Contains("#"); i--) { comments.Insert(0, lines[i]); } // Check if any comments were found var metadata = new CommentMetadata(); if (comments.Count > 0) { foreach (var comment in comments) { if (comment.StartsWith("# Synopsis: ", StringComparison.OrdinalIgnoreCase)) { metadata.Synopsis = comment.Substring(12); } } } return(metadata); }
/// <summary> /// Called from PowerShell to get additional metdata from a language block, such as comment help. /// </summary> /// <param name="path"></param> /// <param name="start"></param> /// <returns></returns> public static CommentMetadata GetCommentMeta(string path, int lineNumber, int offset) { var context = PipelineContext.CurrentThread; if (lineNumber < 0 || context.ExecutionScope == ExecutionScope.None || context.Source.SourceContentCache == null) { return(new CommentMetadata()); } var lines = context.Source.SourceContentCache; var i = lineNumber; var comments = new List <string>(); // Back track lines with comments immediately before block for (; i >= 0 && lines[i].Contains("#"); i--) { comments.Insert(0, lines[i]); } // Check if any comments were found var metadata = new CommentMetadata(); if (comments.Count > 0) { foreach (var comment in comments) { if (comment.StartsWith("# Description: ")) { metadata.Synopsis = comment.Substring(15); } if (comment.StartsWith("# Synopsis: ")) { metadata.Synopsis = comment.Substring(12); } } } return(metadata); }
private bool TryResource(string name, IParser reader, Func <IParser, Type, object> nestedObjectDeserializer, ResourceMetadata metadata, CommentMetadata comment, out IResource spec) { spec = null; if (_Factory.TryDescriptor(name, out ISpecDescriptor descriptor) && reader.Accept <MappingStart>()) { if (!_Next.Deserialize(reader, descriptor.SpecType, nestedObjectDeserializer, out object value)) { return(false); } spec = descriptor.CreateInstance(RunspaceContext.CurrentThread.Source.File, metadata, comment, value); return(true); } return(false); }
private IResource MapResource(IParser reader, Func <IParser, Type, object> nestedObjectDeserializer, CommentMetadata comment) { IResource result = null; string kind = null; ResourceMetadata metadata = null; if (reader.Accept <MappingStart>()) { reader.MoveNext(); while (!reader.Accept <MappingEnd>()) { // Read kind var propertyName = reader.Allow <Scalar>().Value; if (propertyName == "kind") { kind = reader.Allow <Scalar>().Value; } else if (propertyName == "metadata") { if (!TryMetadata(reader, nestedObjectDeserializer, out metadata)) { reader.SkipThisAndNestedEvents(); } } else if (propertyName == "spec" && kind != null) { if (!TryResource(kind, reader, nestedObjectDeserializer, metadata, comment, out IResource resource)) { reader.SkipThisAndNestedEvents(); } result = resource; } else { reader.SkipThisAndNestedEvents(); } } reader.MoveNext(); } return(result); }
public IResource CreateInstance(SourceFile source, ResourceMetadata metadata, CommentMetadata comment, object spec) { var info = new ResourceHelpInfo(comment.Synopsis); return((IResource)Activator.CreateInstance(typeof(T), ApiVersion, source, metadata, info, spec)); }
private bool TrySpec(IParser reader, Scalar scalar, string apiVersion, string kind, Func <IParser, Type, object> nestedObjectDeserializer, ResourceMetadata metadata, CommentMetadata comment, out IResource spec) { spec = null; if (scalar.Value != FIELD_SPEC) { return(false); } return(TryResource(reader, apiVersion, kind, nestedObjectDeserializer, metadata, comment, out spec)); }
private IResource MapResource(IParser reader, Func <IParser, Type, object> nestedObjectDeserializer, CommentMetadata comment) { IResource result = null; string apiVersion = null; string kind = null; ResourceMetadata metadata = null; if (reader.TryConsume <MappingStart>(out _)) { while (reader.TryConsume(out Scalar scalar)) { // Read apiVersion if (TryApiVersion(reader, scalar, out string apiVersionValue)) { apiVersion = apiVersionValue; } // Read kind else if (TryKind(reader, scalar, out string kindValue)) { kind = kindValue; } // Read metadata else if (TryMetadata(reader, scalar, nestedObjectDeserializer, out ResourceMetadata metadataValue)) { metadata = metadataValue; } // Read spec else if (apiVersion != null && kind != null && TrySpec(reader, scalar, apiVersion, kind, nestedObjectDeserializer, metadata, comment, out IResource resource)) { result = resource; } else { reader.SkipThisAndNestedEvents(); } } reader.Require <MappingEnd>(); reader.MoveNext(); } return(result); }