Skip to main content

maid-validator-csharp

CI PyPI Python

A C# (.cs) language validator plugin for MAID Runner, backed by tree-sitter-c-sharp.

It registers through MAID Runner's maid_runner.validators entry point, so once installed alongside maid-runner, maid validate / maid snapshot / maid bootstrap handle .cs files with no core changes. This follows MAID Runner's validator plugin authoring support boundary: new languages ship as external packages.

Install

pip install maid-validator-csharp
# or, for local development against a checked-out maid-runner:
uv pip install -e ../maid-runner -e .

Confirm it is active:

maid validators
# CSharpValidator   .cs   maid-validator-csharp <ver>   active

What it collects

C# constructs are mapped onto MAID's language-neutral artifact kinds:

C# construct MAID kind Notes
namespace (block and file-scoped) namespace
class, struct, record, record struct class bases = base type + implemented interfaces
interface interface members are implicitly public
enum enum
delegate type records args + return type
method / constructor method of = declaring type; captures args (name/type/default), returns, generic type_parameters, async
property / field attribute of = declaring type; captures the declared type
top-level local function function

Only the public API surface is emitted — public/protected members and public types, interface members, and top-level local functions. private/internal/implicitly-private members are dropped, and leading-underscore names are treated as private (excluded from snapshots).

Behavioral collection (from test files) emits test_function markers for xUnit/NUnit/MSTest methods ([Fact], [Theory], [Test], [TestMethod], …) and identity references for the types (new Widget()) and methods (Calc.Add(...), Render(...)) those tests exercise.

Development

uv sync            # installs the locked published dependency graph
uv run pytest -v   # runs the MAID conformance kit + hand-written suites
uv run ruff check src/ tests/
uv run black --check src/ tests/

Version 0.2.0 requires MAID Runner 2.24 or newer. That release provides the language-aware type-comparison and exact callable-signature contracts used by the plugin. Package and CI resolution use published dependencies; local editable Runner checkouts are optional development tooling only.

C# type comparison

Manifest comparison accepts equivalent C# source spellings without changing the raw types emitted by collection or snapshots. Supported equivalences are:

  • every built-in C# keyword/CLR type pair, including native integers and dynamic/System.Object;
  • global:: qualification and explicit List, Dictionary, Task, and Nullable BCL qualifications;
  • nested generics, nullable known value types, nullable annotations on known reference types, arrays and their ranks, and tuple element names.

Comparison remains conservative without compiler evidence. Arbitrary custom names do not collapse across namespaces, unknown T? or Widget? forms stay distinct from their unannotated form, and array suffix order, tuple position, and tuple arity remain significant. Pointer and function-pointer spellings use a deterministic lexical comparison when they fall outside the structured subset.

The MAID conformance kit (tests/test_conformance.py) is the acceptance bar: it proves the collector cannot manufacture false-green validation for C#.

Exact overload definitions

Methods, constructors, and top-level functions expose canonical definition signatures so manifests can select an exact overload. Identity includes method generic arity, canonical parameter types, C# by-reference semantics, explicit-interface qualification, and __arglist. Raw argument and return spellings remain source-shaped. Syntax-only behavioral calls intentionally stay unsigned because tree-sitter cannot bind a call to a compiler-selected overload; that semantic path remains reserved for optional Roslyn integration.

See CHANGELOG.md for release history and RELEASING.md for the trusted-publishing procedure.

Known limitations

  • Semantic type identity: syntax-level comparison cannot determine whether an arbitrary custom type is a value type, resolve aliases/usings, or prove compiler-bound identity. Those cases remain exact until the optional Roslyn semantic path is implemented.
  • Module identity: C# module identity is the in-file namespace, not a path-derived module, so cross-file using/namespace resolution is not yet performed; behavioral matching binds on kind/name/parent.
  • Partial classes are collected per file; cross-file merging is MAID Runner's responsibility via manifest chains.
  • Parser fidelity is bounded by the tree-sitter-c-sharp grammar. Unparseable or unsupported syntax yields a CollectionResult with errors and no artifacts (never a crash).

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

maid_validator_csharp-0.2.0.tar.gz (25.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

maid_validator_csharp-0.2.0-py3-none-any.whl (16.0 kB view details)

Uploaded Python 3

File details

Details for the file maid_validator_csharp-0.2.0.tar.gz.

File metadata

  • Download URL: maid_validator_csharp-0.2.0.tar.gz
  • Upload date:
  • Size: 25.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for maid_validator_csharp-0.2.0.tar.gz
Algorithm Hash digest
SHA256 ec5b9cc8003713068215ef3b2ac601b250b4a8880f21710ea79e27cf3fe307aa
MD5 064e70802331fe528fad65cf5a5ce97c
BLAKE2b-256 f09f00b44b2256b7eb0a9053ccc1e90aee708854cabcf35143afb610b37d2fab

See more details on using hashes here.

Provenance

The following attestation bundles were made for maid_validator_csharp-0.2.0.tar.gz:

Publisher: publish.yml on mamertofabian/maid-validator-csharp

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file maid_validator_csharp-0.2.0-py3-none-any.whl.

File metadata

File hashes

Hashes for maid_validator_csharp-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 b4f47c7652fb43626233444a7daa51da45a7187e5781a0e426ddcc429257cd09
MD5 a9504f76ef96cb95e7e5848a0840c84a
BLAKE2b-256 08ba6097e8a9ff4e9a66224a198c24fe299dfe83c1c9883a964c3be8d873f282

See more details on using hashes here.

Provenance

The following attestation bundles were made for maid_validator_csharp-0.2.0-py3-none-any.whl:

Publisher: publish.yml on mamertofabian/maid-validator-csharp

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

This release

0.2.0 This release

2 files

0.1.0

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page