public static SpanConstructor AsDirectiveToken(this SpanConstructor self, DirectiveTokenDescriptor descriptor) { return(self .With(new DirectiveTokenChunkGenerator(descriptor)) .With(new DirectiveTokenEditHandler((content) => SpanConstructor.TestTokenizer(content))) .Accepts(AcceptedCharactersInternal.NonWhiteSpace)); }
public void WriteDesignTimeDirective_ChildrenWithNoSource_WritesEmptyMethod_WithPragma() { // Arrange var extension = new DesignTimeDirectiveTargetExtension(); var context = TestCodeRenderingContext.CreateDesignTime(); var node = new DesignTimeDirectiveIntermediateNode(); var token = new DirectiveTokenIntermediateNode() { Content = "Value", DirectiveToken = DirectiveTokenDescriptor.CreateToken(DirectiveTokenKind.String), }; node.Children.Add(token); // Act extension.WriteDesignTimeDirective(context, node); // Assert var csharp = context.CodeWriter.GenerateCode(); Assert.Equal( @"#pragma warning disable 219 private void __RazorDirectiveTokenHelpers__() { } #pragma warning restore 219 ", csharp, ignoreLineEndingDifferences: true); }
public void InheritsBlockOutputsErrorIfInheritsNotFollowedByTypeButAcceptsEntireLineAsCode() { // Arrange var chunkGenerator = new DirectiveChunkGenerator(InheritsDirective.Directive); chunkGenerator.Diagnostics.Add( RazorDiagnostic.Create( new RazorError( LegacyResources.FormatDirectiveExpectsTypeName(InheritsDirective.Directive.Directive), 25, 0, 25, Environment.NewLine.Length))); // Act & Assert ParseDocumentTest( "@inherits " + Environment.NewLine + "foo", new[] { InheritsDirective.Directive }, new MarkupBlock( Factory.EmptyHtml(), new DirectiveBlock(chunkGenerator, Factory.CodeTransition(), Factory.MetaCode("inherits").Accepts(AcceptedCharactersInternal.None), Factory.Span(SpanKindInternal.Code, " ", CSharpSymbolType.WhiteSpace).Accepts(AcceptedCharactersInternal.WhiteSpace), Factory.Span(SpanKindInternal.Code, string.Empty, CSharpSymbolType.Unknown) .AsDirectiveToken(DirectiveTokenDescriptor.CreateToken(DirectiveTokenKind.Type))), Factory.Markup(Environment.NewLine + "foo"))); }
public void WriteDesignTimeDirective_WithNamespaceToken_WritesLambda() { // Arrange var extension = new DesignTimeDirectiveTargetExtension(); var context = TestCodeRenderingContext.CreateDesignTime(); var node = new DesignTimeDirectiveIntermediateNode(); var token = new DirectiveTokenIntermediateNode() { Source = new SourceSpan("test.cshtml", 0, 0, 0, 5), Content = "System.Collections.Generic", DirectiveToken = DirectiveTokenDescriptor.CreateToken(DirectiveTokenKind.Namespace), }; node.Children.Add(token); // Act extension.WriteDesignTimeDirective(context, node); // Assert var csharp = context.CodeWriter.GenerateCode(); Assert.Equal( @"#pragma warning disable 219 private void __RazorDirectiveTokenHelpers__() { ((System.Action)(() => { global::System.Object __typeHelper = nameof(System.Collections.Generic); } ))(); } #pragma warning restore 219 ", csharp, ignoreLineEndingDifferences: true); }
public void WriteDesignTimeDirective_WithStringToken_WritesLambda() { // Arrange var extension = new DesignTimeDirectiveTargetExtension(); var context = TestCodeRenderingContext.CreateDesignTime(); var node = new DesignTimeDirectiveIntermediateNode(); var token = new DirectiveTokenIntermediateNode() { Source = new SourceSpan("test.cshtml", 0, 0, 0, 5), Content = "Value", DirectiveToken = DirectiveTokenDescriptor.CreateToken(DirectiveTokenKind.String), }; var tokenWithQuotedContent = new DirectiveTokenIntermediateNode() { Source = new SourceSpan("test.cshtml", 0, 0, 0, 5), Content = "\"Value\"", DirectiveToken = DirectiveTokenDescriptor.CreateToken(DirectiveTokenKind.String), }; node.Children.Add(token); node.Children.Add(tokenWithQuotedContent); // Act extension.WriteDesignTimeDirective(context, node); // Assert var csharp = context.CodeWriter.GenerateCode(); Assert.Equal( @"#pragma warning disable 219 private void __RazorDirectiveTokenHelpers__() { ((System.Action)(() => { #nullable restore #line 1 ""test.cshtml"" global::System.Object __typeHelper = ""Value""; #line default #line hidden #nullable disable } ))(); ((System.Action)(() => { #nullable restore #line 1 ""test.cshtml"" global::System.Object __typeHelper = ""Value""; #line default #line hidden #nullable disable } ))(); } #pragma warning restore 219 ", csharp, ignoreLineEndingDifferences: true); }
public static IDirectiveDescriptorBuilder AddTypeToken(this IDirectiveDescriptorBuilder builder, string name, string description) { if (builder == null) { throw new ArgumentNullException(nameof(builder)); } builder.Tokens.Add( DirectiveTokenDescriptor.CreateToken( DirectiveTokenKind.Type, optional: false, name: name, description: description)); return(builder); }
public static IDirectiveDescriptorBuilder AddOptionalGenericTypeConstraintToken(this IDirectiveDescriptorBuilder builder, string name, string description) { if (builder == null) { throw new ArgumentNullException(nameof(builder)); } builder.Tokens.Add( DirectiveTokenDescriptor.CreateToken( DirectiveTokenKind.GenericTypeConstraint, optional: true, name: name, description: description)); return(builder); }
public void ParseInheritsStatementMarksInheritsSpanAsCanGrowIfMissingTrailingSpace() { // Arrange var chunkGenerator = new DirectiveChunkGenerator(InheritsDirective.Directive); chunkGenerator.Diagnostics.Add( RazorDiagnosticFactory.CreateParsing_UnexpectedEOFAfterDirective( new SourceSpan(new SourceLocation(9, 0, 9), 1), InheritsDirective.Directive.Directive, "type")); // Act & Assert ParseDocumentTest( "@inherits", new[] { InheritsDirective.Directive }, new MarkupBlock( Factory.EmptyHtml(), new DirectiveBlock(chunkGenerator, Factory.CodeTransition(), Factory.MetaCode("inherits").Accepts(AcceptedCharactersInternal.None), Factory.Span(SpanKindInternal.Code, string.Empty, CSharpSymbolType.Unknown) .AsDirectiveToken(DirectiveTokenDescriptor.CreateToken(DirectiveTokenKind.Type))), Factory.EmptyHtml())); }
public DirectiveTokenChunkGenerator(DirectiveTokenDescriptor tokenDescriptor) { Descriptor = tokenDescriptor; }