Example #1
0
        /// <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);
        }
Example #2
0
        /// <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);
        }
Example #3
0
        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);
        }
Example #4
0
        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);
        }
Example #5
0
        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));
        }
Example #6
0
        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));
        }
Example #7
0
        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);
        }