Пример #1
0
        public IEnumerable <StructuralError> TryImportConstants(ModuleContext context)
        {
            if (alias != null)
            {
                return(Enumerable.Empty <StructuralError>());
            }
            IKontrolModule module = context.FindModule(fromModule);

            if (module == null)
            {
                return(new StructuralError(
                           StructuralError.ErrorType.NoSuchModule,
                           $"Module '{fromModule}' not found",
                           Start,
                           End
                           ).Yield());
            }
            foreach (string name in names ?? module.AllConstantNames)
            {
                IKontrolConstant constant = module.FindConstant(name);

                if (constant != null)
                {
                    context.mappedConstants.Add(name, constant);
                }
            }

            return(Enumerable.Empty <StructuralError>());
        }
Пример #2
0
        public static void GenerateDocs(ModuleContext moduleContext, IKontrolModule module, TextWriter output)
        {
            output.WriteLine("---");
            output.WriteLine($"title: \"{module.Name}\"");
            output.WriteLine("---");
            output.WriteLine();
            output.WriteLine(module.Description);

            if (module.AllTypeNames.Any())
            {
                output.WriteLine();
                output.WriteLine("# Types");
                output.WriteLine();

                foreach (string typeName in module.AllTypeNames.OrderBy(name => name))
                {
                    RealizedType type = module.FindType(typeName)?.UnderlyingType(moduleContext);

                    output.WriteLine();
                    output.WriteLine($"## {typeName}");
                    output.WriteLine();
                    output.WriteLine(type.Description);

                    if (type.DeclaredFields.Count > 0)
                    {
                        output.WriteLine();
                        output.WriteLine("### Fields");
                        output.WriteLine();

                        output.WriteLine("Name | Type | Description");
                        output.WriteLine("--- | --- | ---");

                        foreach (var kv in type.DeclaredFields.OrderBy(kv => kv.Key))
                        {
                            output.WriteLine(
                                $"{kv.Key} | {kv.Value.DeclaredType} | {kv.Value.Description?.Replace("\n", " ")}");
                        }
                    }

                    if (type.DeclaredMethods.Count > 0)
                    {
                        output.WriteLine();
                        output.WriteLine("### Methods");

                        foreach (var kv in type.DeclaredMethods.OrderBy(kv => kv.Key))
                        {
                            output.WriteLine();
                            output.WriteLine($"#### {kv.Key}");
                            output.WriteLine();
                            output.WriteLine("```rust");
                            output.WriteLine(MethodSignature(type.LocalName, kv.Key, kv.Value));
                            output.WriteLine("```");
                            output.WriteLine();
                            output.WriteLine(kv.Value.Description);
                        }
                    }
                }
            }

            if (module.AllConstantNames.Any())
            {
                output.WriteLine();
                output.WriteLine("# Constants");
                output.WriteLine();

                output.WriteLine("Name | Type | Description");
                output.WriteLine("--- | --- | ---");
                foreach (string constantName in module.AllConstantNames.OrderBy(name => name))
                {
                    IKontrolConstant constant = module.FindConstant(constantName);

                    output.WriteLine($"{constantName} | {constant.Type} | {constant.Description?.Replace("\n", " ")}");
                }

                output.WriteLine();
            }

            if (module.AllFunctionNames.Any())
            {
                output.WriteLine();
                output.WriteLine("# Functions");
                output.WriteLine();

                foreach (string functionName in module.AllFunctionNames.OrderBy(name => name))
                {
                    IKontrolFunction function = module.FindFunction(functionName);

                    output.WriteLine();
                    output.WriteLine($"## {functionName}");
                    output.WriteLine();
                    output.WriteLine("```rust");
                    output.WriteLine(FunctionSignature(function));
                    output.WriteLine("```");
                    output.WriteLine();
                    output.WriteLine(function.Description);
                }
            }
        }