コード例 #1
0
 public CSharpWriter(ISyntaxWriter writer, ICciFilter filter, bool apiOnly, bool writeAssemblyAttributes = false)
     : base(filter)
 {
     _syntaxWriter = writer;
     _styleWriter = writer as IStyleSyntaxWriter;
     _declarationWriter = new CSDeclarationWriter(_syntaxWriter, filter, !apiOnly);
     _writeAssemblyAttributes = writeAssemblyAttributes;
 }
コード例 #2
0
ファイル: CSDeclarationWriter.cs プロジェクト: wfurt/arcade
 public CSDeclarationWriter(ISyntaxWriter writer, ICciFilter filter, bool forCompilation)
 {
     Contract.Requires(writer != null);
     _writer = writer;
     _filter = filter;
     _forCompilation = forCompilation;
     _forCompilationIncludeGlobalprefix = false;
     _platformNotSupportedExceptionMessage = null;
     _includeFakeAttributes = false;
     _alwaysIncludeBase = false;
 }
コード例 #3
0
        public static void WriteValue(
            this ISyntaxWriter writer,
            IValueNode node)
        {
            if (node is null)
            {
                return;
            }

            switch (node.Kind)
            {
            case NodeKind.IntValue:
                WriteIntValue(writer, (IntValueNode)node);
                break;

            case NodeKind.FloatValue:
                WriteFloatValue(writer, (FloatValueNode)node);
                break;

            case NodeKind.StringValue:
                WriteStringValue(writer, (StringValueNode)node);
                break;

            case NodeKind.BooleanValue:
                WriteBooleanValue(writer, (BooleanValueNode)node);
                break;

            case NodeKind.EnumValue:
                WriteEnumValue(writer, (EnumValueNode)node);
                break;

            case NodeKind.NullValue:
                WriteNullValue(writer);
                break;

            case NodeKind.ListValue:
                WriteListValue(writer, (ListValueNode)node);
                break;

            case NodeKind.ObjectValue:
                WriteObjectValue(writer, (ObjectValueNode)node);
                break;

            case NodeKind.Variable:
                WriteVariable(writer, (VariableNode)node);
                break;

            default:
                throw new NotSupportedException();
            }
        }
コード例 #4
0
        public override async Task WriteAsync(ISyntaxWriter writer, CancellationToken cancellationToken)
        {
            if (writer == null)
            {
                throw new ArgumentNullException(nameof(writer));
            }

            await writer.WriteCommentAsync($"PDF-{MajorVersion}.{MinorVersion}", cancellationToken);

            if (DocumentType == DocumentType.Binary)
            {
                await writer.WriteCommentAsync(BinaryMarker, cancellationToken);
            }
        }
コード例 #5
0
        private void VisitSchemaDefinitionBase(SchemaDefinitionNodeBase node, ISyntaxWriter writer)
        {
            writer.Write(Keywords.Schema);
            WriteDirectives(node.Directives, writer);

            WriteLeftBrace(writer);

            writer.Indent();
            writer.WriteMany(
                node.OperationTypes,
                VisitOperationTypeDefinition,
                WriteLineOrSpace);
            writer.Unindent();

            WriteRightBrace(writer);
        }
コード例 #6
0
        public static void WriteMany <T>(
            this ISyntaxWriter writer,
            IReadOnlyList <T> items,
            Action <T, ISyntaxWriter> action,
            Action <ISyntaxWriter> separator)
        {
            if (items.Count > 0)
            {
                action(items[0], writer);

                for (int i = 1; i < items.Count; i++)
                {
                    separator(writer);
                    action(items[i], writer);
                }
            }
        }
コード例 #7
0
        private void VisitUnionTypeDefinitionBase(
            UnionTypeDefinitionNodeBase node,
            ISyntaxWriter writer)
        {
            writer.Write(Keywords.Union);
            writer.WriteSpace();
            writer.WriteName(node.Name);

            WriteDirectives(node.Directives, writer);

            writer.WriteSpace();
            writer.Write('=');
            writer.WriteSpace();

            writer.WriteMany(node.Types,
                             (n, w) => writer.WriteNamedType(n),
                             " | ");
        }
