Vixen
02b45cc4
csharp
public sealed class ComponentEmitter

Turns a BoundComponent into the C# partial class that builds it.

No guide page documents this yet — the page shows what the code says about itself.

Remarks

Per ADR-010 the output is imperative construction code, not a virtual DOM: one statement per element, one effect per dynamic expression. Setting a signal invalidates exactly that effect, which assigns exactly that property — no tree walk and no diff.

Every fragment of C# that came from the .vxml is emitted under a #line span directive. That is the detail the whole approach rests on: it is what lets the binder do no type resolution at all, because a misspelt component, an unknown parameter and a wrong expression type are then reported by Roslyn against the exact characters the author wrote — not against generated code they have never seen.

The directives use the span form (#line (l,c)-(l,c) offset "file") rather than the line form. The line form would land a squiggle at the start of a generated line, which for ctx.Bind(n3, "class", () => kind) is several tokens away from the one word that came out of the markup.

Fields and properties (1)

  • public const string RuntimeNamespace

    The namespace the generated code expects its runtime in.

Methods (1)

  • public static string Emit(BoundComponent component, string filePath, string? namespace = null)

    Emits a bound component as C#.

Used by (2)

  • EmitterTestsVixen.Ui.Markup.Tests
  • VxmlGeneratorVixen.Ui.Markup.Generators