コード例 #8
0
        public static void WriteList <T>(this ISyntaxWriter writer, IEnumerable <T> list, Action <T> writeItem, string delimiter = ",", bool addSpaceAfterDelimiter = true)
        {
            bool first = true;

            foreach (T t in list)
            {
                if (!first)
                {
                    writer.WriteSymbol(delimiter);
                    if (addSpaceAfterDelimiter)
                    {
                        writer.WriteSpace();
                    }
                }

                writeItem(t);

                first = false;
            }
        }
コード例 #9
0
        private void VisitEnumTypeDefinitionBase(
            EnumTypeDefinitionNodeBase node,
            ISyntaxWriter writer)
        {
            writer.Write(Keywords.Enum);
            writer.WriteSpace();
            writer.WriteName(node.Name);

            WriteDirectives(node.Directives, writer);

            WriteLeftBrace(writer);

            writer.Indent();
            writer.WriteMany(
                node.Values,
                VisitEnumValueDefinition,
                WriteLineOrSpace);
            writer.Unindent();

            WriteRightBrace(writer);
        }
コード例 #10
0
        public static void WriteSyntaxToken(this ISyntaxWriter writer, SyntaxToken token)
        {
            switch (token.Type)
            {
            default:
            case SyntaxTokenType.Literal:
                writer.Write(token.Token); break;

            case SyntaxTokenType.Symbol:
                writer.WriteSymbol(token.Token); break;

            case SyntaxTokenType.Identifier:
                writer.WriteIdentifier(token.Token); break;

            case SyntaxTokenType.Keyword:
                writer.WriteKeyword(token.Token); break;

            case SyntaxTokenType.TypeName:
                writer.WriteTypeName(token.Token); break;
            }
        }
コード例 #11
0
        public static IDisposable StartBraceBlock(this ISyntaxWriter writer, bool onNewLine)
        {
            if (onNewLine)
            {
                writer.WriteLine();
            }
            else
            {
                writer.WriteSpace();
            }

            writer.WriteSymbol("{");
            writer.WriteLine();
            writer.IndentLevel++;
            return(new Block(() =>
            {
                writer.IndentLevel--;
                writer.WriteSymbol("}");
                writer.WriteLine();
            }));
        }
コード例 #12
0
        private void VisitInputObjectTypeDefinitionBase(
            InputObjectTypeDefinitionNodeBase node,
            ISyntaxWriter writer)
        {
            writer.Write(Keywords.Input);
            writer.WriteSpace();
            writer.WriteName(node.Name);

            WriteDirectives(node.Directives, writer);

            WriteLeftBrace(writer);

            writer.Indent();
            writer.WriteMany(
                node.Fields,
                VisitInputValueDefinition,
                WriteLineOrSpace);
            writer.Unindent();

            WriteRightBrace(writer);
        }
コード例 #13
0
        private void VisitDocument(DocumentNode node, ISyntaxWriter writer)
        {
            if (node.Definitions.Count > 0)
            {
                VisitDefinition(node.Definitions[0], writer);

                for (int i = 1; i < node.Definitions.Count; i++)
                {
                    if (_indented)
                    {
                        writer.WriteLine();
                        writer.WriteLine();
                    }
                    else
                    {
                        writer.WriteSpace();
                    }

                    VisitDefinition(node.Definitions[i], writer);
                }
            }
        }
コード例 #14
0
        private void VisitDirectiveDefinition(
            DirectiveDefinitionNode node,
            ISyntaxWriter writer)
        {
            WriteDescription(node.Description, writer);

            writer.Write(Keywords.Directive);
            writer.WriteSpace();
            writer.Write('@');
            writer.WriteName(node.Name);

            if (node.Arguments.Count > 0)
            {
                writer.Write("(");
                writer.WriteMany(
                    node.Arguments,
                    VisitArgumentValueDefinition,
                    w => w.WriteSpace());
                writer.Write(")");
            }

            writer.WriteSpace();

            if (node.IsRepeatable)
            {
                writer.Write(Keywords.Repeatable);
                writer.WriteSpace();
            }

            writer.Write(Keywords.On);
            writer.WriteSpace();

            writer.WriteMany(node.Locations,
                             (n, w) => writer.WriteName(n),
                             " | ");
        }
コード例 #15
0
 private void VisitObjectTypeDefinition(ObjectTypeDefinitionNode node, ISyntaxWriter writer)
 {
     WriteDescription(node.Description, writer);
     VisitObjectTypeDefinitionBase(node, writer);
 }
コード例 #16
0
 private void VisitArgumentValueDefinition(
     InputValueDefinitionNode node,
     ISyntaxWriter writer)
 {
     if (node.Description is { })
コード例 #17
0
 public static void WriteSpace(this ISyntaxWriter writer)
 {
     writer.Write(" ");
 }
コード例 #18
0
 private static void WriteAccessor(ISyntaxWriter syntaxWriter, IMethodDefinition method)
 {
     var accessorKeyword = GetAccessorKeyword(method);
     syntaxWriter.WriteKeyword(accessorKeyword);
     syntaxWriter.WriteSymbol(";");
 }
コード例 #19
0
 /// <summary>
 /// Generate the document syntax for this element.
 /// </summary>
 /// <param name="writer">
 /// The <see cref="ISyntaxWriter"/> to output the syntax of this element.
 /// </param>
 /// <param name="cancellationToken">
 /// The token to monitor for cancellation requests.
 /// </param>
 /// <returns>
 /// A <see cref="Task"/> that represents the asynchronous write operation.
 /// </returns>
 /// <exception cref="ArgumentNullException">
 /// <paramref name="writer"/> is <c>null</c>.
 /// </exception>
 public abstract Task WriteAsync(ISyntaxWriter writer, CancellationToken cancellationToken);
コード例 #20
0
 public static IDisposable StartBraceBlock(this ISyntaxWriter writer)
 {
     return(StartBraceBlock(writer, false));
 }
コード例 #21
0
 private void VisitSchemaExtension(SchemaExtensionNode node, ISyntaxWriter writer)
 {
     writer.Write(Keywords.Extend);
     writer.WriteSpace();
     VisitSchemaDefinitionBase(node, writer);
 }
コード例 #22
0
        public void Serialize(ISyntaxNode node, ISyntaxWriter writer)
        {
            switch (node.Kind)
            {
            case SyntaxKind.Name:
                writer.WriteName((NameNode)node);
                break;

            case SyntaxKind.Document:
                VisitDocument((DocumentNode)node, writer);
                break;

            case SyntaxKind.OperationDefinition:
                VisitOperationDefinition((OperationDefinitionNode)node, writer);
                break;

            case SyntaxKind.VariableDefinition:
                VisitVariableDefinition((VariableDefinitionNode)node, writer);
                break;

            case SyntaxKind.Variable:
                writer.WriteVariable((VariableNode)node);
                break;

            case SyntaxKind.SelectionSet:
                VisitSelectionSet((SelectionSetNode)node, writer);
                break;

            case SyntaxKind.Field:
                VisitField((FieldNode)node, writer);
                break;

            case SyntaxKind.Argument:
                writer.WriteArgument((ArgumentNode)node);
                break;

            case SyntaxKind.FragmentSpread:
                VisitFragmentSpread((FragmentSpreadNode)node, writer);
                break;

            case SyntaxKind.InlineFragment:
                VisitInlineFragment((InlineFragmentNode)node, writer);
                break;

            case SyntaxKind.FragmentDefinition:
                VisitFragmentDefinition((FragmentDefinitionNode)node, writer);
                break;

            case SyntaxKind.Directive:
                writer.WriteDirective((DirectiveNode)node);
                break;

            case SyntaxKind.NamedType:
            case SyntaxKind.ListType:
            case SyntaxKind.NonNullType:
                writer.WriteType((ITypeNode)node);
                break;

            case SyntaxKind.ListValue:
            case SyntaxKind.ObjectValue:
            case SyntaxKind.BooleanValue:
            case SyntaxKind.EnumValue:
            case SyntaxKind.FloatValue:
            case SyntaxKind.IntValue:
            case SyntaxKind.NullValue:
            case SyntaxKind.StringValue:
                writer.WriteValue((IValueNode)node);
                break;

            case SyntaxKind.ObjectField:
                writer.WriteObjectField((ObjectFieldNode)node);
                break;

            case SyntaxKind.SchemaDefinition:
                VisitSchemaDefinition((SchemaDefinitionNode)node, writer);
                break;

            case SyntaxKind.OperationTypeDefinition:
                VisitOperationTypeDefinition((OperationTypeDefinitionNode)node, writer);
                break;

            case SyntaxKind.ScalarTypeDefinition:
                VisitScalarTypeDefinition((ScalarTypeDefinitionNode)node, writer);
                break;

            case SyntaxKind.ObjectTypeDefinition:
                VisitObjectTypeDefinition((ObjectTypeDefinitionNode)node, writer);
                break;

            case SyntaxKind.FieldDefinition:
                VisitFieldDefinition((FieldDefinitionNode)node, writer);
                break;

            case SyntaxKind.InputValueDefinition:
                VisitInputValueDefinition((InputValueDefinitionNode)node, writer);
                break;

            case SyntaxKind.InterfaceTypeDefinition:
                VisitInterfaceTypeDefinition((InterfaceTypeDefinitionNode)node, writer);
                break;

            case SyntaxKind.UnionTypeDefinition:
                VisitUnionTypeDefinition((UnionTypeDefinitionNode)node, writer);
                break;

            case SyntaxKind.EnumTypeDefinition:
                VisitEnumTypeDefinition((EnumTypeDefinitionNode)node, writer);
                break;

            case SyntaxKind.EnumValueDefinition:
                VisitEnumValueDefinition((EnumValueDefinitionNode)node, writer);
                break;

            case SyntaxKind.InputObjectTypeDefinition:
                VisitInputObjectTypeDefinition((InputObjectTypeDefinitionNode)node, writer);
                break;

            case SyntaxKind.DirectiveDefinition:
                VisitDirectiveDefinition((DirectiveDefinitionNode)node, writer);
                break;

            case SyntaxKind.SchemaExtension:
                VisitSchemaExtension((SchemaExtensionNode)node, writer);
                break;

            case SyntaxKind.ScalarTypeExtension:
                VisitScalarTypeExtension((ScalarTypeExtensionNode)node, writer);
                break;

            case SyntaxKind.ObjectTypeExtension:
                VisitObjectTypeExtension((ObjectTypeExtensionNode)node, writer);
                break;

            case SyntaxKind.InterfaceTypeExtension:
                VisitInterfaceTypeExtension((InterfaceTypeExtensionNode)node, writer);
                break;

            case SyntaxKind.UnionTypeExtension:
                VisitUnionTypeExtension((UnionTypeExtensionNode)node, writer);
                break;

            case SyntaxKind.EnumTypeExtension:
                VisitEnumTypeExtension((EnumTypeExtensionNode)node, writer);
                break;

            case SyntaxKind.InputObjectTypeExtension:
                VisitInputObjectTypeExtension((InputObjectTypeExtensionNode)node, writer);
                break;

            default:
                ThrowHelper.NodeKindIsNotSupported(node.Kind);
                break;
            }
        }
コード例 #23
0
 public static void WriteName(this ISyntaxWriter writer, NameNode nameNode)
 {
     writer.Write(nameNode.Value);
 }
コード例 #24
0
 private void VisitObjectTypeExtension(ObjectTypeExtensionNode node, ISyntaxWriter writer)
 {
     writer.Write(Keywords.Extend);
     writer.WriteSpace();
     VisitObjectTypeDefinitionBase(node, writer);
 }
コード例 #25
0
 public static void WriteFloatValue(this ISyntaxWriter writer, FloatValueNode node)
 {
     writer.Write(node.Value);
 }
コード例 #26
0
 private void VisitSchemaDefinition(SchemaDefinitionNode node, ISyntaxWriter writer)
 {
     WriteDescription(node.Description, writer);
     VisitSchemaDefinitionBase(node, writer);
 }
コード例 #27
0
        private void VisitDefinition(IDefinitionNode node, ISyntaxWriter writer)
        {
            switch (node.Kind)
            {
            case SyntaxKind.OperationDefinition:
                VisitOperationDefinition((OperationDefinitionNode)node, writer);
                break;

            case SyntaxKind.FragmentDefinition:
                VisitFragmentDefinition((FragmentDefinitionNode)node, writer);
                break;

            case SyntaxKind.SchemaDefinition:
                VisitSchemaDefinition((SchemaDefinitionNode)node, writer);
                break;

            case SyntaxKind.DirectiveDefinition:
                VisitDirectiveDefinition((DirectiveDefinitionNode)node, writer);
                break;

            case SyntaxKind.ScalarTypeDefinition:
                VisitScalarTypeDefinition((ScalarTypeDefinitionNode)node, writer);
                break;

            case SyntaxKind.ObjectTypeDefinition:
                VisitObjectTypeDefinition((ObjectTypeDefinitionNode)node, writer);
                break;

            case SyntaxKind.InputObjectTypeDefinition:
                VisitInputObjectTypeDefinition((InputObjectTypeDefinitionNode)node, writer);
                break;

            case SyntaxKind.InterfaceTypeDefinition:
                VisitInterfaceTypeDefinition((InterfaceTypeDefinitionNode)node, writer);
                break;

            case SyntaxKind.UnionTypeDefinition:
                VisitUnionTypeDefinition((UnionTypeDefinitionNode)node, writer);
                break;

            case SyntaxKind.EnumTypeDefinition:
                VisitEnumTypeDefinition((EnumTypeDefinitionNode)node, writer);
                break;

            case SyntaxKind.SchemaExtension:
                VisitSchemaExtension((SchemaExtensionNode)node, writer);
                break;

            case SyntaxKind.ScalarTypeExtension:
                VisitScalarTypeExtension((ScalarTypeExtensionNode)node, writer);
                break;

            case SyntaxKind.ObjectTypeExtension:
                VisitObjectTypeExtension((ObjectTypeExtensionNode)node, writer);
                break;

            case SyntaxKind.InterfaceTypeExtension:
                VisitInterfaceTypeExtension((InterfaceTypeExtensionNode)node, writer);
                break;

            case SyntaxKind.UnionTypeExtension:
                VisitUnionTypeExtension((UnionTypeExtensionNode)node, writer);
                break;

            case SyntaxKind.EnumTypeExtension:
                VisitEnumTypeExtension((EnumTypeExtensionNode)node, writer);
                break;

            case SyntaxKind.InputObjectTypeExtension:
                VisitInputObjectTypeExtension((InputObjectTypeExtensionNode)node, writer);
                break;

            default:
                ThrowHelper.NodeKindIsNotSupported(node.Kind);
                break;
            }
        }
コード例 #28
0
 private static void WriteEscapeCharacter(
     ISyntaxWriter writer, in char c)
コード例 #29
0
 public CSDeclarationWriter(ISyntaxWriter writer)
     : this(writer, new PublicOnlyCciFilter())
 {
 }
コード例 #30
0
 public CSDeclarationWriter(ISyntaxWriter writer, ICciFilter filter)
     : this(writer, filter, true)
 {
 }
コード例 #31
0
 public CSDeclarationWriter(ISyntaxWriter writer, ICciFilter filter, bool forCompilation, bool includePseudoCustomAttributes = false)
     : this(writer, filter, forCompilation)
 {
     _includeFakeAttributes = includePseudoCustomAttributes;
 }
コード例 #32
0
 public TypeListWriter(ISyntaxWriter writer, ICciFilter filter)
     : base(filter)
 {
     _syntaxWriter      = writer;
     _declarationWriter = new CSDeclarationWriter(_syntaxWriter, filter, false);
 }
コード例 #33
0
 public TypeListWriter(ISyntaxWriter writer, ICciFilter filter)
     : base(filter)
 {
     _syntaxWriter = writer;
     _declarationWriter = new CSDeclarationWriter(_syntaxWriter, filter, false);
 }