diff --git a/CLAUDE.md b/CLAUDE.md index 718d4ca..26e2a14 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -43,7 +43,7 @@ CI targets both .NET 8.0 and .NET 10.0 SDKs. 1. **Compile-time (source generation):** Two incremental generators in `ExpressiveSharp.Generator` (targets netstandard2.0): - `ExpressiveGenerator` — finds `[Expressive]` members, validates them via `ExpressiveInterpreter`, emits expression trees via `ExpressionTreeEmitter`, and builds a runtime registry via `ExpressionRegistryEmitter` - - `PolyfillInterceptorGenerator` — uses C# 13 `[InterceptsLocation]` to rewrite `ExpressionPolyfill.Create()` and `IRewritableQueryable` LINQ call sites from delegate form to expression tree form. Supports all standard `Queryable` methods, multi-lambda methods (Join, GroupJoin, GroupBy overloads), non-lambda-first methods (Zip, ExceptBy, etc.), and custom target types via `[PolyfillTarget]` (e.g., EF Core's `EntityFrameworkQueryableExtensions` for async methods) + - `PolyfillInterceptorGenerator` — uses C# 13 `[InterceptsLocation]` to rewrite `ExpressionPolyfill.Create()` and `IExpressiveQueryable` LINQ call sites from delegate form to expression tree form. Supports all standard `Queryable` methods, multi-lambda methods (Join, GroupJoin, GroupBy overloads), non-lambda-first methods (Zip, ExceptBy, etc.), and custom target types via `[PolyfillTarget]` (e.g., EF Core's `EntityFrameworkQueryableExtensions` for async methods) 2. **Runtime:** `ExpressiveResolver` looks up generated expressions by (DeclaringType, MemberName, ParameterTypes). `ExpressiveReplacer` is an `ExpressionVisitor` that substitutes `[Expressive]` member accesses with the generated expression trees. Transformers (in `Transformers/`) post-process trees for provider compatibility. @@ -55,9 +55,9 @@ CI targets both .NET 8.0 and .NET 10.0 SDKs. - `src/ExpressiveSharp.Generator/PolyfillInterceptorGenerator.cs` — interceptor generation. Dedicated emitters for complex methods (Join, GroupJoin, GroupBy multi-lambda), enhanced generic fallback (`EmitGenericSingleLambda`) for single-lambda methods with non-lambda arg forwarding, `[PolyfillTarget]` support for custom target types - `src/ExpressiveSharp/Services/ExpressiveResolver.cs` — runtime expression registry lookup - `src/ExpressiveSharp/PolyfillTargetAttribute.cs` — specifies a non-`Queryable` target type for interceptor forwarding (e.g., `EntityFrameworkQueryableExtensions`) -- `src/ExpressiveSharp/Extensions/RewritableQueryableLinqExtensions.cs` — delegate-based LINQ stubs on `IRewritableQueryable` (~85 intercepted + ~15 passthrough methods) -- `src/ExpressiveSharp.EntityFrameworkCore/Extensions/RewritableQueryableEfCoreExtensions.cs` — EF Core-specific stubs: chain-continuity (AsNoTracking, TagWith, etc.), Include/ThenInclude, and async lambda methods (AnyAsync, SumAsync, etc.) -- `src/ExpressiveSharp.EntityFrameworkCore/IIncludableRewritableQueryable.cs` — hybrid interface bridging `IIncludableQueryable` and `IRewritableQueryable` for Include/ThenInclude chain continuity +- `src/ExpressiveSharp/Extensions/ExpressiveQueryableLinqExtensions.cs` — delegate-based LINQ stubs on `IExpressiveQueryable` (~85 intercepted + ~15 passthrough methods) +- `src/ExpressiveSharp.EntityFrameworkCore/Extensions/ExpressiveQueryableEfCoreExtensions.cs` — EF Core-specific stubs: chain-continuity (AsNoTracking, TagWith, etc.), Include/ThenInclude, and async lambda methods (AnyAsync, SumAsync, etc.) +- `src/ExpressiveSharp.EntityFrameworkCore/IIncludableExpressiveQueryable.cs` — hybrid interface bridging `IIncludableQueryable` and `IExpressiveQueryable` for Include/ThenInclude chain continuity - `src/ExpressiveSharp.EntityFrameworkCore.RelationalExtensions.Abstractions/WindowFunction.cs` — public marker methods for all SQL window functions (ranking, aggregate, navigation). All throw at runtime; translated to SQL by the method call translator - `src/ExpressiveSharp.EntityFrameworkCore.RelationalExtensions.Abstractions/WindowDefinition.cs` — fluent builder types: `PartitionedWindowDefinition` → `OrderedWindowDefinition` → `FramedWindowDefinition`. Type-safe chain ensures ORDER BY before ranking, frame only on aggregates/value functions - `src/ExpressiveSharp.EntityFrameworkCore.RelationalExtensions.Abstractions/WindowFrameBound.cs` — frame boundary markers: `UnboundedPreceding` (property), `Preceding(n)` (method), `CurrentRow` (property), `Following(n)` (method), `UnboundedFollowing` (property) @@ -75,15 +75,22 @@ ExpressiveSharp.Abstractions (attributes + source generator, net8.0;net10.0) ExpressiveSharp (core runtime, net8.0;net10.0) └── ExpressiveSharp.Abstractions Provides: ExpressiveResolver, ExpressiveReplacer, expression transformers, - IRewritableQueryable, ExpressionPolyfill, .ExpandExpressives(), .AsExpressive() + IExpressiveQueryable, ExpressionPolyfill, .ExpandExpressives(), .AsExpressive() ExpressiveSharp.Generator (source generator, netstandard2.0) └── Microsoft.CodeAnalysis.CSharp 5.0.0 +ExpressiveSharp.MongoDB (net8.0;net10.0) + ├── ExpressiveSharp + ├── MongoDB.Driver 3.4.0 + └── Provides: IRewritableMongoQueryable, ExpressiveMongoCollection, + ExpressiveMongoQueryProvider (decorating IQueryProvider/IMongoQueryProvider), + async lambda stubs with [PolyfillTarget(typeof(MongoQueryable))] + ExpressiveSharp.EntityFrameworkCore (net8.0;net10.0) ├── ExpressiveSharp ├── EF Core 8.0.25 / 10.0.0 - └── Provides: ExpressiveDbSet, IIncludableRewritableQueryable, + └── Provides: ExpressiveDbSet, IIncludableExpressiveQueryable, chain-continuity stubs, async lambda stubs with [PolyfillTarget] ExpressiveSharp.EntityFrameworkCore.RelationalExtensions.Abstractions (net8.0;net10.0) diff --git a/benchmarks/ExpressiveSharp.Benchmarks/PolyfillGeneratorBenchmarks.cs b/benchmarks/ExpressiveSharp.Benchmarks/PolyfillGeneratorBenchmarks.cs index f50a9b3..c7c911f 100644 --- a/benchmarks/ExpressiveSharp.Benchmarks/PolyfillGeneratorBenchmarks.cs +++ b/benchmarks/ExpressiveSharp.Benchmarks/PolyfillGeneratorBenchmarks.cs @@ -89,7 +89,7 @@ public class BenchEntity for (var i = 0; i < callSiteCount; i++) { - sb.AppendLine($" public static IQueryable Query{i}(IRewritableQueryable q)"); + sb.AppendLine($" public static IQueryable Query{i}(IExpressiveQueryable q)"); sb.AppendLine($" => q.Select(x => x.Id + {i});"); } diff --git a/docs/.vitepress/config.mts b/docs/.vitepress/config.mts index 468b424..98f1052 100644 --- a/docs/.vitepress/config.mts +++ b/docs/.vitepress/config.mts @@ -52,7 +52,7 @@ export default defineConfig({ { text: 'Extension Members', link: '/guide/extension-members' }, { text: 'Constructor Projections', link: '/guide/expressive-constructors' }, { text: 'ExpressionPolyfill.Create', link: '/guide/expression-polyfill' }, - { text: 'IRewritableQueryable', link: '/guide/rewritable-queryable' }, + { text: 'IExpressiveQueryable', link: '/guide/expressive-queryable' }, { text: 'EF Core Integration', link: '/guide/ef-core-integration' }, ] }, diff --git a/docs/advanced/how-it-works.md b/docs/advanced/how-it-works.md index fb3b986..d0d7a0b 100644 --- a/docs/advanced/how-it-works.md +++ b/docs/advanced/how-it-works.md @@ -22,7 +22,7 @@ Understanding the internals of ExpressiveSharp helps you use it effectively and | +-----------------------------------------------------+ | | | PolyfillInterceptorGenerator | | | | - Intercepts ExpressionPolyfill.Create calls | | -| | - Intercepts IRewritableQueryable LINQ methods | | +| | - Intercepts IExpressiveQueryable LINQ methods | | | | - Uses C# 13 [InterceptsLocation] attribute | | | +-----------------------------------------------------+ | | | | @@ -93,7 +93,7 @@ Unlike syntax-tree-based approaches (such as EntityFrameworkCore.Projectables, w This generator uses C# 13 method interceptors (`[InterceptsLocation]`) to replace call sites at compile time: - **`ExpressionPolyfill.Create` calls** -- The delegate-form lambda is rewritten to an expression tree, enabling modern syntax without any attribute. -- **`IRewritableQueryable` LINQ methods** -- Methods like `Where`, `Select`, `OrderBy`, etc. that accept delegates are rewritten to their `Queryable` equivalents that accept `Expression>`. +- **`IExpressiveQueryable` LINQ methods** -- Methods like `Where`, `Select`, `OrderBy`, etc. that accept delegates are rewritten to their `Queryable` equivalents that accept `Expression>`. The interceptor handles complex multi-lambda methods (Join, GroupJoin, GroupBy overloads), non-lambda-first methods (Zip, ExceptBy), and custom target types registered via `[PolyfillTarget]` (such as EF Core's `EntityFrameworkQueryableExtensions` for async methods). @@ -228,7 +228,7 @@ The built-in `RelationalExtensions` package uses this architecture to register w | Build | `ExpressiveInterpreter` | Validates members, extracts descriptors | | Build | `ExpressionTreeEmitter` | Maps `IOperation` nodes to `Expression.*` factory calls | | Build | `ExpressionRegistryEmitter` | Generates per-assembly expression registry | -| Build | `PolyfillInterceptorGenerator` | Intercepts `ExpressionPolyfill.Create` and `IRewritableQueryable` call sites | +| Build | `PolyfillInterceptorGenerator` | Intercepts `ExpressionPolyfill.Create` and `IExpressiveQueryable` call sites | | Runtime | `ExpressiveResolver` | Locates generated expressions via registry or reflection | | Runtime | `ExpressiveReplacer` | Walks and replaces `[Expressive]` member references | | Runtime | `ExpressiveQueryCompiler` | EF Core decorator: expands before compilation | diff --git a/docs/guide/ef-core-integration.md b/docs/guide/ef-core-integration.md index e6a09d6..f49ab05 100644 --- a/docs/guide/ef-core-integration.md +++ b/docs/guide/ef-core-integration.md @@ -48,7 +48,7 @@ String interpolation with format specifiers like `$"{Price:F2}"` generates `ToSt ## ExpressiveDbSet\ -`ExpressiveDbSet` is the primary API for using modern syntax directly on a `DbSet`. It combines `[Expressive]` member expansion with `IRewritableQueryable` modern syntax support: +`ExpressiveDbSet` is the primary API for using modern syntax directly on a `DbSet`. It combines `[Expressive]` member expansion with `IExpressiveQueryable` modern syntax support: ```csharp public class MyDbContext : DbContext @@ -139,7 +139,7 @@ Supported async methods: ## Chain Continuity Stubs -The following EF Core operations preserve the `ExpressiveDbSet`/`IRewritableQueryable` chain: +The following EF Core operations preserve the `ExpressiveDbSet`/`IExpressiveQueryable` chain: ```csharp var orders = ctx.Orders @@ -182,7 +182,7 @@ await ctx.Orders Switch expressions and null-conditional operators inside `SetProperty` value lambdas are normally rejected by the C# compiler in expression tree contexts. The source generator converts them to `CASE WHEN` and `COALESCE` SQL expressions. ::: info -`ExecuteDelete` works on `IRewritableQueryable` / `ExpressiveDbSet` without any additional setup — it has no lambda parameter, so no interception is needed. +`ExecuteDelete` works on `IExpressiveQueryable` / `ExpressiveDbSet` without any additional setup — it has no lambda parameter, so no interception is needed. ::: ::: warning @@ -302,6 +302,6 @@ var results = await ctx.Orders ## Next Steps - [Window Functions](./window-functions) -- SQL window functions via the RelationalExtensions package -- [IRewritableQueryable\](./rewritable-queryable) -- modern syntax on any `IQueryable` +- [IExpressiveQueryable\](./expressive-queryable) -- modern syntax on any `IQueryable` - [[Expressive] Properties](./expressive-properties) -- computed properties in depth - [Quick Start](./quickstart) -- minimal setup walkthrough diff --git a/docs/guide/expression-polyfill.md b/docs/guide/expression-polyfill.md index 8340065..bc335bf 100644 --- a/docs/guide/expression-polyfill.md +++ b/docs/guide/expression-polyfill.md @@ -121,5 +121,5 @@ Use `[Expressive]` when the logic belongs on an entity and will be reused across ## Next Steps - [[Expressive] Properties](./expressive-properties) -- reusable computed properties -- [IRewritableQueryable\](./rewritable-queryable) -- modern syntax directly in LINQ chains +- [IExpressiveQueryable\](./expressive-queryable) -- modern syntax directly in LINQ chains - [EF Core Integration](./ef-core-integration) -- full EF Core setup diff --git a/docs/guide/rewritable-queryable.md b/docs/guide/expressive-queryable.md similarity index 90% rename from docs/guide/rewritable-queryable.md rename to docs/guide/expressive-queryable.md index ea8a1cc..2c4a68f 100644 --- a/docs/guide/rewritable-queryable.md +++ b/docs/guide/expressive-queryable.md @@ -1,6 +1,6 @@ -# IRewritableQueryable\ +# IExpressiveQueryable\ -`IRewritableQueryable` enables modern C# syntax directly in LINQ chains -- null-conditional operators, switch expressions, and pattern matching work in `.Where()`, `.Select()`, `.OrderBy()`, and more, on any `IQueryable`. +`IExpressiveQueryable` enables modern C# syntax directly in LINQ chains -- null-conditional operators, switch expressions, and pattern matching work in `.Where()`, `.Select()`, `.OrderBy()`, and more, on any `IQueryable`. ## Basic Usage @@ -21,7 +21,7 @@ The source generator intercepts these calls at compile time and rewrites the del ## How It Works -When you call `.AsExpressive()`, you get back an `IRewritableQueryable` wrapper. This wrapper exposes the same LINQ methods as `IQueryable`, but they accept `Func<...>` delegates instead of `Expression>`. +When you call `.AsExpressive()`, you get back an `IExpressiveQueryable` wrapper. This wrapper exposes the same LINQ methods as `IQueryable`, but they accept `Func<...>` delegates instead of `Expression>`. At compile time, the `PolyfillInterceptorGenerator` uses C# 13 method interceptors to replace each call site with code that: @@ -58,7 +58,7 @@ Most common `Queryable` methods are supported: **Set operations:** `ExceptBy`, `IntersectBy`, `UnionBy`, `DistinctBy` -**Chain-preserving operators** (return `IRewritableQueryable`): +**Chain-preserving operators** (return `IExpressiveQueryable`): `Take`, `Skip`, `Distinct`, `Reverse`, `DefaultIfEmpty`, `Append`, `Prepend`, `Concat`, `Union`, `Intersect`, `Except`, `SkipWhile`, `TakeWhile` **Comparer overloads** (`IEqualityComparer`, `IComparer`) are also supported. @@ -75,7 +75,7 @@ On .NET 10 and later, these additional methods are available: ## EF Core: Include and ThenInclude -When using `IRewritableQueryable` with EF Core, `Include` and `ThenInclude` are fully supported with chain continuity: +When using `IExpressiveQueryable` with EF Core, `Include` and `ThenInclude` are fully supported with chain continuity: ```csharp var orders = ctx.Set() @@ -86,7 +86,7 @@ var orders = ctx.Set() .ToList(); ``` -The `Include`/`ThenInclude` calls return `IIncludableRewritableQueryable`, a hybrid interface that preserves both the includable chain and the rewritable chain. +The `Include`/`ThenInclude` calls return `IIncludableExpressiveQueryable`, a hybrid interface that preserves both the includable chain and the rewritable chain. ::: info `Include` and `ThenInclude` accept standard `Expression>` lambdas (not rewritten delegates), since navigation property paths do not typically need modern syntax. The chain continuity ensures you can seamlessly go from `Include`/`ThenInclude` back to rewritable LINQ methods like `Where` and `Select`. @@ -94,7 +94,7 @@ The `Include`/`ThenInclude` calls return `IIncludableRewritableQueryable`: +All EF Core async methods that accept a lambda predicate or selector are supported on `IExpressiveQueryable`: **Async predicates:** `AnyAsync`, `AllAsync`, `CountAsync`, `LongCountAsync` @@ -123,7 +123,7 @@ These async methods are forwarded to `EntityFrameworkQueryableExtensions` at com ## EF Core: Chain Continuity Stubs -The following EF Core operations preserve the `IRewritableQueryable` chain, so you can continue using modern syntax after calling them: +The following EF Core operations preserve the `IExpressiveQueryable` chain, so you can continue using modern syntax after calling them: - `AsNoTracking()`, `AsNoTrackingWithIdentityResolution()`, `AsTracking()` - `IgnoreQueryFilters()`, `IgnoreAutoIncludes()` @@ -146,7 +146,7 @@ var orders = ctx.Set() Requires the `ExpressiveSharp.EntityFrameworkCore.RelationalExtensions` package and `.UseExpressives(o => o.UseRelationalExtensions())` configuration. Available on EF Core 8 and 9. On EF Core 10+, `ExecuteUpdate` natively accepts delegates — use `ExpressionPolyfill.Create()` for modern syntax in individual `SetProperty` value expressions. ::: -`ExecuteUpdate` and `ExecuteUpdateAsync` are supported on `IRewritableQueryable`, enabling modern C# syntax inside `SetProperty` value expressions — which is normally impossible in expression trees: +`ExecuteUpdate` and `ExecuteUpdateAsync` are supported on `IExpressiveQueryable`, enabling modern C# syntax inside `SetProperty` value expressions — which is normally impossible in expression trees: ```csharp ctx.ExpressiveSet() @@ -162,7 +162,7 @@ ctx.ExpressiveSet() This generates a single SQL `UPDATE` with `CASE WHEN` and `COALESCE` expressions — no entity loading required. -`ExecuteDelete` works out of the box on `IRewritableQueryable` without any stubs (it has no lambda parameter): +`ExecuteDelete` works out of the box on `IExpressiveQueryable` without any stubs (it has no lambda parameter): ```csharp ctx.ExpressiveSet() @@ -172,7 +172,7 @@ ctx.ExpressiveSet() ## IAsyncEnumerable Support -`IRewritableQueryable` supports `AsAsyncEnumerable()` for streaming results: +`IExpressiveQueryable` supports `AsAsyncEnumerable()` for streaming results: ```csharp await foreach (var order in ctx.Set() diff --git a/docs/guide/introduction.md b/docs/guide/introduction.md index 541d14f..9634e50 100644 --- a/docs/guide/introduction.md +++ b/docs/guide/introduction.md @@ -30,7 +30,7 @@ Two Roslyn incremental source generators analyze your code: 1. **ExpressiveGenerator** finds members decorated with `[Expressive]`, validates them, and emits `Expression.*` factory code that builds the equivalent expression tree. These are registered in a per-assembly expression registry. -2. **PolyfillInterceptorGenerator** uses C# 13 method interceptors to rewrite `ExpressionPolyfill.Create()` calls and `IRewritableQueryable` LINQ method calls, converting delegate lambdas into expression trees at their call sites. +2. **PolyfillInterceptorGenerator** uses C# 13 method interceptors to rewrite `ExpressionPolyfill.Create()` calls and `IExpressiveQueryable` LINQ method calls, converting delegate lambdas into expression trees at their call sites. ### Runtime (expression expansion) @@ -54,7 +54,7 @@ Mark computed properties and methods with `[Expressive]` to generate companion e | Scenario | API | |---|---| | **EF Core** -- modern syntax + `[Expressive]` expansion on `DbSet` | [`ExpressiveDbSet`](./ef-core-integration) (or [`UseExpressives()`](./ef-core-integration) for global expansion) | -| **Any `IQueryable`** -- modern syntax + `[Expressive]` expansion | [`.AsExpressive()`](./rewritable-queryable) | +| **Any `IQueryable`** -- modern syntax + `[Expressive]` expansion | [`.AsExpressive()`](./expressive-queryable) | | **EF Core** -- SQL window functions (ROW_NUMBER, RANK, etc.) | [`WindowFunction.*`](./window-functions) (install `RelationalExtensions` package) | | **Advanced** -- build an `Expression` inline, no attribute needed | [`ExpressionPolyfill.Create`](./expression-polyfill) | | **Advanced** -- expand `[Expressive]` members in an existing expression tree | `.ExpandExpressives()` | @@ -74,7 +74,7 @@ Mark computed properties and methods with `[Expressive]` to generate companion e | Block-bodied members | Yes (experimental) | Yes (experimental) | No | No | | Enum method expansion | Yes | Yes | No | No | | Inline expression creation | Yes (`ExpressionPolyfill.Create`) | No | No | No | -| Modern syntax in LINQ chains | Yes (`IRewritableQueryable`) | No | No | No | +| Modern syntax in LINQ chains | Yes (`IExpressiveQueryable`) | No | No | No | | SQL window functions | Yes (RelationalExtensions) | No | No | No | | String interpolation support | Yes | No | No | No | | Tuple literals support | Yes | No | No | No | diff --git a/docs/guide/migration-from-projectables.md b/docs/guide/migration-from-projectables.md index 97b4754..801955d 100644 --- a/docs/guide/migration-from-projectables.md +++ b/docs/guide/migration-from-projectables.md @@ -6,7 +6,7 @@ This guide covers a complete step-by-step migration, including automated code fi ## Why Migrate -- **Modern C# syntax in LINQ chains** -- Use null-conditional operators (`?.`), switch expressions, pattern matching, and more directly in `.Where()`, `.Select()`, `.OrderBy()` via `IRewritableQueryable`. +- **Modern C# syntax in LINQ chains** -- Use null-conditional operators (`?.`), switch expressions, pattern matching, and more directly in `.Where()`, `.Select()`, `.OrderBy()` via `IExpressiveQueryable`. - **Broader C# syntax in `[Expressive]` members** -- Switch expressions, pattern matching (constant, type, relational, logical, property, positional), string interpolation, tuples, and constructor projections all work out of the box. - **Not EF Core specific** -- Works standalone with any LINQ provider, or use `ExpressionPolyfill.Create` to build expression trees without a queryable. - **More accurate code generation** -- The source generator now analyzes code at the semantic level rather than rewriting syntax. @@ -238,7 +238,7 @@ The `InterceptorsNamespaces` MSBuild property needed for method interceptors is | Tuple literals | No | Yes | | Constructor projections | No | Yes | | Inline expression creation | No | `ExpressionPolyfill.Create(...)` | -| Modern syntax in LINQ chains | No | Yes (`IRewritableQueryable`) | +| Modern syntax in LINQ chains | No | Yes (`IExpressiveQueryable`) | | Custom transformers | No | `IExpressionTreeTransformer` interface | | `ExpressiveDbSet` | No | Yes | | External member mapping | `UseMemberBody` (same type only) | `[ExpressiveFor]` (any type) | @@ -254,7 +254,7 @@ After migrating, you gain access to features that Projectables never had. Here a ### Modern Syntax in LINQ Chains -Use `IRewritableQueryable` or `ExpressiveDbSet` to write LINQ queries with modern C# syntax: +Use `IExpressiveQueryable` or `ExpressiveDbSet` to write LINQ queries with modern C# syntax: ```csharp var results = ctx.Orders diff --git a/docs/guide/quickstart.md b/docs/guide/quickstart.md index 5048886..0e5cd9d 100644 --- a/docs/guide/quickstart.md +++ b/docs/guide/quickstart.md @@ -21,7 +21,7 @@ dotnet add package ExpressiveSharp.EntityFrameworkCore | Package | Purpose | |---------|---------| -| `ExpressiveSharp` | Core runtime -- expression expansion, transformers, `IRewritableQueryable`, `ExpressionPolyfill` (includes everything from Abstractions) | +| `ExpressiveSharp` | Core runtime -- expression expansion, transformers, `IExpressiveQueryable`, `ExpressionPolyfill` (includes everything from Abstractions) | | `ExpressiveSharp.Abstractions` | Lightweight -- `[Expressive]` attribute, `[ExpressiveFor]`, `IExpressionTreeTransformer`, source generator only (no runtime services) | | `ExpressiveSharp.EntityFrameworkCore` | EF Core integration -- `UseExpressives()`, `ExpressiveDbSet`, Include/ThenInclude, async methods, analyzers and code fixes | | `ExpressiveSharp.EntityFrameworkCore.RelationalExtensions` | SQL window functions -- ROW_NUMBER, RANK, DENSE_RANK, NTILE (experimental) | @@ -218,4 +218,4 @@ var results = ctx.Orders - [[Expressive] Methods](./expressive-methods) -- parameterized query fragments - [Constructor Projections](./expressive-constructors) -- project DTOs directly in queries - [EF Core Integration](./ef-core-integration) -- full EF Core setup and features -- [IRewritableQueryable\](./rewritable-queryable) -- modern syntax on any `IQueryable` +- [IExpressiveQueryable\](./expressive-queryable) -- modern syntax on any `IQueryable` diff --git a/docs/guide/window-functions.md b/docs/guide/window-functions.md index a22fabe..743a8c3 100644 --- a/docs/guide/window-functions.md +++ b/docs/guide/window-functions.md @@ -287,5 +287,5 @@ Window functions are implemented as a plugin using the `IExpressivePlugin` archi ## Next Steps - [EF Core Integration](./ef-core-integration) -- full EF Core setup and features -- [IRewritableQueryable\](./rewritable-queryable) -- modern syntax in LINQ chains +- [IExpressiveQueryable\](./expressive-queryable) -- modern syntax in LINQ chains - [Introduction](./introduction) -- overview of all ExpressiveSharp APIs diff --git a/docs/index.md b/docs/index.md index e34594f..5e5fa08 100644 --- a/docs/index.md +++ b/docs/index.md @@ -39,7 +39,7 @@ features: - icon: "\U0001F504" title: Modern Syntax in LINQ Chains - details: "IRewritableQueryable enables ?. and switch expressions directly in .Where(), .Select(), and more. Full async method support for EF Core." + details: "IExpressiveQueryable enables ?. and switch expressions directly in .Where(), .Select(), and more. Full async method support for EF Core." - icon: "\U0001F3D7\uFE0F" title: Constructor Projections @@ -150,7 +150,7 @@ Computed properties are **inlined into SQL** — no client-side evaluation, no N | Package | Description | |---------|-------------| -| [`ExpressiveSharp`](https://www.nuget.org/packages/ExpressiveSharp/) | Core runtime — expression expansion, transformers, `IRewritableQueryable`, `ExpressionPolyfill` | +| [`ExpressiveSharp`](https://www.nuget.org/packages/ExpressiveSharp/) | Core runtime — expression expansion, transformers, `IExpressiveQueryable`, `ExpressionPolyfill` | | [`ExpressiveSharp.Abstractions`](https://www.nuget.org/packages/ExpressiveSharp.Abstractions/) | Lightweight — attributes (`[Expressive]`, `[ExpressiveFor]`), `IExpressionTreeTransformer`, source generator only | | [`ExpressiveSharp.EntityFrameworkCore`](https://www.nuget.org/packages/ExpressiveSharp.EntityFrameworkCore/) | EF Core integration — `UseExpressives()`, `ExpressiveDbSet`, Include/ThenInclude, async methods | | [`ExpressiveSharp.EntityFrameworkCore.RelationalExtensions`](https://www.nuget.org/packages/ExpressiveSharp.EntityFrameworkCore.RelationalExtensions/) | SQL window functions — ROW_NUMBER, RANK, DENSE_RANK, NTILE (experimental) | diff --git a/docs/recipes/modern-syntax-in-linq.md b/docs/recipes/modern-syntax-in-linq.md index 0dbe05b..aa6bfdd 100644 --- a/docs/recipes/modern-syntax-in-linq.md +++ b/docs/recipes/modern-syntax-in-linq.md @@ -29,7 +29,7 @@ var results = dbContext.Orders ExpressiveSharp offers three ways to use modern syntax in LINQ chains. Each targets a different scenario. -### 1. `IRewritableQueryable` with `.AsExpressive()` +### 1. `IExpressiveQueryable` with `.AsExpressive()` Works with **any** `IQueryable` -- not tied to EF Core: @@ -52,11 +52,11 @@ var results = queryable .ToList(); ``` -The source generator intercepts these calls at compile time and rewrites the delegate lambdas to expression trees. The chain continues as an `IRewritableQueryable`, preserving the ability to use modern syntax in subsequent calls. +The source generator intercepts these calls at compile time and rewrites the delegate lambdas to expression trees. The chain continues as an `IExpressiveQueryable`, preserving the ability to use modern syntax in subsequent calls. ### 2. `ExpressiveDbSet` -- For EF Core -A shorthand for EF Core projects. `ExpressiveDbSet` wraps a `DbSet` and provides `IRewritableQueryable` behavior automatically: +A shorthand for EF Core projects. `ExpressiveDbSet` wraps a `DbSet` and provides `IExpressiveQueryable` behavior automatically: ```csharp public class MyDbContext : DbContext @@ -220,7 +220,7 @@ Use `[Expressive]` for shared business logic (computed properties, filters, clas ## Available LINQ Methods -`IRewritableQueryable` and `ExpressiveDbSet` support most standard `Queryable` methods: +`IExpressiveQueryable` and `ExpressiveDbSet` support most standard `Queryable` methods: **Filtering:** `Where`, `Any`, `All`, `Contains` diff --git a/docs/recipes/nullable-navigation.md b/docs/recipes/nullable-navigation.md index af07807..58ac5f3 100644 --- a/docs/recipes/nullable-navigation.md +++ b/docs/recipes/nullable-navigation.md @@ -108,9 +108,9 @@ LEFT JOIN "Cities" AS "c" ON "a"."CityId" = "c"."Id" Each `?.` in the chain produces a `LEFT JOIN`. The transformer strips all the ternaries, and the database handles null propagation naturally. -## Using with IRewritableQueryable (Modern Syntax) +## Using with IExpressiveQueryable (Modern Syntax) -You do not need an `[Expressive]` property to use `?.` in queries. With `IRewritableQueryable` or `ExpressiveDbSet`, you can write null-conditional operators directly in your LINQ lambdas: +You do not need an `[Expressive]` property to use `?.` in queries. With `IExpressiveQueryable` or `ExpressiveDbSet`, you can write null-conditional operators directly in your LINQ lambdas: ```csharp // Using ExpressiveDbSet (EF Core) @@ -126,7 +126,7 @@ var results = ctx.Orders ``` ```csharp -// Using IRewritableQueryable (any IQueryable) +// Using IExpressiveQueryable (any IQueryable) var results = queryable .AsExpressive() .Where(o => o.Customer?.Email != null) diff --git a/docs/reference/diagnostics.md b/docs/reference/diagnostics.md index c8e6ca9..8ac3f42 100644 --- a/docs/reference/diagnostics.md +++ b/docs/reference/diagnostics.md @@ -268,7 +268,7 @@ Operator '{0}' is not supported in expression trees. A default value will be use Failed to generate interceptor for call site: {0}. The original delegate stub will be used at runtime. ``` -**Cause:** The polyfill interceptor generator could not produce an interceptor for a specific call site (e.g., on `IRewritableQueryable` or `ExpressionPolyfill.Create`). The original delegate-based stub will be used instead. +**Cause:** The polyfill interceptor generator could not produce an interceptor for a specific call site (e.g., on `IExpressiveQueryable` or `ExpressionPolyfill.Create`). The original delegate-based stub will be used instead. **Fix:** This is typically an internal generator issue. If you encounter it, check that the call site uses supported syntax and consider filing an issue. @@ -340,7 +340,7 @@ Member '{0}' is referenced in an [Expressive] expression but is not marked [Expr Adding [Expressive] would allow its body to be inlined into the expression tree. ``` -**Cause:** A member referenced inside an `[Expressive]` body, an `ExpressionPolyfill.Create()` lambda, or an `IRewritableQueryable` LINQ lambda has an expandable body (expression-bodied or block-bodied) but is not marked `[Expressive]`. Without the attribute, the member call remains opaque in the generated expression tree and cannot be translated by LINQ providers. +**Cause:** A member referenced inside an `[Expressive]` body, an `ExpressionPolyfill.Create()` lambda, or an `IExpressiveQueryable` LINQ lambda has an expandable body (expression-bodied or block-bodied) but is not marked `[Expressive]`. Without the attribute, the member call remains opaque in the generated expression tree and cannot be translated by LINQ providers. **Fix:** {#exp0013-fix} diff --git a/docs/reference/troubleshooting.md b/docs/reference/troubleshooting.md index d30a1a4..c0ca13a 100644 --- a/docs/reference/troubleshooting.md +++ b/docs/reference/troubleshooting.md @@ -264,7 +264,7 @@ If the generator is loaded but not producing output, check that you have at leas ### Interceptors not working {#interceptors-not-working} -**Symptom:** `ExpressionPolyfill.Create()` returns a delegate at runtime instead of an expression tree. `IRewritableQueryable` LINQ methods are not rewritten to expression form. +**Symptom:** `ExpressionPolyfill.Create()` returns a delegate at runtime instead of an expression tree. `IExpressiveQueryable` LINQ methods are not rewritten to expression form. **Why:** Method interceptors require the `InterceptorsNamespaces` MSBuild property to be set. The `ExpressiveSharp` NuGet package configures this automatically via its `.props` file. @@ -324,7 +324,7 @@ public double TotalWithTax => Total * (1 + TaxRate); // Total is inlined ### Is ExpressiveSharp EF Core specific? -No. The core `ExpressiveSharp` package works with any LINQ provider or standalone expression tree use case. See [ExpressionPolyfill.Create](../guide/expression-polyfill) and [IRewritableQueryable](../guide/rewritable-queryable) for non-EF-Core usage. +No. The core `ExpressiveSharp` package works with any LINQ provider or standalone expression tree use case. See [ExpressionPolyfill.Create](../guide/expression-polyfill) and [IExpressiveQueryable](../guide/expressive-queryable) for non-EF-Core usage. ### What .NET versions are supported? diff --git a/src/ExpressiveSharp.Abstractions/PolyfillTargetAttribute.cs b/src/ExpressiveSharp.Abstractions/PolyfillTargetAttribute.cs index 5570827..7cc4f1e 100644 --- a/src/ExpressiveSharp.Abstractions/PolyfillTargetAttribute.cs +++ b/src/ExpressiveSharp.Abstractions/PolyfillTargetAttribute.cs @@ -5,7 +5,7 @@ namespace ExpressiveSharp; /// instead of the default . /// /// -/// Apply this attribute to delegate-based stubs when the +/// Apply this attribute to delegate-based stubs when the /// matching Expression<Func<…>> overload lives in a type other than /// (e.g., EF Core's EntityFrameworkQueryableExtensions). /// diff --git a/src/ExpressiveSharp.CodeFixers/MissingExpressiveAnalyzer.cs b/src/ExpressiveSharp.CodeFixers/MissingExpressiveAnalyzer.cs index 879587b..d8a0e9f 100644 --- a/src/ExpressiveSharp.CodeFixers/MissingExpressiveAnalyzer.cs +++ b/src/ExpressiveSharp.CodeFixers/MissingExpressiveAnalyzer.cs @@ -9,7 +9,7 @@ namespace ExpressiveSharp.CodeFixers; /// /// Reports EXP0013 when a member referenced inside an [Expressive] body, an -/// ExpressionPolyfill.Create() lambda, or an IRewritableQueryable +/// ExpressionPolyfill.Create() lambda, or an IExpressiveQueryable /// LINQ lambda has an expandable body but is not marked [Expressive]. /// [DiagnosticAnalyzer(LanguageNames.CSharp)] @@ -37,7 +37,7 @@ public override void Initialize(AnalysisContext context) SyntaxKind.PropertyDeclaration, SyntaxKind.ConstructorDeclaration); - // Prong 2: ExpressionPolyfill.Create() and IRewritableQueryable LINQ lambdas + // Prong 2: ExpressionPolyfill.Create() and IExpressiveQueryable LINQ lambdas context.RegisterSyntaxNodeAction(AnalyzePolyfillInvocation, SyntaxKind.InvocationExpression); } @@ -65,7 +65,7 @@ private static void AnalyzePolyfillInvocation(SyntaxNodeAnalysisContext context) if (symbolInfo.Symbol is not IMethodSymbol method) return; - if (!IsExpressionPolyfillCreate(method) && !IsRewritableQueryableMethod(method)) + if (!IsExpressionPolyfillCreate(method) && !IsExpressiveQueryableMethod(method)) return; foreach (var arg in invocation.ArgumentList.Arguments) @@ -91,36 +91,36 @@ private static bool IsExpressionPolyfillCreate(IMethodSymbol method) => method.ContainingType?.Name == "ExpressionPolyfill" && method.ContainingType.ContainingNamespace?.ToDisplayString() == "ExpressiveSharp"; - private static bool IsRewritableQueryableMethod(IMethodSymbol method) + private static bool IsExpressiveQueryableMethod(IMethodSymbol method) { if (!method.IsExtensionMethod) return false; - // Check if the first parameter (the receiver) is IRewritableQueryable + // Check if the first parameter (the receiver) is IExpressiveQueryable var originalMethod = method.ReducedFrom ?? method; if (originalMethod.Parameters.Length == 0) return false; var receiverType = originalMethod.Parameters[0].Type; - return IsOrImplementsRewritableQueryable(receiverType); + return IsOrImplementsExpressiveQueryable(receiverType); } - private static bool IsOrImplementsRewritableQueryable(ITypeSymbol type) + private static bool IsOrImplementsExpressiveQueryable(ITypeSymbol type) { - if (IsRewritableQueryableType(type)) + if (IsExpressiveQueryableType(type)) return true; foreach (var iface in type.AllInterfaces) { - if (IsRewritableQueryableType(iface)) + if (IsExpressiveQueryableType(iface)) return true; } return false; } - private static bool IsRewritableQueryableType(ITypeSymbol type) => - type.Name == "IRewritableQueryable" && + private static bool IsExpressiveQueryableType(ITypeSymbol type) => + type.Name == "IExpressiveQueryable" && type.ContainingNamespace?.ToDisplayString() == "ExpressiveSharp"; // ── Shared: walk descendants for member references ────────────────────── diff --git a/src/ExpressiveSharp.EntityFrameworkCore.RelationalExtensions/Extensions/RewritableQueryableRelationalExtensions.cs b/src/ExpressiveSharp.EntityFrameworkCore.RelationalExtensions/Extensions/ExpressiveQueryableRelationalExtensions.cs similarity index 91% rename from src/ExpressiveSharp.EntityFrameworkCore.RelationalExtensions/Extensions/RewritableQueryableRelationalExtensions.cs rename to src/ExpressiveSharp.EntityFrameworkCore.RelationalExtensions/Extensions/ExpressiveQueryableRelationalExtensions.cs index 10e88a3..ff32b64 100644 --- a/src/ExpressiveSharp.EntityFrameworkCore.RelationalExtensions/Extensions/RewritableQueryableRelationalExtensions.cs +++ b/src/ExpressiveSharp.EntityFrameworkCore.RelationalExtensions/Extensions/ExpressiveQueryableRelationalExtensions.cs @@ -8,7 +8,7 @@ namespace Microsoft.EntityFrameworkCore; /// -/// Extension methods on for EF Core bulk update operations. +/// Extension methods on for EF Core bulk update operations. /// These stubs are intercepted by the ExpressiveSharp source generator via /// to forward to the appropriate EF Core ExecuteUpdate method. /// @@ -18,7 +18,7 @@ namespace Microsoft.EntityFrameworkCore; /// use ExpressionPolyfill.Create() to enable modern C# syntax. /// [EditorBrowsable(EditorBrowsableState.Never)] -public static class RewritableQueryableRelationalExtensions +public static class ExpressiveQueryableRelationalExtensions { private const string InterceptedMessage = "This method must be intercepted by the ExpressiveSharp source generator. " + @@ -35,7 +35,7 @@ public static class RewritableQueryableRelationalExtensions #endif [EditorBrowsable(EditorBrowsableState.Never)] public static int ExecuteUpdate( - this IRewritableQueryable source, + this IExpressiveQueryable source, Func, SetPropertyCalls> setPropertyCalls) where TSource : class => throw new UnreachableException(InterceptedMessage); @@ -47,7 +47,7 @@ public static int ExecuteUpdate( #endif [EditorBrowsable(EditorBrowsableState.Never)] public static Task ExecuteUpdateAsync( - this IRewritableQueryable source, + this IExpressiveQueryable source, Func, SetPropertyCalls> setPropertyCalls, CancellationToken cancellationToken = default) where TSource : class diff --git a/src/ExpressiveSharp.EntityFrameworkCore/ExpressiveDbSet.cs b/src/ExpressiveSharp.EntityFrameworkCore/ExpressiveDbSet.cs index 696f8df..a1c7f72 100644 --- a/src/ExpressiveSharp.EntityFrameworkCore/ExpressiveDbSet.cs +++ b/src/ExpressiveSharp.EntityFrameworkCore/ExpressiveDbSet.cs @@ -8,7 +8,7 @@ namespace ExpressiveSharp.EntityFrameworkCore; /// -/// A wrapper that also implements , +/// A wrapper that also implements , /// enabling delegate-based LINQ methods with modern C# syntax (e.g., ?.) directly on the set. /// /// @@ -22,7 +22,7 @@ namespace ExpressiveSharp.EntityFrameworkCore; /// ctx.Orders.Where(o => o.Customer?.Name == "Alice") /// /// -public class ExpressiveDbSet : DbSet, IRewritableQueryable +public class ExpressiveDbSet : DbSet, IExpressiveQueryable where TEntity : class { private readonly DbSet _inner; diff --git a/src/ExpressiveSharp.EntityFrameworkCore/Extensions/RewritableQueryableEfCoreExtensions.cs b/src/ExpressiveSharp.EntityFrameworkCore/Extensions/ExpressiveQueryableEfCoreExtensions.cs similarity index 76% rename from src/ExpressiveSharp.EntityFrameworkCore/Extensions/RewritableQueryableEfCoreExtensions.cs rename to src/ExpressiveSharp.EntityFrameworkCore/Extensions/ExpressiveQueryableEfCoreExtensions.cs index 3871cc0..8618da8 100644 --- a/src/ExpressiveSharp.EntityFrameworkCore/Extensions/RewritableQueryableEfCoreExtensions.cs +++ b/src/ExpressiveSharp.EntityFrameworkCore/Extensions/ExpressiveQueryableEfCoreExtensions.cs @@ -10,13 +10,13 @@ namespace Microsoft.EntityFrameworkCore; /// -/// Extension methods on for EF Core operations. -/// Passthrough stubs maintain the chain. +/// Extension methods on for EF Core operations. +/// Passthrough stubs maintain the chain. /// Async lambda stubs are intercepted by the source generator via /// to forward to . /// [EditorBrowsable(EditorBrowsableState.Never)] -public static class RewritableQueryableEfCoreExtensions +public static class ExpressiveQueryableEfCoreExtensions { private const string InterceptedMessage = "This method must be intercepted by the ExpressiveSharp source generator. " + @@ -24,49 +24,49 @@ public static class RewritableQueryableEfCoreExtensions // ── Tracking behavior ──────────────────────────────────────────────── [EditorBrowsable(EditorBrowsableState.Never)] - public static IRewritableQueryable AsNoTracking( - this IRewritableQueryable source) + public static IExpressiveQueryable AsNoTracking( + this IExpressiveQueryable source) where TEntity : class => EntityFrameworkQueryableExtensions.AsNoTracking(source).AsExpressive(); [EditorBrowsable(EditorBrowsableState.Never)] - public static IRewritableQueryable AsNoTrackingWithIdentityResolution( - this IRewritableQueryable source) + public static IExpressiveQueryable AsNoTrackingWithIdentityResolution( + this IExpressiveQueryable source) where TEntity : class => EntityFrameworkQueryableExtensions.AsNoTrackingWithIdentityResolution(source).AsExpressive(); [EditorBrowsable(EditorBrowsableState.Never)] - public static IRewritableQueryable AsTracking( - this IRewritableQueryable source) + public static IExpressiveQueryable AsTracking( + this IExpressiveQueryable source) where TEntity : class => EntityFrameworkQueryableExtensions.AsTracking(source).AsExpressive(); // ── Query filters ──────────────────────────────────────────────────── [EditorBrowsable(EditorBrowsableState.Never)] - public static IRewritableQueryable IgnoreAutoIncludes( - this IRewritableQueryable source) + public static IExpressiveQueryable IgnoreAutoIncludes( + this IExpressiveQueryable source) where TEntity : class => EntityFrameworkQueryableExtensions.IgnoreAutoIncludes(source).AsExpressive(); [EditorBrowsable(EditorBrowsableState.Never)] - public static IRewritableQueryable IgnoreQueryFilters( - this IRewritableQueryable source) + public static IExpressiveQueryable IgnoreQueryFilters( + this IExpressiveQueryable source) where TEntity : class => EntityFrameworkQueryableExtensions.IgnoreQueryFilters(source).AsExpressive(); // ── Query tagging ──────────────────────────────────────────────────── [EditorBrowsable(EditorBrowsableState.Never)] - public static IRewritableQueryable TagWith( - this IRewritableQueryable source, + public static IExpressiveQueryable TagWith( + this IExpressiveQueryable source, string tag) where TEntity : class => EntityFrameworkQueryableExtensions.TagWith(source, tag).AsExpressive(); [EditorBrowsable(EditorBrowsableState.Never)] - public static IRewritableQueryable TagWithCallSite( - this IRewritableQueryable source, + public static IExpressiveQueryable TagWithCallSite( + this IExpressiveQueryable source, [System.Runtime.CompilerServices.CallerFilePath] string filePath = "", [System.Runtime.CompilerServices.CallerLineNumber] int lineNumber = 0) where TEntity : class @@ -75,37 +75,37 @@ public static IRewritableQueryable TagWithCallSite( // ── Include / ThenInclude (runtime, not intercepted) ─────────────── [EditorBrowsable(EditorBrowsableState.Never)] - public static IIncludableRewritableQueryable Include( - this IRewritableQueryable source, + public static IIncludableExpressiveQueryable Include( + this IExpressiveQueryable source, Expression> navigationPropertyPath) where TEntity : class - => new IncludableRewritableQueryableWrapper( + => new IncludableExpressiveQueryableWrapper( EntityFrameworkQueryableExtensions.Include(source, navigationPropertyPath)); [EditorBrowsable(EditorBrowsableState.Never)] - public static IRewritableQueryable Include( - this IRewritableQueryable source, + public static IExpressiveQueryable Include( + this IExpressiveQueryable source, string navigationPropertyPath) where TEntity : class => EntityFrameworkQueryableExtensions.Include(source, navigationPropertyPath) .AsExpressive(); [EditorBrowsable(EditorBrowsableState.Never)] - public static IIncludableRewritableQueryable + public static IIncludableExpressiveQueryable ThenInclude( - this IIncludableRewritableQueryable source, + this IIncludableExpressiveQueryable source, Expression> navigationPropertyPath) where TEntity : class - => new IncludableRewritableQueryableWrapper( + => new IncludableExpressiveQueryableWrapper( EntityFrameworkQueryableExtensions.ThenInclude(source, navigationPropertyPath)); [EditorBrowsable(EditorBrowsableState.Never)] - public static IIncludableRewritableQueryable + public static IIncludableExpressiveQueryable ThenInclude( - this IIncludableRewritableQueryable> source, + this IIncludableExpressiveQueryable> source, Expression> navigationPropertyPath) where TEntity : class - => new IncludableRewritableQueryableWrapper( + => new IncludableExpressiveQueryableWrapper( EntityFrameworkQueryableExtensions.ThenInclude(source, navigationPropertyPath)); // ── Async predicate methods (intercepted) ──────────────────────────── @@ -113,7 +113,7 @@ public static IIncludableRewritableQueryable [PolyfillTarget(typeof(EntityFrameworkQueryableExtensions))] [EditorBrowsable(EditorBrowsableState.Never)] public static Task AnyAsync( - this IRewritableQueryable source, + this IExpressiveQueryable source, Func predicate, CancellationToken cancellationToken = default) where TEntity : class @@ -122,7 +122,7 @@ public static Task AnyAsync( [PolyfillTarget(typeof(EntityFrameworkQueryableExtensions))] [EditorBrowsable(EditorBrowsableState.Never)] public static Task AllAsync( - this IRewritableQueryable source, + this IExpressiveQueryable source, Func predicate, CancellationToken cancellationToken = default) where TEntity : class @@ -131,7 +131,7 @@ public static Task AllAsync( [PolyfillTarget(typeof(EntityFrameworkQueryableExtensions))] [EditorBrowsable(EditorBrowsableState.Never)] public static Task CountAsync( - this IRewritableQueryable source, + this IExpressiveQueryable source, Func predicate, CancellationToken cancellationToken = default) where TEntity : class @@ -140,7 +140,7 @@ public static Task CountAsync( [PolyfillTarget(typeof(EntityFrameworkQueryableExtensions))] [EditorBrowsable(EditorBrowsableState.Never)] public static Task LongCountAsync( - this IRewritableQueryable source, + this IExpressiveQueryable source, Func predicate, CancellationToken cancellationToken = default) where TEntity : class @@ -151,7 +151,7 @@ public static Task LongCountAsync( [PolyfillTarget(typeof(EntityFrameworkQueryableExtensions))] [EditorBrowsable(EditorBrowsableState.Never)] public static Task FirstAsync( - this IRewritableQueryable source, + this IExpressiveQueryable source, Func predicate, CancellationToken cancellationToken = default) where TEntity : class @@ -160,7 +160,7 @@ public static Task FirstAsync( [PolyfillTarget(typeof(EntityFrameworkQueryableExtensions))] [EditorBrowsable(EditorBrowsableState.Never)] public static Task FirstOrDefaultAsync( - this IRewritableQueryable source, + this IExpressiveQueryable source, Func predicate, CancellationToken cancellationToken = default) where TEntity : class @@ -169,7 +169,7 @@ public static Task FirstAsync( [PolyfillTarget(typeof(EntityFrameworkQueryableExtensions))] [EditorBrowsable(EditorBrowsableState.Never)] public static Task LastAsync( - this IRewritableQueryable source, + this IExpressiveQueryable source, Func predicate, CancellationToken cancellationToken = default) where TEntity : class @@ -178,7 +178,7 @@ public static Task LastAsync( [PolyfillTarget(typeof(EntityFrameworkQueryableExtensions))] [EditorBrowsable(EditorBrowsableState.Never)] public static Task LastOrDefaultAsync( - this IRewritableQueryable source, + this IExpressiveQueryable source, Func predicate, CancellationToken cancellationToken = default) where TEntity : class @@ -187,7 +187,7 @@ public static Task LastAsync( [PolyfillTarget(typeof(EntityFrameworkQueryableExtensions))] [EditorBrowsable(EditorBrowsableState.Never)] public static Task SingleAsync( - this IRewritableQueryable source, + this IExpressiveQueryable source, Func predicate, CancellationToken cancellationToken = default) where TEntity : class @@ -196,7 +196,7 @@ public static Task SingleAsync( [PolyfillTarget(typeof(EntityFrameworkQueryableExtensions))] [EditorBrowsable(EditorBrowsableState.Never)] public static Task SingleOrDefaultAsync( - this IRewritableQueryable source, + this IExpressiveQueryable source, Func predicate, CancellationToken cancellationToken = default) where TEntity : class @@ -206,92 +206,92 @@ public static Task SingleAsync( [PolyfillTarget(typeof(EntityFrameworkQueryableExtensions))] [EditorBrowsable(EditorBrowsableState.Never)] - public static Task SumAsync(this IRewritableQueryable source, Func selector, CancellationToken cancellationToken = default) where TEntity : class => throw new UnreachableException(InterceptedMessage); + public static Task SumAsync(this IExpressiveQueryable source, Func selector, CancellationToken cancellationToken = default) where TEntity : class => throw new UnreachableException(InterceptedMessage); [PolyfillTarget(typeof(EntityFrameworkQueryableExtensions))] [EditorBrowsable(EditorBrowsableState.Never)] - public static Task SumAsync(this IRewritableQueryable source, Func selector, CancellationToken cancellationToken = default) where TEntity : class => throw new UnreachableException(InterceptedMessage); + public static Task SumAsync(this IExpressiveQueryable source, Func selector, CancellationToken cancellationToken = default) where TEntity : class => throw new UnreachableException(InterceptedMessage); [PolyfillTarget(typeof(EntityFrameworkQueryableExtensions))] [EditorBrowsable(EditorBrowsableState.Never)] - public static Task SumAsync(this IRewritableQueryable source, Func selector, CancellationToken cancellationToken = default) where TEntity : class => throw new UnreachableException(InterceptedMessage); + public static Task SumAsync(this IExpressiveQueryable source, Func selector, CancellationToken cancellationToken = default) where TEntity : class => throw new UnreachableException(InterceptedMessage); [PolyfillTarget(typeof(EntityFrameworkQueryableExtensions))] [EditorBrowsable(EditorBrowsableState.Never)] - public static Task SumAsync(this IRewritableQueryable source, Func selector, CancellationToken cancellationToken = default) where TEntity : class => throw new UnreachableException(InterceptedMessage); + public static Task SumAsync(this IExpressiveQueryable source, Func selector, CancellationToken cancellationToken = default) where TEntity : class => throw new UnreachableException(InterceptedMessage); [PolyfillTarget(typeof(EntityFrameworkQueryableExtensions))] [EditorBrowsable(EditorBrowsableState.Never)] - public static Task SumAsync(this IRewritableQueryable source, Func selector, CancellationToken cancellationToken = default) where TEntity : class => throw new UnreachableException(InterceptedMessage); + public static Task SumAsync(this IExpressiveQueryable source, Func selector, CancellationToken cancellationToken = default) where TEntity : class => throw new UnreachableException(InterceptedMessage); [PolyfillTarget(typeof(EntityFrameworkQueryableExtensions))] [EditorBrowsable(EditorBrowsableState.Never)] - public static Task SumAsync(this IRewritableQueryable source, Func selector, CancellationToken cancellationToken = default) where TEntity : class => throw new UnreachableException(InterceptedMessage); + public static Task SumAsync(this IExpressiveQueryable source, Func selector, CancellationToken cancellationToken = default) where TEntity : class => throw new UnreachableException(InterceptedMessage); [PolyfillTarget(typeof(EntityFrameworkQueryableExtensions))] [EditorBrowsable(EditorBrowsableState.Never)] - public static Task SumAsync(this IRewritableQueryable source, Func selector, CancellationToken cancellationToken = default) where TEntity : class => throw new UnreachableException(InterceptedMessage); + public static Task SumAsync(this IExpressiveQueryable source, Func selector, CancellationToken cancellationToken = default) where TEntity : class => throw new UnreachableException(InterceptedMessage); [PolyfillTarget(typeof(EntityFrameworkQueryableExtensions))] [EditorBrowsable(EditorBrowsableState.Never)] - public static Task SumAsync(this IRewritableQueryable source, Func selector, CancellationToken cancellationToken = default) where TEntity : class => throw new UnreachableException(InterceptedMessage); + public static Task SumAsync(this IExpressiveQueryable source, Func selector, CancellationToken cancellationToken = default) where TEntity : class => throw new UnreachableException(InterceptedMessage); [PolyfillTarget(typeof(EntityFrameworkQueryableExtensions))] [EditorBrowsable(EditorBrowsableState.Never)] - public static Task SumAsync(this IRewritableQueryable source, Func selector, CancellationToken cancellationToken = default) where TEntity : class => throw new UnreachableException(InterceptedMessage); + public static Task SumAsync(this IExpressiveQueryable source, Func selector, CancellationToken cancellationToken = default) where TEntity : class => throw new UnreachableException(InterceptedMessage); [PolyfillTarget(typeof(EntityFrameworkQueryableExtensions))] [EditorBrowsable(EditorBrowsableState.Never)] - public static Task SumAsync(this IRewritableQueryable source, Func selector, CancellationToken cancellationToken = default) where TEntity : class => throw new UnreachableException(InterceptedMessage); + public static Task SumAsync(this IExpressiveQueryable source, Func selector, CancellationToken cancellationToken = default) where TEntity : class => throw new UnreachableException(InterceptedMessage); // ── Async Average (intercepted) ────────────────────────────────────── [PolyfillTarget(typeof(EntityFrameworkQueryableExtensions))] [EditorBrowsable(EditorBrowsableState.Never)] - public static Task AverageAsync(this IRewritableQueryable source, Func selector, CancellationToken cancellationToken = default) where TEntity : class => throw new UnreachableException(InterceptedMessage); + public static Task AverageAsync(this IExpressiveQueryable source, Func selector, CancellationToken cancellationToken = default) where TEntity : class => throw new UnreachableException(InterceptedMessage); [PolyfillTarget(typeof(EntityFrameworkQueryableExtensions))] [EditorBrowsable(EditorBrowsableState.Never)] - public static Task AverageAsync(this IRewritableQueryable source, Func selector, CancellationToken cancellationToken = default) where TEntity : class => throw new UnreachableException(InterceptedMessage); + public static Task AverageAsync(this IExpressiveQueryable source, Func selector, CancellationToken cancellationToken = default) where TEntity : class => throw new UnreachableException(InterceptedMessage); [PolyfillTarget(typeof(EntityFrameworkQueryableExtensions))] [EditorBrowsable(EditorBrowsableState.Never)] - public static Task AverageAsync(this IRewritableQueryable source, Func selector, CancellationToken cancellationToken = default) where TEntity : class => throw new UnreachableException(InterceptedMessage); + public static Task AverageAsync(this IExpressiveQueryable source, Func selector, CancellationToken cancellationToken = default) where TEntity : class => throw new UnreachableException(InterceptedMessage); [PolyfillTarget(typeof(EntityFrameworkQueryableExtensions))] [EditorBrowsable(EditorBrowsableState.Never)] - public static Task AverageAsync(this IRewritableQueryable source, Func selector, CancellationToken cancellationToken = default) where TEntity : class => throw new UnreachableException(InterceptedMessage); + public static Task AverageAsync(this IExpressiveQueryable source, Func selector, CancellationToken cancellationToken = default) where TEntity : class => throw new UnreachableException(InterceptedMessage); [PolyfillTarget(typeof(EntityFrameworkQueryableExtensions))] [EditorBrowsable(EditorBrowsableState.Never)] - public static Task AverageAsync(this IRewritableQueryable source, Func selector, CancellationToken cancellationToken = default) where TEntity : class => throw new UnreachableException(InterceptedMessage); + public static Task AverageAsync(this IExpressiveQueryable source, Func selector, CancellationToken cancellationToken = default) where TEntity : class => throw new UnreachableException(InterceptedMessage); [PolyfillTarget(typeof(EntityFrameworkQueryableExtensions))] [EditorBrowsable(EditorBrowsableState.Never)] - public static Task AverageAsync(this IRewritableQueryable source, Func selector, CancellationToken cancellationToken = default) where TEntity : class => throw new UnreachableException(InterceptedMessage); + public static Task AverageAsync(this IExpressiveQueryable source, Func selector, CancellationToken cancellationToken = default) where TEntity : class => throw new UnreachableException(InterceptedMessage); [PolyfillTarget(typeof(EntityFrameworkQueryableExtensions))] [EditorBrowsable(EditorBrowsableState.Never)] - public static Task AverageAsync(this IRewritableQueryable source, Func selector, CancellationToken cancellationToken = default) where TEntity : class => throw new UnreachableException(InterceptedMessage); + public static Task AverageAsync(this IExpressiveQueryable source, Func selector, CancellationToken cancellationToken = default) where TEntity : class => throw new UnreachableException(InterceptedMessage); [PolyfillTarget(typeof(EntityFrameworkQueryableExtensions))] [EditorBrowsable(EditorBrowsableState.Never)] - public static Task AverageAsync(this IRewritableQueryable source, Func selector, CancellationToken cancellationToken = default) where TEntity : class => throw new UnreachableException(InterceptedMessage); + public static Task AverageAsync(this IExpressiveQueryable source, Func selector, CancellationToken cancellationToken = default) where TEntity : class => throw new UnreachableException(InterceptedMessage); [PolyfillTarget(typeof(EntityFrameworkQueryableExtensions))] [EditorBrowsable(EditorBrowsableState.Never)] - public static Task AverageAsync(this IRewritableQueryable source, Func selector, CancellationToken cancellationToken = default) where TEntity : class => throw new UnreachableException(InterceptedMessage); + public static Task AverageAsync(this IExpressiveQueryable source, Func selector, CancellationToken cancellationToken = default) where TEntity : class => throw new UnreachableException(InterceptedMessage); [PolyfillTarget(typeof(EntityFrameworkQueryableExtensions))] [EditorBrowsable(EditorBrowsableState.Never)] - public static Task AverageAsync(this IRewritableQueryable source, Func selector, CancellationToken cancellationToken = default) where TEntity : class => throw new UnreachableException(InterceptedMessage); + public static Task AverageAsync(this IExpressiveQueryable source, Func selector, CancellationToken cancellationToken = default) where TEntity : class => throw new UnreachableException(InterceptedMessage); // ── Async Min / Max (intercepted) ──────────────────────────────────── [PolyfillTarget(typeof(EntityFrameworkQueryableExtensions))] [EditorBrowsable(EditorBrowsableState.Never)] public static Task MinAsync( - this IRewritableQueryable source, + this IExpressiveQueryable source, Func selector, CancellationToken cancellationToken = default) where TEntity : class @@ -300,7 +300,7 @@ public static Task MinAsync( [PolyfillTarget(typeof(EntityFrameworkQueryableExtensions))] [EditorBrowsable(EditorBrowsableState.Never)] public static Task MaxAsync( - this IRewritableQueryable source, + this IExpressiveQueryable source, Func selector, CancellationToken cancellationToken = default) where TEntity : class diff --git a/src/ExpressiveSharp.EntityFrameworkCore/IIncludableRewritableQueryable.cs b/src/ExpressiveSharp.EntityFrameworkCore/IIncludableExpressiveQueryable.cs similarity index 66% rename from src/ExpressiveSharp.EntityFrameworkCore/IIncludableRewritableQueryable.cs rename to src/ExpressiveSharp.EntityFrameworkCore/IIncludableExpressiveQueryable.cs index a40c690..6acc6c3 100644 --- a/src/ExpressiveSharp.EntityFrameworkCore/IIncludableRewritableQueryable.cs +++ b/src/ExpressiveSharp.EntityFrameworkCore/IIncludableExpressiveQueryable.cs @@ -4,12 +4,12 @@ namespace ExpressiveSharp.EntityFrameworkCore; /// /// Combines (for ThenInclude chaining) -/// with (for delegate-based LINQ stubs with modern C# syntax). -/// Returned by Include and ThenInclude on sources. +/// with (for delegate-based LINQ stubs with modern C# syntax). +/// Returned by Include and ThenInclude on sources. /// -public interface IIncludableRewritableQueryable +public interface IIncludableExpressiveQueryable : IIncludableQueryable, - IRewritableQueryable + IExpressiveQueryable where TEntity : class { } diff --git a/src/ExpressiveSharp.EntityFrameworkCore/Infrastructure/IncludableRewritableQueryableWrapper.cs b/src/ExpressiveSharp.EntityFrameworkCore/Infrastructure/IncludableExpressiveQueryableWrapper.cs similarity index 78% rename from src/ExpressiveSharp.EntityFrameworkCore/Infrastructure/IncludableRewritableQueryableWrapper.cs rename to src/ExpressiveSharp.EntityFrameworkCore/Infrastructure/IncludableExpressiveQueryableWrapper.cs index 6ae8d4c..dd12aad 100644 --- a/src/ExpressiveSharp.EntityFrameworkCore/Infrastructure/IncludableRewritableQueryableWrapper.cs +++ b/src/ExpressiveSharp.EntityFrameworkCore/Infrastructure/IncludableExpressiveQueryableWrapper.cs @@ -6,15 +6,15 @@ namespace ExpressiveSharp.EntityFrameworkCore.Infrastructure; /// /// Wraps an to also implement -/// , preserving chain continuity for delegate-based LINQ stubs. +/// , preserving chain continuity for delegate-based LINQ stubs. /// -internal sealed class IncludableRewritableQueryableWrapper - : IIncludableRewritableQueryable +internal sealed class IncludableExpressiveQueryableWrapper + : IIncludableExpressiveQueryable where TEntity : class { private readonly IIncludableQueryable _inner; - public IncludableRewritableQueryableWrapper(IIncludableQueryable inner) + public IncludableExpressiveQueryableWrapper(IIncludableQueryable inner) => _inner = inner; Type IQueryable.ElementType => ((IQueryable)_inner).ElementType; diff --git a/src/ExpressiveSharp.Generator/PolyfillInterceptorGenerator.cs b/src/ExpressiveSharp.Generator/PolyfillInterceptorGenerator.cs index c97b7dc..779d1b0 100644 --- a/src/ExpressiveSharp.Generator/PolyfillInterceptorGenerator.cs +++ b/src/ExpressiveSharp.Generator/PolyfillInterceptorGenerator.cs @@ -14,20 +14,20 @@ namespace ExpressiveSharp.Generator; /// -/// Source generator that intercepts calls to IRewritableQueryable<T> extension methods +/// Source generator that intercepts calls to IExpressiveQueryable<T> extension methods /// that take Func<T,…> delegates (instead of Expression<Func<T,…>>). /// For each such call-site it emits a [InterceptsLocation] method that rewrites the /// lambda body through and forwards the result to the /// matching Queryable.* overload. /// -/// Any extension method on IRewritableQueryable<T> that takes a Func<> is +/// Any extension method on IExpressiveQueryable<T> that takes a Func<> is /// intercepted by convention — including library-provided stubs and user-defined ones. /// [Generator] public class PolyfillInterceptorGenerator : IIncrementalGenerator { - private const string IRewritableQueryableOpenTypeName = - "ExpressiveSharp.IRewritableQueryable"; + private const string IExpressiveQueryableOpenTypeName = + "ExpressiveSharp.IExpressiveQueryable"; private const string PolyfillTypeName = "ExpressiveSharp.ExpressionPolyfill"; private const string PolyfillMethodName = "Create"; @@ -278,7 +278,7 @@ public InterceptsLocationAttribute(int version, string data) { } """; } - // ── Per-invocation dispatch (IRewritableQueryable) ─────────────────────── + // ── Per-invocation dispatch (IExpressiveQueryable) ─────────────────────── private static string? TryEmit( InvocationExpressionSyntax inv, @@ -290,19 +290,19 @@ public InterceptsLocationAttribute(int version, string data) { } var model = compilation.GetSemanticModel(inv.SyntaxTree); var ma = (MemberAccessExpressionSyntax)inv.Expression; - // Receiver must be or implement IRewritableQueryable. + // Receiver must be or implement IExpressiveQueryable. if (model.GetTypeInfo(ma.Expression).Type is not INamedTypeSymbol receiverType) return null; // Check both the type itself and its implemented interfaces - if (!IsRewritableQueryable(receiverType)) + if (!IsExpressiveQueryable(receiverType)) return null; if (model.GetSymbolInfo(inv).Symbol is not IMethodSymbol method) return null; // The stub convention: at least one non-receiver parameter must be a Func<> delegate, - // not an Expression>. This distinguishes user/library IRewritableQueryable stubs + // not an Expression>. This distinguishes user/library IExpressiveQueryable stubs // from regular IQueryable extension methods. // For most methods, Func<> is Parameters[0]. For Join/GroupJoin/Zip/ExceptBy etc., // it may be at a later position (e.g., Parameters[1]) after an IEnumerable<> arg. @@ -330,9 +330,9 @@ public InterceptsLocationAttribute(int version, string data) { } var interceptAttr = Microsoft.CodeAnalysis.CSharp.CSharpExtensions .GetInterceptsLocationAttributeSyntax(interceptableLocation); - // Element type T of IRewritableQueryable. - // The receiver may be IRewritableQueryable directly, or a type that implements it. - var rewritableInterface = GetRewritableQueryableInterface(receiverType); + // Element type T of IExpressiveQueryable. + // The receiver may be IExpressiveQueryable directly, or a type that implements it. + var rewritableInterface = GetExpressiveQueryableInterface(receiverType); if (rewritableInterface is null) return null; var elementType = rewritableInterface.TypeArguments[0]; @@ -498,9 +498,9 @@ private static bool IsAnonymousType(ITypeSymbol type) hasAnyAnon = hasAnyAnon || IsAnonymousType(method.Parameters[i].Type); } - // Determine if the stub returns IRewritableQueryable (queryable) or a scalar type. + // Determine if the stub returns IExpressiveQueryable (queryable) or a scalar type. var isRewritableReturn = method.ReturnType is INamedTypeSymbol rqType - && rqType.ConstructedFrom.ToDisplayString() == IRewritableQueryableOpenTypeName; + && rqType.ConstructedFrom.ToDisplayString() == IExpressiveQueryableOpenTypeName; ITypeSymbol? returnElemType = null; if (isRewritableReturn) @@ -691,8 +691,8 @@ private static bool IsAnonymousType(ITypeSymbol type) { return $$""" {{interceptAttr}} - internal static global::ExpressiveSharp.IRewritableQueryable<{{returnRef}}> {{MethodId(methodName, idx)}}( - this global::ExpressiveSharp.IRewritableQueryable<{{elemFqn}}> source, + internal static global::ExpressiveSharp.IExpressiveQueryable<{{returnRef}}> {{MethodId(methodName, idx)}}( + this global::ExpressiveSharp.IExpressiveQueryable<{{elemFqn}}> source, {{interceptorParamList}}) { {{allBodies}} return global::ExpressiveSharp.Extensions.ExpressiveQueryableExtensions.AsExpressive( @@ -707,7 +707,7 @@ private static bool IsAnonymousType(ITypeSymbol type) return $$""" {{interceptAttr}} internal static {{returnRef}} {{MethodId(methodName, idx)}}( - this global::ExpressiveSharp.IRewritableQueryable<{{elemFqn}}> source, + this global::ExpressiveSharp.IExpressiveQueryable<{{elemFqn}}> source, {{interceptorParamList}}) { {{allBodies}} return {{targetTypeFqn}}.{{methodName}}( @@ -722,11 +722,11 @@ private static bool IsAnonymousType(ITypeSymbol type) { return $$""" {{interceptAttr}} - internal static global::ExpressiveSharp.IRewritableQueryable<{{returnRef}}> {{MethodId(methodName, idx)}}{{typeParams}}( - this global::ExpressiveSharp.IRewritableQueryable<{{elemRef}}> source, + internal static global::ExpressiveSharp.IExpressiveQueryable<{{returnRef}}> {{MethodId(methodName, idx)}}{{typeParams}}( + this global::ExpressiveSharp.IExpressiveQueryable<{{elemRef}}> source, {{interceptorParamList}}) { - {{allBodies}} return (global::ExpressiveSharp.IRewritableQueryable<{{returnRef}}>)(object) + {{allBodies}} return (global::ExpressiveSharp.IExpressiveQueryable<{{returnRef}}>)(object) global::ExpressiveSharp.Extensions.ExpressiveQueryableExtensions.AsExpressive( {{targetTypeFqn}}.{{methodName}}( ({{castFqn}})(object)source, @@ -739,7 +739,7 @@ private static bool IsAnonymousType(ITypeSymbol type) return $$""" {{interceptAttr}} internal static {{returnRef}} {{MethodId(methodName, idx)}}{{typeParams}}( - this global::ExpressiveSharp.IRewritableQueryable<{{elemRef}}> source, + this global::ExpressiveSharp.IExpressiveQueryable<{{elemRef}}> source, {{interceptorParamList}}) { {{allBodies}} return {{targetTypeFqn}}.{{methodName}}( @@ -751,28 +751,28 @@ private static bool IsAnonymousType(ITypeSymbol type) } /// - /// Returns true if is or implements IRewritableQueryable<T>. + /// Returns true if is or implements IExpressiveQueryable<T>. /// - private static bool IsRewritableQueryable(INamedTypeSymbol type) + private static bool IsExpressiveQueryable(INamedTypeSymbol type) { - if (type.ConstructedFrom.ToDisplayString() == IRewritableQueryableOpenTypeName) + if (type.ConstructedFrom.ToDisplayString() == IExpressiveQueryableOpenTypeName) return true; return type.AllInterfaces.Any(i => - i.ConstructedFrom.ToDisplayString() == IRewritableQueryableOpenTypeName); + i.ConstructedFrom.ToDisplayString() == IExpressiveQueryableOpenTypeName); } /// - /// Finds the IRewritableQueryable<T> interface on , - /// or returns itself if it is IRewritableQueryable<T>. + /// Finds the IExpressiveQueryable<T> interface on , + /// or returns itself if it is IExpressiveQueryable<T>. /// - private static INamedTypeSymbol? GetRewritableQueryableInterface(INamedTypeSymbol type) + private static INamedTypeSymbol? GetExpressiveQueryableInterface(INamedTypeSymbol type) { - if (type.ConstructedFrom.ToDisplayString() == IRewritableQueryableOpenTypeName) + if (type.ConstructedFrom.ToDisplayString() == IExpressiveQueryableOpenTypeName) return type; return type.AllInterfaces.FirstOrDefault(i => - i.ConstructedFrom.ToDisplayString() == IRewritableQueryableOpenTypeName); + i.ConstructedFrom.ToDisplayString() == IExpressiveQueryableOpenTypeName); } /// diff --git a/src/ExpressiveSharp/ExpressionRewriteOptions.cs b/src/ExpressiveSharp/ExpressionRewriteOptions.cs index 8dcc6ec..c37e382 100644 --- a/src/ExpressiveSharp/ExpressionRewriteOptions.cs +++ b/src/ExpressiveSharp/ExpressionRewriteOptions.cs @@ -1,7 +1,7 @@ namespace ExpressiveSharp { /// - /// Options for controlling how inline lambdas in IRewritableQueryable<T> chains are processed. + /// Options for controlling how inline lambdas in IExpressiveQueryable<T> chains are processed. /// /// /// Transformers listed here are applied at runtime to the expression trees diff --git a/src/ExpressiveSharp/RewritableQueryableWrapper.cs b/src/ExpressiveSharp/ExpressiveQueryableWrapper.cs similarity index 88% rename from src/ExpressiveSharp/RewritableQueryableWrapper.cs rename to src/ExpressiveSharp/ExpressiveQueryableWrapper.cs index 30e15a3..bba2ed9 100644 --- a/src/ExpressiveSharp/RewritableQueryableWrapper.cs +++ b/src/ExpressiveSharp/ExpressiveQueryableWrapper.cs @@ -7,7 +7,7 @@ namespace ExpressiveSharp { /// - /// Internal wrapper that adapts an to . + /// Internal wrapper that adapts an to . /// Created by and by source-generated interceptors. /// /// @@ -15,11 +15,11 @@ namespace ExpressiveSharp /// so that the source-generated ThenBy/ThenByDescending interceptors can cast the wrapper /// to without a runtime exception. /// - internal sealed class RewritableQueryableWrapper : IRewritableQueryable, IOrderedQueryable, IAsyncEnumerable + internal sealed class ExpressiveQueryableWrapper : IExpressiveQueryable, IOrderedQueryable, IAsyncEnumerable { private readonly IQueryable _source; - public RewritableQueryableWrapper(IQueryable source) + public ExpressiveQueryableWrapper(IQueryable source) { _source = source ?? throw new ArgumentNullException(nameof(source)); } diff --git a/src/ExpressiveSharp/Extensions/ExpressiveQueryableExtensions.cs b/src/ExpressiveSharp/Extensions/ExpressiveQueryableExtensions.cs index 57e00a1..14c3952 100644 --- a/src/ExpressiveSharp/Extensions/ExpressiveQueryableExtensions.cs +++ b/src/ExpressiveSharp/Extensions/ExpressiveQueryableExtensions.cs @@ -3,12 +3,12 @@ namespace ExpressiveSharp.Extensions { /// - /// Entry-point extension methods for the query chain. + /// Entry-point extension methods for the query chain. /// public static class ExpressiveQueryableExtensions { /// - /// Wraps an in an to enable + /// Wraps an in an to enable /// delegate-based LINQ overloads that support modern C# syntax (null-conditional operators, etc.) /// via compile-time source generator interception. /// @@ -17,9 +17,9 @@ public static class ExpressiveQueryableExtensions /// Options controlling how inline lambda bodies are rewritten to expression trees. /// This value is read by the source generator at compile time; it is ignored at runtime. /// - public static IRewritableQueryable AsExpressive( + public static IExpressiveQueryable AsExpressive( this IQueryable source, ExpressionRewriteOptions? options = null) - => new RewritableQueryableWrapper(source); + => new ExpressiveQueryableWrapper(source); } } diff --git a/src/ExpressiveSharp/Extensions/RewritableQueryableLinqExtensions.cs b/src/ExpressiveSharp/Extensions/ExpressiveQueryableLinqExtensions.cs similarity index 73% rename from src/ExpressiveSharp/Extensions/RewritableQueryableLinqExtensions.cs rename to src/ExpressiveSharp/Extensions/ExpressiveQueryableLinqExtensions.cs index 8e86b10..66a5283 100644 --- a/src/ExpressiveSharp/Extensions/RewritableQueryableLinqExtensions.cs +++ b/src/ExpressiveSharp/Extensions/ExpressiveQueryableLinqExtensions.cs @@ -7,7 +7,7 @@ namespace ExpressiveSharp.Extensions { /// - /// Delegate-based LINQ overloads on that shadow the + /// Delegate-based LINQ overloads on that shadow the /// extension methods. These stubs are intercepted at compile time by /// the ExpressiveSharp source generator, which rewrites the inline lambda body /// into an expression tree and routes the call to the corresponding @@ -15,97 +15,97 @@ namespace ExpressiveSharp.Extensions /// /// /// These methods are hidden from IntelliSense. The C# compiler resolves them in preference to the - /// equivalents because is a more specific + /// equivalents because is a more specific /// type than , which causes the delegate-accepting overload to win, /// allowing modern C# syntax (null-conditional operators, pattern matching, etc.) to compile. /// [EditorBrowsable(EditorBrowsableState.Never)] - public static class RewritableQueryableLinqExtensions + public static class ExpressiveQueryableLinqExtensions { private const string InterceptedMessage = "This method must be intercepted by the ExpressiveSharp source generator. " + "Ensure the generator package is installed and the InterceptorsNamespaces MSBuild property is configured."; [EditorBrowsable(EditorBrowsableState.Never)] - public static IRewritableQueryable Where( - this IRewritableQueryable source, + public static IExpressiveQueryable Where( + this IExpressiveQueryable source, Func predicate) => throw new UnreachableException(InterceptedMessage); [EditorBrowsable(EditorBrowsableState.Never)] - public static IRewritableQueryable Select( - this IRewritableQueryable source, + public static IExpressiveQueryable Select( + this IExpressiveQueryable source, Func selector) => throw new UnreachableException(InterceptedMessage); [EditorBrowsable(EditorBrowsableState.Never)] - public static IRewritableQueryable Select( - this IRewritableQueryable source, + public static IExpressiveQueryable Select( + this IExpressiveQueryable source, Func selector) => throw new UnreachableException(InterceptedMessage); [EditorBrowsable(EditorBrowsableState.Never)] - public static IRewritableQueryable SelectMany( - this IRewritableQueryable source, + public static IExpressiveQueryable SelectMany( + this IExpressiveQueryable source, Func> selector) => throw new UnreachableException(InterceptedMessage); [EditorBrowsable(EditorBrowsableState.Never)] - public static IRewritableQueryable SelectMany( - this IRewritableQueryable source, + public static IExpressiveQueryable SelectMany( + this IExpressiveQueryable source, Func> collectionSelector, Func resultSelector) => throw new UnreachableException(InterceptedMessage); [EditorBrowsable(EditorBrowsableState.Never)] - public static IRewritableQueryable OrderBy( - this IRewritableQueryable source, + public static IExpressiveQueryable OrderBy( + this IExpressiveQueryable source, Func keySelector) => throw new UnreachableException(InterceptedMessage); [EditorBrowsable(EditorBrowsableState.Never)] - public static IRewritableQueryable OrderByDescending( - this IRewritableQueryable source, + public static IExpressiveQueryable OrderByDescending( + this IExpressiveQueryable source, Func keySelector) => throw new UnreachableException(InterceptedMessage); [EditorBrowsable(EditorBrowsableState.Never)] - public static IRewritableQueryable ThenBy( - this IRewritableQueryable source, + public static IExpressiveQueryable ThenBy( + this IExpressiveQueryable source, Func keySelector) => throw new UnreachableException(InterceptedMessage); [EditorBrowsable(EditorBrowsableState.Never)] - public static IRewritableQueryable ThenByDescending( - this IRewritableQueryable source, + public static IExpressiveQueryable ThenByDescending( + this IExpressiveQueryable source, Func keySelector) => throw new UnreachableException(InterceptedMessage); [EditorBrowsable(EditorBrowsableState.Never)] - public static IRewritableQueryable> GroupBy( - this IRewritableQueryable source, + public static IExpressiveQueryable> GroupBy( + this IExpressiveQueryable source, Func keySelector) => throw new UnreachableException(InterceptedMessage); // ── Partitioning ───────────────────────────────────────────────────── [EditorBrowsable(EditorBrowsableState.Never)] - public static IRewritableQueryable TakeWhile( - this IRewritableQueryable source, + public static IExpressiveQueryable TakeWhile( + this IExpressiveQueryable source, Func predicate) => throw new UnreachableException(InterceptedMessage); [EditorBrowsable(EditorBrowsableState.Never)] - public static IRewritableQueryable SkipWhile( - this IRewritableQueryable source, + public static IExpressiveQueryable SkipWhile( + this IExpressiveQueryable source, Func predicate) => throw new UnreachableException(InterceptedMessage); // ── Set operations with key selector ───────────────────────────────── [EditorBrowsable(EditorBrowsableState.Never)] - public static IRewritableQueryable DistinctBy( - this IRewritableQueryable source, + public static IExpressiveQueryable DistinctBy( + this IExpressiveQueryable source, Func keySelector) => throw new UnreachableException(InterceptedMessage); @@ -113,8 +113,8 @@ public static IRewritableQueryable DistinctBy( // ── .NET 9+ methods ────────────────────────────────────────────────── [EditorBrowsable(EditorBrowsableState.Never)] - public static IRewritableQueryable> CountBy( - this IRewritableQueryable source, + public static IExpressiveQueryable> CountBy( + this IExpressiveQueryable source, Func keySelector) => throw new UnreachableException(InterceptedMessage); #endif @@ -123,25 +123,25 @@ public static IRewritableQueryable> CountBy( [EditorBrowsable(EditorBrowsableState.Never)] public static bool Any( - this IRewritableQueryable source, + this IExpressiveQueryable source, Func predicate) => throw new UnreachableException(InterceptedMessage); [EditorBrowsable(EditorBrowsableState.Never)] public static bool All( - this IRewritableQueryable source, + this IExpressiveQueryable source, Func predicate) => throw new UnreachableException(InterceptedMessage); [EditorBrowsable(EditorBrowsableState.Never)] public static int Count( - this IRewritableQueryable source, + this IExpressiveQueryable source, Func predicate) => throw new UnreachableException(InterceptedMessage); [EditorBrowsable(EditorBrowsableState.Never)] public static long LongCount( - this IRewritableQueryable source, + this IExpressiveQueryable source, Func predicate) => throw new UnreachableException(InterceptedMessage); @@ -149,37 +149,37 @@ public static long LongCount( [EditorBrowsable(EditorBrowsableState.Never)] public static T First( - this IRewritableQueryable source, + this IExpressiveQueryable source, Func predicate) => throw new UnreachableException(InterceptedMessage); [EditorBrowsable(EditorBrowsableState.Never)] public static T? FirstOrDefault( - this IRewritableQueryable source, + this IExpressiveQueryable source, Func predicate) => throw new UnreachableException(InterceptedMessage); [EditorBrowsable(EditorBrowsableState.Never)] public static T Last( - this IRewritableQueryable source, + this IExpressiveQueryable source, Func predicate) => throw new UnreachableException(InterceptedMessage); [EditorBrowsable(EditorBrowsableState.Never)] public static T? LastOrDefault( - this IRewritableQueryable source, + this IExpressiveQueryable source, Func predicate) => throw new UnreachableException(InterceptedMessage); [EditorBrowsable(EditorBrowsableState.Never)] public static T Single( - this IRewritableQueryable source, + this IExpressiveQueryable source, Func predicate) => throw new UnreachableException(InterceptedMessage); [EditorBrowsable(EditorBrowsableState.Never)] public static T? SingleOrDefault( - this IRewritableQueryable source, + this IExpressiveQueryable source, Func predicate) => throw new UnreachableException(InterceptedMessage); @@ -187,61 +187,61 @@ public static T Single( [EditorBrowsable(EditorBrowsableState.Never)] public static int Sum( - this IRewritableQueryable source, + this IExpressiveQueryable source, Func selector) => throw new UnreachableException(InterceptedMessage); [EditorBrowsable(EditorBrowsableState.Never)] public static int? Sum( - this IRewritableQueryable source, + this IExpressiveQueryable source, Func selector) => throw new UnreachableException(InterceptedMessage); [EditorBrowsable(EditorBrowsableState.Never)] public static long Sum( - this IRewritableQueryable source, + this IExpressiveQueryable source, Func selector) => throw new UnreachableException(InterceptedMessage); [EditorBrowsable(EditorBrowsableState.Never)] public static long? Sum( - this IRewritableQueryable source, + this IExpressiveQueryable source, Func selector) => throw new UnreachableException(InterceptedMessage); [EditorBrowsable(EditorBrowsableState.Never)] public static float Sum( - this IRewritableQueryable source, + this IExpressiveQueryable source, Func selector) => throw new UnreachableException(InterceptedMessage); [EditorBrowsable(EditorBrowsableState.Never)] public static float? Sum( - this IRewritableQueryable source, + this IExpressiveQueryable source, Func selector) => throw new UnreachableException(InterceptedMessage); [EditorBrowsable(EditorBrowsableState.Never)] public static double Sum( - this IRewritableQueryable source, + this IExpressiveQueryable source, Func selector) => throw new UnreachableException(InterceptedMessage); [EditorBrowsable(EditorBrowsableState.Never)] public static double? Sum( - this IRewritableQueryable source, + this IExpressiveQueryable source, Func selector) => throw new UnreachableException(InterceptedMessage); [EditorBrowsable(EditorBrowsableState.Never)] public static decimal Sum( - this IRewritableQueryable source, + this IExpressiveQueryable source, Func selector) => throw new UnreachableException(InterceptedMessage); [EditorBrowsable(EditorBrowsableState.Never)] public static decimal? Sum( - this IRewritableQueryable source, + this IExpressiveQueryable source, Func selector) => throw new UnreachableException(InterceptedMessage); @@ -249,61 +249,61 @@ public static decimal Sum( [EditorBrowsable(EditorBrowsableState.Never)] public static double Average( - this IRewritableQueryable source, + this IExpressiveQueryable source, Func selector) => throw new UnreachableException(InterceptedMessage); [EditorBrowsable(EditorBrowsableState.Never)] public static double? Average( - this IRewritableQueryable source, + this IExpressiveQueryable source, Func selector) => throw new UnreachableException(InterceptedMessage); [EditorBrowsable(EditorBrowsableState.Never)] public static double Average( - this IRewritableQueryable source, + this IExpressiveQueryable source, Func selector) => throw new UnreachableException(InterceptedMessage); [EditorBrowsable(EditorBrowsableState.Never)] public static double? Average( - this IRewritableQueryable source, + this IExpressiveQueryable source, Func selector) => throw new UnreachableException(InterceptedMessage); [EditorBrowsable(EditorBrowsableState.Never)] public static float Average( - this IRewritableQueryable source, + this IExpressiveQueryable source, Func selector) => throw new UnreachableException(InterceptedMessage); [EditorBrowsable(EditorBrowsableState.Never)] public static float? Average( - this IRewritableQueryable source, + this IExpressiveQueryable source, Func selector) => throw new UnreachableException(InterceptedMessage); [EditorBrowsable(EditorBrowsableState.Never)] public static double Average( - this IRewritableQueryable source, + this IExpressiveQueryable source, Func selector) => throw new UnreachableException(InterceptedMessage); [EditorBrowsable(EditorBrowsableState.Never)] public static double? Average( - this IRewritableQueryable source, + this IExpressiveQueryable source, Func selector) => throw new UnreachableException(InterceptedMessage); [EditorBrowsable(EditorBrowsableState.Never)] public static decimal Average( - this IRewritableQueryable source, + this IExpressiveQueryable source, Func selector) => throw new UnreachableException(InterceptedMessage); [EditorBrowsable(EditorBrowsableState.Never)] public static decimal? Average( - this IRewritableQueryable source, + this IExpressiveQueryable source, Func selector) => throw new UnreachableException(InterceptedMessage); @@ -311,126 +311,126 @@ public static decimal Average( [EditorBrowsable(EditorBrowsableState.Never)] public static TResult Min( - this IRewritableQueryable source, + this IExpressiveQueryable source, Func selector) => throw new UnreachableException(InterceptedMessage); [EditorBrowsable(EditorBrowsableState.Never)] public static TResult Max( - this IRewritableQueryable source, + this IExpressiveQueryable source, Func selector) => throw new UnreachableException(InterceptedMessage); [EditorBrowsable(EditorBrowsableState.Never)] public static T? MinBy( - this IRewritableQueryable source, + this IExpressiveQueryable source, Func keySelector) => throw new UnreachableException(InterceptedMessage); [EditorBrowsable(EditorBrowsableState.Never)] public static T? MaxBy( - this IRewritableQueryable source, + this IExpressiveQueryable source, Func keySelector) => throw new UnreachableException(InterceptedMessage); // ── Passthrough chain-continuity stubs (runtime, not intercepted) ──── [EditorBrowsable(EditorBrowsableState.Never)] - public static IRewritableQueryable Take( - this IRewritableQueryable source, + public static IExpressiveQueryable Take( + this IExpressiveQueryable source, int count) => Queryable.Take(source, count).AsExpressive(); [EditorBrowsable(EditorBrowsableState.Never)] - public static IRewritableQueryable Skip( - this IRewritableQueryable source, + public static IExpressiveQueryable Skip( + this IExpressiveQueryable source, int count) => Queryable.Skip(source, count).AsExpressive(); [EditorBrowsable(EditorBrowsableState.Never)] - public static IRewritableQueryable Distinct( - this IRewritableQueryable source) + public static IExpressiveQueryable Distinct( + this IExpressiveQueryable source) => Queryable.Distinct(source).AsExpressive(); [EditorBrowsable(EditorBrowsableState.Never)] - public static IRewritableQueryable Reverse( - this IRewritableQueryable source) + public static IExpressiveQueryable Reverse( + this IExpressiveQueryable source) => Queryable.Reverse(source).AsExpressive(); [EditorBrowsable(EditorBrowsableState.Never)] - public static IRewritableQueryable Concat( - this IRewritableQueryable source, + public static IExpressiveQueryable Concat( + this IExpressiveQueryable source, IEnumerable other) => Queryable.Concat(source, other).AsExpressive(); [EditorBrowsable(EditorBrowsableState.Never)] - public static IRewritableQueryable Union( - this IRewritableQueryable source, + public static IExpressiveQueryable Union( + this IExpressiveQueryable source, IEnumerable other) => Queryable.Union(source, other).AsExpressive(); [EditorBrowsable(EditorBrowsableState.Never)] - public static IRewritableQueryable Intersect( - this IRewritableQueryable source, + public static IExpressiveQueryable Intersect( + this IExpressiveQueryable source, IEnumerable other) => Queryable.Intersect(source, other).AsExpressive(); [EditorBrowsable(EditorBrowsableState.Never)] - public static IRewritableQueryable Except( - this IRewritableQueryable source, + public static IExpressiveQueryable Except( + this IExpressiveQueryable source, IEnumerable other) => Queryable.Except(source, other).AsExpressive(); [EditorBrowsable(EditorBrowsableState.Never)] - public static IRewritableQueryable DefaultIfEmpty( - this IRewritableQueryable source) + public static IExpressiveQueryable DefaultIfEmpty( + this IExpressiveQueryable source) => Queryable.DefaultIfEmpty(source).AsExpressive(); [EditorBrowsable(EditorBrowsableState.Never)] - public static IRewritableQueryable DefaultIfEmpty( - this IRewritableQueryable source, + public static IExpressiveQueryable DefaultIfEmpty( + this IExpressiveQueryable source, T defaultValue) => Queryable.DefaultIfEmpty(source, defaultValue).AsExpressive(); #if NET9_0_OR_GREATER [EditorBrowsable(EditorBrowsableState.Never)] - public static IRewritableQueryable<(int Index, T Item)> Index( - this IRewritableQueryable source) + public static IExpressiveQueryable<(int Index, T Item)> Index( + this IExpressiveQueryable source) => Queryable.Index(source).AsExpressive(); #endif // ── Non-lambda-first intercepted methods ───────────────────────────── [EditorBrowsable(EditorBrowsableState.Never)] - public static IRewritableQueryable Zip( - this IRewritableQueryable source, + public static IExpressiveQueryable Zip( + this IExpressiveQueryable source, IEnumerable second, Func resultSelector) => throw new UnreachableException(InterceptedMessage); [EditorBrowsable(EditorBrowsableState.Never)] - public static IRewritableQueryable<(T First, TSecond Second)> Zip( - this IRewritableQueryable source, + public static IExpressiveQueryable<(T First, TSecond Second)> Zip( + this IExpressiveQueryable source, IEnumerable second) => Queryable.Zip(source, second).AsExpressive(); [EditorBrowsable(EditorBrowsableState.Never)] - public static IRewritableQueryable ExceptBy( - this IRewritableQueryable source, + public static IExpressiveQueryable ExceptBy( + this IExpressiveQueryable source, IEnumerable second, Func keySelector) => throw new UnreachableException(InterceptedMessage); [EditorBrowsable(EditorBrowsableState.Never)] - public static IRewritableQueryable IntersectBy( - this IRewritableQueryable source, + public static IExpressiveQueryable IntersectBy( + this IExpressiveQueryable source, IEnumerable second, Func keySelector) => throw new UnreachableException(InterceptedMessage); [EditorBrowsable(EditorBrowsableState.Never)] - public static IRewritableQueryable UnionBy( - this IRewritableQueryable source, + public static IExpressiveQueryable UnionBy( + this IExpressiveQueryable source, IEnumerable second, Func keySelector) => throw new UnreachableException(InterceptedMessage); @@ -438,30 +438,30 @@ public static IRewritableQueryable UnionBy( // ── Multi-lambda methods ───────────────────────────────────────────── [EditorBrowsable(EditorBrowsableState.Never)] - public static IRewritableQueryable> GroupBy( - this IRewritableQueryable source, + public static IExpressiveQueryable> GroupBy( + this IExpressiveQueryable source, Func keySelector, Func elementSelector) => throw new UnreachableException(InterceptedMessage); [EditorBrowsable(EditorBrowsableState.Never)] - public static IRewritableQueryable GroupBy( - this IRewritableQueryable source, + public static IExpressiveQueryable GroupBy( + this IExpressiveQueryable source, Func keySelector, Func, TResult> resultSelector) => throw new UnreachableException(InterceptedMessage); [EditorBrowsable(EditorBrowsableState.Never)] - public static IRewritableQueryable GroupBy( - this IRewritableQueryable source, + public static IExpressiveQueryable GroupBy( + this IExpressiveQueryable source, Func keySelector, Func elementSelector, Func, TResult> resultSelector) => throw new UnreachableException(InterceptedMessage); [EditorBrowsable(EditorBrowsableState.Never)] - public static IRewritableQueryable Join( - this IRewritableQueryable source, + public static IExpressiveQueryable Join( + this IExpressiveQueryable source, IEnumerable inner, Func outerKeySelector, Func innerKeySelector, @@ -469,8 +469,8 @@ public static IRewritableQueryable Join( => throw new UnreachableException(InterceptedMessage); [EditorBrowsable(EditorBrowsableState.Never)] - public static IRewritableQueryable GroupJoin( - this IRewritableQueryable source, + public static IExpressiveQueryable GroupJoin( + this IExpressiveQueryable source, IEnumerable inner, Func outerKeySelector, Func innerKeySelector, @@ -479,8 +479,8 @@ public static IRewritableQueryable GroupJoin( #if NET10_0_OR_GREATER [EditorBrowsable(EditorBrowsableState.Never)] - public static IRewritableQueryable LeftJoin( - this IRewritableQueryable source, + public static IExpressiveQueryable LeftJoin( + this IExpressiveQueryable source, IEnumerable inner, Func outerKeySelector, Func innerKeySelector, @@ -488,8 +488,8 @@ public static IRewritableQueryable LeftJoin( => throw new UnreachableException(InterceptedMessage); [EditorBrowsable(EditorBrowsableState.Never)] - public static IRewritableQueryable RightJoin( - this IRewritableQueryable source, + public static IExpressiveQueryable RightJoin( + this IExpressiveQueryable source, IEnumerable inner, Func outerKeySelector, Func innerKeySelector, @@ -499,16 +499,16 @@ public static IRewritableQueryable RightJoin( #if NET9_0_OR_GREATER [EditorBrowsable(EditorBrowsableState.Never)] - public static IRewritableQueryable> AggregateBy( - this IRewritableQueryable source, + public static IExpressiveQueryable> AggregateBy( + this IExpressiveQueryable source, Func keySelector, TAccumulate seed, Func func) => throw new UnreachableException(InterceptedMessage); [EditorBrowsable(EditorBrowsableState.Never)] - public static IRewritableQueryable> AggregateBy( - this IRewritableQueryable source, + public static IExpressiveQueryable> AggregateBy( + this IExpressiveQueryable source, Func keySelector, Func seedSelector, Func func) @@ -518,66 +518,66 @@ public static IRewritableQueryable> AggregateBy< // ── IEqualityComparer / IComparer overloads (intercepted) ──────────── [EditorBrowsable(EditorBrowsableState.Never)] - public static IRewritableQueryable OrderBy( - this IRewritableQueryable source, + public static IExpressiveQueryable OrderBy( + this IExpressiveQueryable source, Func keySelector, IComparer? comparer) => throw new UnreachableException(InterceptedMessage); [EditorBrowsable(EditorBrowsableState.Never)] - public static IRewritableQueryable OrderByDescending( - this IRewritableQueryable source, + public static IExpressiveQueryable OrderByDescending( + this IExpressiveQueryable source, Func keySelector, IComparer? comparer) => throw new UnreachableException(InterceptedMessage); [EditorBrowsable(EditorBrowsableState.Never)] - public static IRewritableQueryable ThenBy( - this IRewritableQueryable source, + public static IExpressiveQueryable ThenBy( + this IExpressiveQueryable source, Func keySelector, IComparer? comparer) => throw new UnreachableException(InterceptedMessage); [EditorBrowsable(EditorBrowsableState.Never)] - public static IRewritableQueryable ThenByDescending( - this IRewritableQueryable source, + public static IExpressiveQueryable ThenByDescending( + this IExpressiveQueryable source, Func keySelector, IComparer? comparer) => throw new UnreachableException(InterceptedMessage); [EditorBrowsable(EditorBrowsableState.Never)] - public static IRewritableQueryable> GroupBy( - this IRewritableQueryable source, + public static IExpressiveQueryable> GroupBy( + this IExpressiveQueryable source, Func keySelector, IEqualityComparer? comparer) => throw new UnreachableException(InterceptedMessage); [EditorBrowsable(EditorBrowsableState.Never)] - public static IRewritableQueryable DistinctBy( - this IRewritableQueryable source, + public static IExpressiveQueryable DistinctBy( + this IExpressiveQueryable source, Func keySelector, IEqualityComparer? comparer) => throw new UnreachableException(InterceptedMessage); [EditorBrowsable(EditorBrowsableState.Never)] - public static IRewritableQueryable ExceptBy( - this IRewritableQueryable source, + public static IExpressiveQueryable ExceptBy( + this IExpressiveQueryable source, IEnumerable second, Func keySelector, IEqualityComparer? comparer) => throw new UnreachableException(InterceptedMessage); [EditorBrowsable(EditorBrowsableState.Never)] - public static IRewritableQueryable IntersectBy( - this IRewritableQueryable source, + public static IExpressiveQueryable IntersectBy( + this IExpressiveQueryable source, IEnumerable second, Func keySelector, IEqualityComparer? comparer) => throw new UnreachableException(InterceptedMessage); [EditorBrowsable(EditorBrowsableState.Never)] - public static IRewritableQueryable UnionBy( - this IRewritableQueryable source, + public static IExpressiveQueryable UnionBy( + this IExpressiveQueryable source, IEnumerable second, Func keySelector, IEqualityComparer? comparer) @@ -586,28 +586,28 @@ public static IRewritableQueryable UnionBy( // ── IEqualityComparer passthrough (no lambda, chain continuity) ────── [EditorBrowsable(EditorBrowsableState.Never)] - public static IRewritableQueryable Distinct( - this IRewritableQueryable source, + public static IExpressiveQueryable Distinct( + this IExpressiveQueryable source, IEqualityComparer? comparer) => Queryable.Distinct(source, comparer).AsExpressive(); [EditorBrowsable(EditorBrowsableState.Never)] - public static IRewritableQueryable Union( - this IRewritableQueryable source, + public static IExpressiveQueryable Union( + this IExpressiveQueryable source, IEnumerable other, IEqualityComparer? comparer) => Queryable.Union(source, other, comparer).AsExpressive(); [EditorBrowsable(EditorBrowsableState.Never)] - public static IRewritableQueryable Intersect( - this IRewritableQueryable source, + public static IExpressiveQueryable Intersect( + this IExpressiveQueryable source, IEnumerable other, IEqualityComparer? comparer) => Queryable.Intersect(source, other, comparer).AsExpressive(); [EditorBrowsable(EditorBrowsableState.Never)] - public static IRewritableQueryable Except( - this IRewritableQueryable source, + public static IExpressiveQueryable Except( + this IExpressiveQueryable source, IEnumerable other, IEqualityComparer? comparer) => Queryable.Except(source, other, comparer).AsExpressive(); diff --git a/src/ExpressiveSharp/IRewritableQueryable.cs b/src/ExpressiveSharp/IExpressiveQueryable.cs similarity index 92% rename from src/ExpressiveSharp/IRewritableQueryable.cs rename to src/ExpressiveSharp/IExpressiveQueryable.cs index d63de1f..2df8106 100644 --- a/src/ExpressiveSharp/IRewritableQueryable.cs +++ b/src/ExpressiveSharp/IExpressiveQueryable.cs @@ -13,7 +13,7 @@ namespace ExpressiveSharp /// ExpressiveSharp source generator, which rewrites the lambda body into an /// expression tree using the same rewrite rules as . /// - public interface IRewritableQueryable : IQueryable + public interface IExpressiveQueryable : IQueryable { } } diff --git a/tests/ExpressiveSharp.EntityFrameworkCore.IntegrationTests/Infrastructure/AsyncQueryableTestBase.cs b/tests/ExpressiveSharp.EntityFrameworkCore.IntegrationTests/Infrastructure/AsyncQueryableTestBase.cs index c10ec37..4c2952f 100644 --- a/tests/ExpressiveSharp.EntityFrameworkCore.IntegrationTests/Infrastructure/AsyncQueryableTestBase.cs +++ b/tests/ExpressiveSharp.EntityFrameworkCore.IntegrationTests/Infrastructure/AsyncQueryableTestBase.cs @@ -6,7 +6,7 @@ namespace ExpressiveSharp.EntityFrameworkCore.IntegrationTests.Infrastructure; /// -/// Integration tests for async terminal +/// Integration tests for async terminal /// methods, multi-lambda operators, chain continuity, and null-conditional /// syntax in delegate lambdas. These exercise the polyfill interceptor path /// that rewrites delegate-based LINQ calls into expression trees. diff --git a/tests/ExpressiveSharp.EntityFrameworkCore.IntegrationTests/Infrastructure/ExecuteUpdateTestBase.cs b/tests/ExpressiveSharp.EntityFrameworkCore.IntegrationTests/Infrastructure/ExecuteUpdateTestBase.cs index b298790..41f3b3f 100644 --- a/tests/ExpressiveSharp.EntityFrameworkCore.IntegrationTests/Infrastructure/ExecuteUpdateTestBase.cs +++ b/tests/ExpressiveSharp.EntityFrameworkCore.IntegrationTests/Infrastructure/ExecuteUpdateTestBase.cs @@ -6,7 +6,7 @@ namespace ExpressiveSharp.EntityFrameworkCore.IntegrationTests.Infrastructure; /// -/// Integration tests for ExecuteUpdate via IRewritableQueryable. +/// Integration tests for ExecuteUpdate via IExpressiveQueryable. /// Proves that modern C# syntax (switch expressions, null-coalescing) inside /// SetProperty value lambdas translates to real SQL — a capability /// impossible with normal C# expression trees. diff --git a/tests/ExpressiveSharp.EntityFrameworkCore.IntegrationTests/Infrastructure/IncludeTestBase.cs b/tests/ExpressiveSharp.EntityFrameworkCore.IntegrationTests/Infrastructure/IncludeTestBase.cs index 5b4050e..734bbc4 100644 --- a/tests/ExpressiveSharp.EntityFrameworkCore.IntegrationTests/Infrastructure/IncludeTestBase.cs +++ b/tests/ExpressiveSharp.EntityFrameworkCore.IntegrationTests/Infrastructure/IncludeTestBase.cs @@ -6,9 +6,9 @@ namespace ExpressiveSharp.EntityFrameworkCore.IntegrationTests.Infrastructure; /// /// Integration tests for Include/ThenInclude chain continuity via -/// . Verifies +/// . Verifies /// that navigation loading works end-to-end after Include on a -/// rewritable queryable. +/// expressive queryable. /// public abstract class IncludeTestBase : EFCoreRelationalTestBase { diff --git a/tests/ExpressiveSharp.Generator.Tests/ExpressiveGenerator/MissingExpressiveDiagnosticTests.cs b/tests/ExpressiveSharp.Generator.Tests/ExpressiveGenerator/MissingExpressiveDiagnosticTests.cs index 0d6156a..86f07d5 100644 --- a/tests/ExpressiveSharp.Generator.Tests/ExpressiveGenerator/MissingExpressiveDiagnosticTests.cs +++ b/tests/ExpressiveSharp.Generator.Tests/ExpressiveGenerator/MissingExpressiveDiagnosticTests.cs @@ -270,10 +270,10 @@ class Order { "Should not warn for enum extension method — generator expands these via TryEmitEnumMethodExpansion"); } - // ── Prong 2: IRewritableQueryable LINQ lambdas ──────────────────────── + // ── Prong 2: IExpressiveQueryable LINQ lambdas ──────────────────────── [TestMethod] - public async Task RewritableQueryable_Select_WithNonExpressiveExtensionMethod_WarnsEXP0013() + public async Task ExpressiveQueryable_Select_WithNonExpressiveExtensionMethod_WarnsEXP0013() { var diagnostics = await RunAnalyzerAsync( """ @@ -293,7 +293,7 @@ public static TodoItem AsTodoItem(this Todo t) } class C { - void Run(IRewritableQueryable source) { + void Run(IExpressiveQueryable source) { source.Select(t => t.AsTodoItem()); } } @@ -301,11 +301,11 @@ void Run(IRewritableQueryable source) { """); Assert.IsTrue(diagnostics.Any(d => d.Id == "EXP0013"), - "Expected EXP0013 for non-[Expressive] extension method in IRewritableQueryable Select lambda"); + "Expected EXP0013 for non-[Expressive] extension method in IExpressiveQueryable Select lambda"); } [TestMethod] - public async Task RewritableQueryable_Where_WithNonExpressiveInstanceMethod_WarnsEXP0013() + public async Task ExpressiveQueryable_Where_WithNonExpressiveInstanceMethod_WarnsEXP0013() { var diagnostics = await RunAnalyzerAsync( """ @@ -318,7 +318,7 @@ class Todo { } class C { - void Run(IRewritableQueryable source) { + void Run(IExpressiveQueryable source) { source.Where(t => t.IsImportant()); } } @@ -326,11 +326,11 @@ void Run(IRewritableQueryable source) { """); Assert.IsTrue(diagnostics.Any(d => d.Id == "EXP0013"), - "Expected EXP0013 for non-[Expressive] instance method in IRewritableQueryable Where lambda"); + "Expected EXP0013 for non-[Expressive] instance method in IExpressiveQueryable Where lambda"); } [TestMethod] - public async Task RewritableQueryable_Select_WithNonExpressiveProperty_WarnsEXP0013() + public async Task ExpressiveQueryable_Select_WithNonExpressiveProperty_WarnsEXP0013() { var diagnostics = await RunAnalyzerAsync( """ @@ -344,7 +344,7 @@ class Todo { } class C { - void Run(IRewritableQueryable source) { + void Run(IExpressiveQueryable source) { source.Select(t => t.FullName); } } @@ -352,11 +352,11 @@ void Run(IRewritableQueryable source) { """); Assert.IsTrue(diagnostics.Any(d => d.Id == "EXP0013"), - "Expected EXP0013 for non-[Expressive] property in IRewritableQueryable Select lambda"); + "Expected EXP0013 for non-[Expressive] property in IExpressiveQueryable Select lambda"); } [TestMethod] - public async Task RewritableQueryable_MethodGroup_WithNonExpressiveMethod_WarnsEXP0013() + public async Task ExpressiveQueryable_MethodGroup_WithNonExpressiveMethod_WarnsEXP0013() { var diagnostics = await RunAnalyzerAsync( """ @@ -378,7 +378,7 @@ public static TodoItem AsTodoItem(this Todo t) class C { static TodoItem Convert(Todo t) => new TodoItem { Name = t.Name }; - void Run(IRewritableQueryable source) { + void Run(IExpressiveQueryable source) { source.Select(Convert); } } @@ -386,13 +386,13 @@ void Run(IRewritableQueryable source) { """); Assert.IsTrue(diagnostics.Any(d => d.Id == "EXP0013"), - "Expected EXP0013 for non-[Expressive] method group in IRewritableQueryable Select"); + "Expected EXP0013 for non-[Expressive] method group in IExpressiveQueryable Select"); } // ── Prong 2 Negative: no EXP0013 in LINQ lambdas ─────────────────────── [TestMethod] - public async Task RewritableQueryable_WithExpressiveMethod_NoWarning() + public async Task ExpressiveQueryable_WithExpressiveMethod_NoWarning() { var diagnostics = await RunAnalyzerAsync( """ @@ -413,7 +413,7 @@ public static TodoItem AsTodoItem(this Todo t) } class C { - void Run(IRewritableQueryable source) { + void Run(IExpressiveQueryable source) { source.Select(t => t.AsTodoItem()); } } @@ -425,7 +425,7 @@ void Run(IRewritableQueryable source) { } [TestMethod] - public async Task RewritableQueryable_WithBclMethod_NoWarning() + public async Task ExpressiveQueryable_WithBclMethod_NoWarning() { var diagnostics = await RunAnalyzerAsync( """ @@ -437,7 +437,7 @@ class Todo { } class C { - void Run(IRewritableQueryable source) { + void Run(IExpressiveQueryable source) { source.Select(t => t.Name.ToUpper()); } } @@ -445,11 +445,11 @@ void Run(IRewritableQueryable source) { """); Assert.IsFalse(diagnostics.Any(d => d.Id == "EXP0013"), - "Should not warn for BCL method call in IRewritableQueryable LINQ lambda"); + "Should not warn for BCL method call in IExpressiveQueryable LINQ lambda"); } [TestMethod] - public async Task RewritableQueryable_WithAutoProperty_NoWarning() + public async Task ExpressiveQueryable_WithAutoProperty_NoWarning() { var diagnostics = await RunAnalyzerAsync( """ @@ -461,7 +461,7 @@ class Todo { } class C { - void Run(IRewritableQueryable source) { + void Run(IExpressiveQueryable source) { source.Select(t => t.Name); } } @@ -469,11 +469,11 @@ void Run(IRewritableQueryable source) { """); Assert.IsFalse(diagnostics.Any(d => d.Id == "EXP0013"), - "Should not warn for auto-property access in IRewritableQueryable LINQ lambda"); + "Should not warn for auto-property access in IExpressiveQueryable LINQ lambda"); } [TestMethod] - public async Task RewritableQueryable_WithEnumExtensionMethod_NoWarning() + public async Task ExpressiveQueryable_WithEnumExtensionMethod_NoWarning() { var diagnostics = await RunAnalyzerAsync( """ @@ -495,7 +495,7 @@ class Todo { } class C { - void Run(IRewritableQueryable source) { + void Run(IExpressiveQueryable source) { source.Select(t => t.Priority.Label()); } } @@ -503,7 +503,7 @@ void Run(IRewritableQueryable source) { """); Assert.IsFalse(diagnostics.Any(d => d.Id == "EXP0013"), - "Should not warn for enum extension method in IRewritableQueryable LINQ lambda"); + "Should not warn for enum extension method in IExpressiveQueryable LINQ lambda"); } // ── Helper ────────────────────────────────────────────────────────────── diff --git a/tests/ExpressiveSharp.Generator.Tests/Infrastructure/GeneratorTestBase.cs b/tests/ExpressiveSharp.Generator.Tests/Infrastructure/GeneratorTestBase.cs index 0eb751b..569b661 100644 --- a/tests/ExpressiveSharp.Generator.Tests/Infrastructure/GeneratorTestBase.cs +++ b/tests/ExpressiveSharp.Generator.Tests/Infrastructure/GeneratorTestBase.cs @@ -59,7 +59,7 @@ protected IReadOnlyList GetDefaultReferences() .References.All.ToList(); references.Add(MetadataReference.CreateFromFile(typeof(ExpressiveAttribute).Assembly.Location)); - references.Add(MetadataReference.CreateFromFile(typeof(IRewritableQueryable<>).Assembly.Location)); + references.Add(MetadataReference.CreateFromFile(typeof(IExpressiveQueryable<>).Assembly.Location)); return references; } diff --git a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/AggregateByTests.AggregateBy_GeneratesInterceptor.verified.txt b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/AggregateByTests.AggregateBy_GeneratesInterceptor.verified.txt index f58932f..8098492 100644 --- a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/AggregateByTests.AggregateBy_GeneratesInterceptor.verified.txt +++ b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/AggregateByTests.AggregateBy_GeneratesInterceptor.verified.txt @@ -6,8 +6,8 @@ namespace ExpressiveSharp.Generated.Interceptors internal static class PolyfillInterceptors { [global::System.Runtime.CompilerServices.InterceptsLocationAttribute(/* scrubbed */)] - internal static global::ExpressiveSharp.IRewritableQueryable> __Polyfill_AggregateBy_0( - this global::ExpressiveSharp.IRewritableQueryable source, + internal static global::ExpressiveSharp.IExpressiveQueryable> __Polyfill_AggregateBy_0( + this global::ExpressiveSharp.IExpressiveQueryable source, global::System.Func __func1, decimal seed, global::System.Func __func2) diff --git a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/AggregateByTests.AggregateBy_WithSeedSelector_GeneratesInterceptor.verified.txt b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/AggregateByTests.AggregateBy_WithSeedSelector_GeneratesInterceptor.verified.txt index 695ac3c..e72d4af 100644 --- a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/AggregateByTests.AggregateBy_WithSeedSelector_GeneratesInterceptor.verified.txt +++ b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/AggregateByTests.AggregateBy_WithSeedSelector_GeneratesInterceptor.verified.txt @@ -6,8 +6,8 @@ namespace ExpressiveSharp.Generated.Interceptors internal static class PolyfillInterceptors { [global::System.Runtime.CompilerServices.InterceptsLocationAttribute(/* scrubbed */)] - internal static global::ExpressiveSharp.IRewritableQueryable> __Polyfill_AggregateBy_0( - this global::ExpressiveSharp.IRewritableQueryable source, + internal static global::ExpressiveSharp.IExpressiveQueryable> __Polyfill_AggregateBy_0( + this global::ExpressiveSharp.IExpressiveQueryable source, global::System.Func __func1, global::System.Func __func2, global::System.Func __func3) diff --git a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/AnonymousElementTests.Count_AfterAnonymousSelect_GeneratesScalarInterceptor.verified.txt b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/AnonymousElementTests.Count_AfterAnonymousSelect_GeneratesScalarInterceptor.verified.txt index 88924d2..321defe 100644 --- a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/AnonymousElementTests.Count_AfterAnonymousSelect_GeneratesScalarInterceptor.verified.txt +++ b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/AnonymousElementTests.Count_AfterAnonymousSelect_GeneratesScalarInterceptor.verified.txt @@ -7,7 +7,7 @@ namespace ExpressiveSharp.Generated.Interceptors { [global::System.Runtime.CompilerServices.InterceptsLocationAttribute(/* scrubbed */)] internal static int __Polyfill_Count_0( - this global::ExpressiveSharp.IRewritableQueryable source, + this global::ExpressiveSharp.IExpressiveQueryable source, global::System.Func __func) { // Source: x => x.Total > 0m @@ -21,8 +21,8 @@ namespace ExpressiveSharp.Generated.Interceptors __lambda); } [global::System.Runtime.CompilerServices.InterceptsLocationAttribute(/* scrubbed */)] - internal static global::ExpressiveSharp.IRewritableQueryable __Polyfill_Select_1( - this global::ExpressiveSharp.IRewritableQueryable source, + internal static global::ExpressiveSharp.IExpressiveQueryable __Polyfill_Select_1( + this global::ExpressiveSharp.IExpressiveQueryable source, global::System.Func __func) { // Source: o => new { o.Id, o.Total } @@ -32,7 +32,7 @@ namespace ExpressiveSharp.Generated.Interceptors var i1_expr_3 = typeof(T1).GetConstructors()[0]; var i1_expr_0 = global::System.Linq.Expressions.Expression.New(i1_expr_3, new global::System.Linq.Expressions.Expression[] { i1_expr_1, i1_expr_2 }, new global::System.Reflection.MemberInfo[] { typeof(T1).GetProperty("Id"), typeof(T1).GetProperty("Total") }); var __lambda = global::System.Linq.Expressions.Expression.Lambda>(i1_expr_0, i1_p_o); - return (global::ExpressiveSharp.IRewritableQueryable)(object) + return (global::ExpressiveSharp.IExpressiveQueryable)(object) global::ExpressiveSharp.Extensions.ExpressiveQueryableExtensions.AsExpressive( global::System.Linq.Queryable.Select( (global::System.Linq.IQueryable)(object)source, diff --git a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/AnonymousElementTests.DistinctBy_AfterAnonymousSelect_GeneratesInterceptor.verified.txt b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/AnonymousElementTests.DistinctBy_AfterAnonymousSelect_GeneratesInterceptor.verified.txt index f46ef88..ccb50fa 100644 --- a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/AnonymousElementTests.DistinctBy_AfterAnonymousSelect_GeneratesInterceptor.verified.txt +++ b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/AnonymousElementTests.DistinctBy_AfterAnonymousSelect_GeneratesInterceptor.verified.txt @@ -6,23 +6,23 @@ namespace ExpressiveSharp.Generated.Interceptors internal static class PolyfillInterceptors { [global::System.Runtime.CompilerServices.InterceptsLocationAttribute(/* scrubbed */)] - internal static global::ExpressiveSharp.IRewritableQueryable __Polyfill_DistinctBy_0( - this global::ExpressiveSharp.IRewritableQueryable source, + internal static global::ExpressiveSharp.IExpressiveQueryable __Polyfill_DistinctBy_0( + this global::ExpressiveSharp.IExpressiveQueryable source, global::System.Func __func) { // Source: x => x.Category var i0_p_x = global::System.Linq.Expressions.Expression.Parameter(typeof(T0), "x"); var i0_expr_0 = global::System.Linq.Expressions.Expression.Property(i0_p_x, typeof(T0).GetProperty("Category")); // x.Category var __lambda = global::System.Linq.Expressions.Expression.Lambda>(i0_expr_0, i0_p_x); - return (global::ExpressiveSharp.IRewritableQueryable)(object) + return (global::ExpressiveSharp.IExpressiveQueryable)(object) global::ExpressiveSharp.Extensions.ExpressiveQueryableExtensions.AsExpressive( global::System.Linq.Queryable.DistinctBy( (global::System.Linq.IQueryable)(object)source, __lambda)); } [global::System.Runtime.CompilerServices.InterceptsLocationAttribute(/* scrubbed */)] - internal static global::ExpressiveSharp.IRewritableQueryable __Polyfill_Select_1( - this global::ExpressiveSharp.IRewritableQueryable source, + internal static global::ExpressiveSharp.IExpressiveQueryable __Polyfill_Select_1( + this global::ExpressiveSharp.IExpressiveQueryable source, global::System.Func __func) { // Source: o => new { o.Id, o.Category } @@ -32,7 +32,7 @@ namespace ExpressiveSharp.Generated.Interceptors var i1_expr_3 = typeof(T1).GetConstructors()[0]; var i1_expr_0 = global::System.Linq.Expressions.Expression.New(i1_expr_3, new global::System.Linq.Expressions.Expression[] { i1_expr_1, i1_expr_2 }, new global::System.Reflection.MemberInfo[] { typeof(T1).GetProperty("Id"), typeof(T1).GetProperty("Category") }); var __lambda = global::System.Linq.Expressions.Expression.Lambda>(i1_expr_0, i1_p_o); - return (global::ExpressiveSharp.IRewritableQueryable)(object) + return (global::ExpressiveSharp.IExpressiveQueryable)(object) global::ExpressiveSharp.Extensions.ExpressiveQueryableExtensions.AsExpressive( global::System.Linq.Queryable.Select( (global::System.Linq.IQueryable)(object)source, diff --git a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/AnonymousElementTests.GroupBy_AfterAnonymousSelect_GeneratesInterceptor.verified.txt b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/AnonymousElementTests.GroupBy_AfterAnonymousSelect_GeneratesInterceptor.verified.txt index 0a71ac7..0a0c5ea 100644 --- a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/AnonymousElementTests.GroupBy_AfterAnonymousSelect_GeneratesInterceptor.verified.txt +++ b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/AnonymousElementTests.GroupBy_AfterAnonymousSelect_GeneratesInterceptor.verified.txt @@ -6,23 +6,23 @@ namespace ExpressiveSharp.Generated.Interceptors internal static class PolyfillInterceptors { [global::System.Runtime.CompilerServices.InterceptsLocationAttribute(/* scrubbed */)] - internal static global::ExpressiveSharp.IRewritableQueryable>> __Polyfill_GroupBy_0( - this global::ExpressiveSharp.IRewritableQueryable source, + internal static global::ExpressiveSharp.IExpressiveQueryable>> __Polyfill_GroupBy_0( + this global::ExpressiveSharp.IExpressiveQueryable source, global::System.Func __func) { // Source: x => x.Category var i0_p_x = global::System.Linq.Expressions.Expression.Parameter(typeof(T0), "x"); var i0_expr_0 = global::System.Linq.Expressions.Expression.Property(i0_p_x, typeof(T0).GetProperty("Category")); // x.Category var __lambda = global::System.Linq.Expressions.Expression.Lambda>(i0_expr_0, i0_p_x); - return (global::ExpressiveSharp.IRewritableQueryable>>)(object) + return (global::ExpressiveSharp.IExpressiveQueryable>>)(object) global::ExpressiveSharp.Extensions.ExpressiveQueryableExtensions.AsExpressive( global::System.Linq.Queryable.GroupBy( (global::System.Linq.IQueryable)(object)source, __lambda)); } [global::System.Runtime.CompilerServices.InterceptsLocationAttribute(/* scrubbed */)] - internal static global::ExpressiveSharp.IRewritableQueryable __Polyfill_Select_1( - this global::ExpressiveSharp.IRewritableQueryable source, + internal static global::ExpressiveSharp.IExpressiveQueryable __Polyfill_Select_1( + this global::ExpressiveSharp.IExpressiveQueryable source, global::System.Func __func) { // Source: o => new { o.Id, o.Category } @@ -32,7 +32,7 @@ namespace ExpressiveSharp.Generated.Interceptors var i1_expr_3 = typeof(T1).GetConstructors()[0]; var i1_expr_0 = global::System.Linq.Expressions.Expression.New(i1_expr_3, new global::System.Linq.Expressions.Expression[] { i1_expr_1, i1_expr_2 }, new global::System.Reflection.MemberInfo[] { typeof(T1).GetProperty("Id"), typeof(T1).GetProperty("Category") }); var __lambda = global::System.Linq.Expressions.Expression.Lambda>(i1_expr_0, i1_p_o); - return (global::ExpressiveSharp.IRewritableQueryable)(object) + return (global::ExpressiveSharp.IExpressiveQueryable)(object) global::ExpressiveSharp.Extensions.ExpressiveQueryableExtensions.AsExpressive( global::System.Linq.Queryable.Select( (global::System.Linq.IQueryable)(object)source, diff --git a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/AnonymousElementTests.OrderByDescending_AfterAnonymousSelect_GeneratesInterceptor.verified.txt b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/AnonymousElementTests.OrderByDescending_AfterAnonymousSelect_GeneratesInterceptor.verified.txt index 2489068..9af3044 100644 --- a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/AnonymousElementTests.OrderByDescending_AfterAnonymousSelect_GeneratesInterceptor.verified.txt +++ b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/AnonymousElementTests.OrderByDescending_AfterAnonymousSelect_GeneratesInterceptor.verified.txt @@ -6,23 +6,23 @@ namespace ExpressiveSharp.Generated.Interceptors internal static class PolyfillInterceptors { [global::System.Runtime.CompilerServices.InterceptsLocationAttribute(/* scrubbed */)] - internal static global::ExpressiveSharp.IRewritableQueryable __Polyfill_OrderByDescending_0( - this global::ExpressiveSharp.IRewritableQueryable source, + internal static global::ExpressiveSharp.IExpressiveQueryable __Polyfill_OrderByDescending_0( + this global::ExpressiveSharp.IExpressiveQueryable source, global::System.Func __func) { // Source: x => x.Name var i0_p_x = global::System.Linq.Expressions.Expression.Parameter(typeof(T0), "x"); var i0_expr_0 = global::System.Linq.Expressions.Expression.Property(i0_p_x, typeof(T0).GetProperty("Name")); // x.Name var __lambda = global::System.Linq.Expressions.Expression.Lambda>(i0_expr_0, i0_p_x); - return (global::ExpressiveSharp.IRewritableQueryable)(object) + return (global::ExpressiveSharp.IExpressiveQueryable)(object) global::ExpressiveSharp.Extensions.ExpressiveQueryableExtensions.AsExpressive( global::System.Linq.Queryable.OrderByDescending( (global::System.Linq.IQueryable)(object)source, __lambda)); } [global::System.Runtime.CompilerServices.InterceptsLocationAttribute(/* scrubbed */)] - internal static global::ExpressiveSharp.IRewritableQueryable __Polyfill_Select_1( - this global::ExpressiveSharp.IRewritableQueryable source, + internal static global::ExpressiveSharp.IExpressiveQueryable __Polyfill_Select_1( + this global::ExpressiveSharp.IExpressiveQueryable source, global::System.Func __func) { // Source: o => new { o.Id, o.Name } @@ -32,7 +32,7 @@ namespace ExpressiveSharp.Generated.Interceptors var i1_expr_3 = typeof(T1).GetConstructors()[0]; var i1_expr_0 = global::System.Linq.Expressions.Expression.New(i1_expr_3, new global::System.Linq.Expressions.Expression[] { i1_expr_1, i1_expr_2 }, new global::System.Reflection.MemberInfo[] { typeof(T1).GetProperty("Id"), typeof(T1).GetProperty("Name") }); var __lambda = global::System.Linq.Expressions.Expression.Lambda>(i1_expr_0, i1_p_o); - return (global::ExpressiveSharp.IRewritableQueryable)(object) + return (global::ExpressiveSharp.IExpressiveQueryable)(object) global::ExpressiveSharp.Extensions.ExpressiveQueryableExtensions.AsExpressive( global::System.Linq.Queryable.Select( (global::System.Linq.IQueryable)(object)source, diff --git a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/AnonymousElementTests.Select_AfterAnonymousSelect_GeneratesInterceptor.verified.txt b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/AnonymousElementTests.Select_AfterAnonymousSelect_GeneratesInterceptor.verified.txt index 0c28078..8e43f6c 100644 --- a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/AnonymousElementTests.Select_AfterAnonymousSelect_GeneratesInterceptor.verified.txt +++ b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/AnonymousElementTests.Select_AfterAnonymousSelect_GeneratesInterceptor.verified.txt @@ -6,23 +6,23 @@ namespace ExpressiveSharp.Generated.Interceptors internal static class PolyfillInterceptors { [global::System.Runtime.CompilerServices.InterceptsLocationAttribute(/* scrubbed */)] - internal static global::ExpressiveSharp.IRewritableQueryable __Polyfill_Select_0( - this global::ExpressiveSharp.IRewritableQueryable source, + internal static global::ExpressiveSharp.IExpressiveQueryable __Polyfill_Select_0( + this global::ExpressiveSharp.IExpressiveQueryable source, global::System.Func __func) { // Source: x => x.Id var i0_p_x = global::System.Linq.Expressions.Expression.Parameter(typeof(T0), "x"); var i0_expr_0 = global::System.Linq.Expressions.Expression.Property(i0_p_x, typeof(T0).GetProperty("Id")); // x.Id var __lambda = global::System.Linq.Expressions.Expression.Lambda>(i0_expr_0, i0_p_x); - return (global::ExpressiveSharp.IRewritableQueryable)(object) + return (global::ExpressiveSharp.IExpressiveQueryable)(object) global::ExpressiveSharp.Extensions.ExpressiveQueryableExtensions.AsExpressive( global::System.Linq.Queryable.Select( (global::System.Linq.IQueryable)(object)source, __lambda)); } [global::System.Runtime.CompilerServices.InterceptsLocationAttribute(/* scrubbed */)] - internal static global::ExpressiveSharp.IRewritableQueryable __Polyfill_Select_1( - this global::ExpressiveSharp.IRewritableQueryable source, + internal static global::ExpressiveSharp.IExpressiveQueryable __Polyfill_Select_1( + this global::ExpressiveSharp.IExpressiveQueryable source, global::System.Func __func) { // Source: o => new { o.Id, o.Name } @@ -32,7 +32,7 @@ namespace ExpressiveSharp.Generated.Interceptors var i1_expr_3 = typeof(T1).GetConstructors()[0]; var i1_expr_0 = global::System.Linq.Expressions.Expression.New(i1_expr_3, new global::System.Linq.Expressions.Expression[] { i1_expr_1, i1_expr_2 }, new global::System.Reflection.MemberInfo[] { typeof(T1).GetProperty("Id"), typeof(T1).GetProperty("Name") }); var __lambda = global::System.Linq.Expressions.Expression.Lambda>(i1_expr_0, i1_p_o); - return (global::ExpressiveSharp.IRewritableQueryable)(object) + return (global::ExpressiveSharp.IExpressiveQueryable)(object) global::ExpressiveSharp.Extensions.ExpressiveQueryableExtensions.AsExpressive( global::System.Linq.Queryable.Select( (global::System.Linq.IQueryable)(object)source, diff --git a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/AnonymousElementTests.Where_AfterAnonymousSelect_GeneratesInterceptor.verified.txt b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/AnonymousElementTests.Where_AfterAnonymousSelect_GeneratesInterceptor.verified.txt index de5727c..57abbed 100644 --- a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/AnonymousElementTests.Where_AfterAnonymousSelect_GeneratesInterceptor.verified.txt +++ b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/AnonymousElementTests.Where_AfterAnonymousSelect_GeneratesInterceptor.verified.txt @@ -6,8 +6,8 @@ namespace ExpressiveSharp.Generated.Interceptors internal static class PolyfillInterceptors { [global::System.Runtime.CompilerServices.InterceptsLocationAttribute(/* scrubbed */)] - internal static global::ExpressiveSharp.IRewritableQueryable __Polyfill_Where_0( - this global::ExpressiveSharp.IRewritableQueryable source, + internal static global::ExpressiveSharp.IExpressiveQueryable __Polyfill_Where_0( + this global::ExpressiveSharp.IExpressiveQueryable source, global::System.Func __func) { // Source: x => x.Total > 100m @@ -16,15 +16,15 @@ namespace ExpressiveSharp.Generated.Interceptors var i0_expr_2 = global::System.Linq.Expressions.Expression.Constant(100m, typeof(decimal)); // 100m var i0_expr_0 = global::System.Linq.Expressions.Expression.MakeBinary(global::System.Linq.Expressions.ExpressionType.GreaterThan, i0_expr_1, i0_expr_2); var __lambda = global::System.Linq.Expressions.Expression.Lambda>(i0_expr_0, i0_p_x); - return (global::ExpressiveSharp.IRewritableQueryable)(object) + return (global::ExpressiveSharp.IExpressiveQueryable)(object) global::ExpressiveSharp.Extensions.ExpressiveQueryableExtensions.AsExpressive( global::System.Linq.Queryable.Where( (global::System.Linq.IQueryable)(object)source, __lambda)); } [global::System.Runtime.CompilerServices.InterceptsLocationAttribute(/* scrubbed */)] - internal static global::ExpressiveSharp.IRewritableQueryable __Polyfill_Select_1( - this global::ExpressiveSharp.IRewritableQueryable source, + internal static global::ExpressiveSharp.IExpressiveQueryable __Polyfill_Select_1( + this global::ExpressiveSharp.IExpressiveQueryable source, global::System.Func __func) { // Source: o => new { o.Id, o.Total } @@ -34,7 +34,7 @@ namespace ExpressiveSharp.Generated.Interceptors var i1_expr_3 = typeof(T1).GetConstructors()[0]; var i1_expr_0 = global::System.Linq.Expressions.Expression.New(i1_expr_3, new global::System.Linq.Expressions.Expression[] { i1_expr_1, i1_expr_2 }, new global::System.Reflection.MemberInfo[] { typeof(T1).GetProperty("Id"), typeof(T1).GetProperty("Total") }); var __lambda = global::System.Linq.Expressions.Expression.Lambda>(i1_expr_0, i1_p_o); - return (global::ExpressiveSharp.IRewritableQueryable)(object) + return (global::ExpressiveSharp.IExpressiveQueryable)(object) global::ExpressiveSharp.Extensions.ExpressiveQueryableExtensions.AsExpressive( global::System.Linq.Queryable.Select( (global::System.Linq.IQueryable)(object)source, diff --git a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/AnonymousElementTests.cs b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/AnonymousElementTests.cs index 2b41c9c..c5c04b5 100644 --- a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/AnonymousElementTests.cs +++ b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/AnonymousElementTests.cs @@ -5,7 +5,7 @@ namespace ExpressiveSharp.Generator.Tests.PolyfillInterceptorGenerator; /// -/// Tests for interceptor generation when the element type T of IRewritableQueryable<T> +/// Tests for interceptor generation when the element type T of IExpressiveQueryable<T> /// is an anonymous type (i.e., after Select into an anonymous type). /// Covers the fix for GitHub issue #9. /// diff --git a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ComparerOverloadTests.DistinctBy_WithComparer_GeneratesInterceptor.verified.txt b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ComparerOverloadTests.DistinctBy_WithComparer_GeneratesInterceptor.verified.txt index 918269b..55b4923 100644 --- a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ComparerOverloadTests.DistinctBy_WithComparer_GeneratesInterceptor.verified.txt +++ b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ComparerOverloadTests.DistinctBy_WithComparer_GeneratesInterceptor.verified.txt @@ -6,8 +6,8 @@ namespace ExpressiveSharp.Generated.Interceptors internal static class PolyfillInterceptors { [global::System.Runtime.CompilerServices.InterceptsLocationAttribute(/* scrubbed */)] - internal static global::ExpressiveSharp.IRewritableQueryable __Polyfill_DistinctBy_0( - this global::ExpressiveSharp.IRewritableQueryable source, + internal static global::ExpressiveSharp.IExpressiveQueryable __Polyfill_DistinctBy_0( + this global::ExpressiveSharp.IExpressiveQueryable source, global::System.Func __func, global::System.Collections.Generic.IEqualityComparer comparer) { diff --git a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ComparerOverloadTests.GroupBy_WithComparer_GeneratesInterceptor.verified.txt b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ComparerOverloadTests.GroupBy_WithComparer_GeneratesInterceptor.verified.txt index 5b30cc0..5d6c1a1 100644 --- a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ComparerOverloadTests.GroupBy_WithComparer_GeneratesInterceptor.verified.txt +++ b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ComparerOverloadTests.GroupBy_WithComparer_GeneratesInterceptor.verified.txt @@ -6,8 +6,8 @@ namespace ExpressiveSharp.Generated.Interceptors internal static class PolyfillInterceptors { [global::System.Runtime.CompilerServices.InterceptsLocationAttribute(/* scrubbed */)] - internal static global::ExpressiveSharp.IRewritableQueryable> __Polyfill_GroupBy_0( - this global::ExpressiveSharp.IRewritableQueryable source, + internal static global::ExpressiveSharp.IExpressiveQueryable> __Polyfill_GroupBy_0( + this global::ExpressiveSharp.IExpressiveQueryable source, global::System.Func __func, global::System.Collections.Generic.IEqualityComparer comparer) { diff --git a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ComparerOverloadTests.OrderBy_WithComparer_GeneratesInterceptor.verified.txt b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ComparerOverloadTests.OrderBy_WithComparer_GeneratesInterceptor.verified.txt index fa72b30..470a49e 100644 --- a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ComparerOverloadTests.OrderBy_WithComparer_GeneratesInterceptor.verified.txt +++ b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ComparerOverloadTests.OrderBy_WithComparer_GeneratesInterceptor.verified.txt @@ -6,8 +6,8 @@ namespace ExpressiveSharp.Generated.Interceptors internal static class PolyfillInterceptors { [global::System.Runtime.CompilerServices.InterceptsLocationAttribute(/* scrubbed */)] - internal static global::ExpressiveSharp.IRewritableQueryable __Polyfill_OrderBy_0( - this global::ExpressiveSharp.IRewritableQueryable source, + internal static global::ExpressiveSharp.IExpressiveQueryable __Polyfill_OrderBy_0( + this global::ExpressiveSharp.IExpressiveQueryable source, global::System.Func __func, global::System.Collections.Generic.IComparer comparer) { diff --git a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ExecuteUpdateTests.ExecuteUpdateAsync_GeneratesInterceptor.verified.txt b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ExecuteUpdateTests.ExecuteUpdateAsync_GeneratesInterceptor.verified.txt index f5fcbc1..843bc37 100644 --- a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ExecuteUpdateTests.ExecuteUpdateAsync_GeneratesInterceptor.verified.txt +++ b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ExecuteUpdateTests.ExecuteUpdateAsync_GeneratesInterceptor.verified.txt @@ -7,7 +7,7 @@ namespace ExpressiveSharp.Generated.Interceptors { [global::System.Runtime.CompilerServices.InterceptsLocationAttribute(/* scrubbed */)] internal static global::System.Threading.Tasks.Task __Polyfill_ExecuteUpdateAsync_0( - this global::ExpressiveSharp.IRewritableQueryable source, + this global::ExpressiveSharp.IExpressiveQueryable source, global::System.Func, global::TestNs.SetPropertyCalls> __func, global::System.Threading.CancellationToken cancellationToken) { diff --git a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ExecuteUpdateTests.ExecuteUpdate_SetProperty_ConstantValue.verified.txt b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ExecuteUpdateTests.ExecuteUpdate_SetProperty_ConstantValue.verified.txt index 7f2610d..698d289 100644 --- a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ExecuteUpdateTests.ExecuteUpdate_SetProperty_ConstantValue.verified.txt +++ b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ExecuteUpdateTests.ExecuteUpdate_SetProperty_ConstantValue.verified.txt @@ -7,7 +7,7 @@ namespace ExpressiveSharp.Generated.Interceptors { [global::System.Runtime.CompilerServices.InterceptsLocationAttribute(/* scrubbed */)] internal static int __Polyfill_ExecuteUpdate_0( - this global::ExpressiveSharp.IRewritableQueryable source, + this global::ExpressiveSharp.IExpressiveQueryable source, global::System.Func, global::TestNs.SetPropertyCalls> __func) { // Source: s => s.SetProperty(o => o.Tag, "updated") diff --git a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ExecuteUpdateTests.ExecuteUpdate_SetProperty_WithNullConditional.verified.txt b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ExecuteUpdateTests.ExecuteUpdate_SetProperty_WithNullConditional.verified.txt index cec3b5f..a51e26f 100644 --- a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ExecuteUpdateTests.ExecuteUpdate_SetProperty_WithNullConditional.verified.txt +++ b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ExecuteUpdateTests.ExecuteUpdate_SetProperty_WithNullConditional.verified.txt @@ -7,7 +7,7 @@ namespace ExpressiveSharp.Generated.Interceptors { [global::System.Runtime.CompilerServices.InterceptsLocationAttribute(/* scrubbed */)] internal static int __Polyfill_ExecuteUpdate_0( - this global::ExpressiveSharp.IRewritableQueryable source, + this global::ExpressiveSharp.IExpressiveQueryable source, global::System.Func, global::TestNs.SetPropertyCalls> __func) { // Source: s => s.SetProperty(o => o.Tag, o => o.Customer?.Name ?? "none") diff --git a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ExecuteUpdateTests.ExecuteUpdate_SetProperty_WithSwitchExpression.verified.txt b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ExecuteUpdateTests.ExecuteUpdate_SetProperty_WithSwitchExpression.verified.txt index b2efd23..137849a 100644 --- a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ExecuteUpdateTests.ExecuteUpdate_SetProperty_WithSwitchExpression.verified.txt +++ b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ExecuteUpdateTests.ExecuteUpdate_SetProperty_WithSwitchExpression.verified.txt @@ -7,7 +7,7 @@ namespace ExpressiveSharp.Generated.Interceptors { [global::System.Runtime.CompilerServices.InterceptsLocationAttribute(/* scrubbed */)] internal static int __Polyfill_ExecuteUpdate_0( - this global::ExpressiveSharp.IRewritableQueryable source, + this global::ExpressiveSharp.IExpressiveQueryable source, global::System.Func, global::TestNs.SetPropertyCalls> __func) { // Source: s => s.SetProperty(o => o.Tag, o => o.Amount switch { > 100 => "high", > 50 => "medium", _ => "low" }) diff --git a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ExecuteUpdateTests.cs b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ExecuteUpdateTests.cs index d0588b7..040c153 100644 --- a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ExecuteUpdateTests.cs +++ b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ExecuteUpdateTests.cs @@ -50,18 +50,18 @@ public static Task ExecuteUpdateAsync( => Task.FromResult(0); } - // IRewritableQueryable stubs (matching the real pattern) + // IExpressiveQueryable stubs (matching the real pattern) static class Stubs { [PolyfillTarget(typeof(MockRelationalExtensions))] public static int ExecuteUpdate( - this IRewritableQueryable source, + this IExpressiveQueryable source, Func, SetPropertyCalls> setPropertyCalls) => throw new System.Diagnostics.UnreachableException(); [PolyfillTarget(typeof(MockRelationalExtensions))] public static Task ExecuteUpdateAsync( - this IRewritableQueryable source, + this IExpressiveQueryable source, Func, SetPropertyCalls> setPropertyCalls, CancellationToken cancellationToken = default) => throw new System.Diagnostics.UnreachableException(); diff --git a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/GlobalOptionsTests.Where_GlobalNullConditionalRewrite_AppliesWithoutPerCallOverride.verified.txt b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/GlobalOptionsTests.Where_GlobalNullConditionalRewrite_AppliesWithoutPerCallOverride.verified.txt index c39ec5d..47ce57f 100644 --- a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/GlobalOptionsTests.Where_GlobalNullConditionalRewrite_AppliesWithoutPerCallOverride.verified.txt +++ b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/GlobalOptionsTests.Where_GlobalNullConditionalRewrite_AppliesWithoutPerCallOverride.verified.txt @@ -6,8 +6,8 @@ namespace ExpressiveSharp.Generated.Interceptors internal static class PolyfillInterceptors { [global::System.Runtime.CompilerServices.InterceptsLocationAttribute(/* scrubbed */)] - internal static global::ExpressiveSharp.IRewritableQueryable __Polyfill_Where_0( - this global::ExpressiveSharp.IRewritableQueryable source, + internal static global::ExpressiveSharp.IExpressiveQueryable __Polyfill_Where_0( + this global::ExpressiveSharp.IExpressiveQueryable source, global::System.Func __func) { // Source: o => o.Customer?.Name == "Alice" diff --git a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/GlobalOptionsTests.Where_PerCallOverridesGlobal.verified.txt b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/GlobalOptionsTests.Where_PerCallOverridesGlobal.verified.txt index c39ec5d..47ce57f 100644 --- a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/GlobalOptionsTests.Where_PerCallOverridesGlobal.verified.txt +++ b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/GlobalOptionsTests.Where_PerCallOverridesGlobal.verified.txt @@ -6,8 +6,8 @@ namespace ExpressiveSharp.Generated.Interceptors internal static class PolyfillInterceptors { [global::System.Runtime.CompilerServices.InterceptsLocationAttribute(/* scrubbed */)] - internal static global::ExpressiveSharp.IRewritableQueryable __Polyfill_Where_0( - this global::ExpressiveSharp.IRewritableQueryable source, + internal static global::ExpressiveSharp.IExpressiveQueryable __Polyfill_Where_0( + this global::ExpressiveSharp.IExpressiveQueryable source, global::System.Func __func) { // Source: o => o.Customer?.Name == "Alice" diff --git a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/GroupByTests.GroupBy_GeneratesGroupingReturnType.verified.txt b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/GroupByTests.GroupBy_GeneratesGroupingReturnType.verified.txt index 564ca9f..c742e7a 100644 --- a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/GroupByTests.GroupBy_GeneratesGroupingReturnType.verified.txt +++ b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/GroupByTests.GroupBy_GeneratesGroupingReturnType.verified.txt @@ -6,8 +6,8 @@ namespace ExpressiveSharp.Generated.Interceptors internal static class PolyfillInterceptors { [global::System.Runtime.CompilerServices.InterceptsLocationAttribute(/* scrubbed */)] - internal static global::ExpressiveSharp.IRewritableQueryable> __Polyfill_GroupBy_0( - this global::ExpressiveSharp.IRewritableQueryable source, + internal static global::ExpressiveSharp.IExpressiveQueryable> __Polyfill_GroupBy_0( + this global::ExpressiveSharp.IExpressiveQueryable source, global::System.Func __func) { // Source: o => o.Tag diff --git a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/GroupByTests.GroupBy_WithElementAndResultSelector_GeneratesInterceptor.verified.txt b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/GroupByTests.GroupBy_WithElementAndResultSelector_GeneratesInterceptor.verified.txt index 9cb52fe..3e578f7 100644 --- a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/GroupByTests.GroupBy_WithElementAndResultSelector_GeneratesInterceptor.verified.txt +++ b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/GroupByTests.GroupBy_WithElementAndResultSelector_GeneratesInterceptor.verified.txt @@ -6,8 +6,8 @@ namespace ExpressiveSharp.Generated.Interceptors internal static class PolyfillInterceptors { [global::System.Runtime.CompilerServices.InterceptsLocationAttribute(/* scrubbed */)] - internal static global::ExpressiveSharp.IRewritableQueryable __Polyfill_GroupBy_0( - this global::ExpressiveSharp.IRewritableQueryable source, + internal static global::ExpressiveSharp.IExpressiveQueryable __Polyfill_GroupBy_0( + this global::ExpressiveSharp.IExpressiveQueryable source, global::System.Func __func1, global::System.Func __func2, global::System.Func, string> __func3) diff --git a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/GroupByTests.GroupBy_WithElementSelector_GeneratesInterceptor.verified.txt b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/GroupByTests.GroupBy_WithElementSelector_GeneratesInterceptor.verified.txt index 942c8a2..1005a98 100644 --- a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/GroupByTests.GroupBy_WithElementSelector_GeneratesInterceptor.verified.txt +++ b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/GroupByTests.GroupBy_WithElementSelector_GeneratesInterceptor.verified.txt @@ -6,8 +6,8 @@ namespace ExpressiveSharp.Generated.Interceptors internal static class PolyfillInterceptors { [global::System.Runtime.CompilerServices.InterceptsLocationAttribute(/* scrubbed */)] - internal static global::ExpressiveSharp.IRewritableQueryable> __Polyfill_GroupBy_0( - this global::ExpressiveSharp.IRewritableQueryable source, + internal static global::ExpressiveSharp.IExpressiveQueryable> __Polyfill_GroupBy_0( + this global::ExpressiveSharp.IExpressiveQueryable source, global::System.Func __func1, global::System.Func __func2) { diff --git a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/GroupByTests.GroupBy_WithResultSelector_GeneratesInterceptor.verified.txt b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/GroupByTests.GroupBy_WithResultSelector_GeneratesInterceptor.verified.txt index f5aa531..f34b30c 100644 --- a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/GroupByTests.GroupBy_WithResultSelector_GeneratesInterceptor.verified.txt +++ b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/GroupByTests.GroupBy_WithResultSelector_GeneratesInterceptor.verified.txt @@ -6,8 +6,8 @@ namespace ExpressiveSharp.Generated.Interceptors internal static class PolyfillInterceptors { [global::System.Runtime.CompilerServices.InterceptsLocationAttribute(/* scrubbed */)] - internal static global::ExpressiveSharp.IRewritableQueryable __Polyfill_GroupBy_0( - this global::ExpressiveSharp.IRewritableQueryable source, + internal static global::ExpressiveSharp.IExpressiveQueryable __Polyfill_GroupBy_0( + this global::ExpressiveSharp.IExpressiveQueryable source, global::System.Func __func1, global::System.Func, string> __func2) { diff --git a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/JoinTests.GroupJoin_AnonymousResultSelector_GeneratesGenericInterceptor.verified.txt b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/JoinTests.GroupJoin_AnonymousResultSelector_GeneratesGenericInterceptor.verified.txt index 2740cd6..7fae1d2 100644 --- a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/JoinTests.GroupJoin_AnonymousResultSelector_GeneratesGenericInterceptor.verified.txt +++ b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/JoinTests.GroupJoin_AnonymousResultSelector_GeneratesGenericInterceptor.verified.txt @@ -6,8 +6,8 @@ namespace ExpressiveSharp.Generated.Interceptors internal static class PolyfillInterceptors { [global::System.Runtime.CompilerServices.InterceptsLocationAttribute(/* scrubbed */)] - internal static global::ExpressiveSharp.IRewritableQueryable __Polyfill_GroupJoin_0( - this global::ExpressiveSharp.IRewritableQueryable source, + internal static global::ExpressiveSharp.IExpressiveQueryable __Polyfill_GroupJoin_0( + this global::ExpressiveSharp.IExpressiveQueryable source, global::System.Collections.Generic.IEnumerable inner, global::System.Func __func1, global::System.Func __func2, @@ -29,7 +29,7 @@ namespace ExpressiveSharp.Generated.Interceptors var i0c_expr_3 = typeof(T3).GetConstructors()[0]; var i0c_expr_0 = global::System.Linq.Expressions.Expression.New(i0c_expr_3, new global::System.Linq.Expressions.Expression[] { i0c_expr_1, i0c_expr_2 }, new global::System.Reflection.MemberInfo[] { typeof(T3).GetProperty("CustomerId"), typeof(T3).GetProperty("Count") }); var __lambda3 = global::System.Linq.Expressions.Expression.Lambda, T3>>(i0c_expr_0, i0c_p_o, i0c_p_cs); - return (global::ExpressiveSharp.IRewritableQueryable)(object) + return (global::ExpressiveSharp.IExpressiveQueryable)(object) global::ExpressiveSharp.Extensions.ExpressiveQueryableExtensions.AsExpressive( global::System.Linq.Queryable.GroupJoin( (global::System.Linq.IQueryable)(object)source, diff --git a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/JoinTests.GroupJoin_GeneratesInterceptor.verified.txt b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/JoinTests.GroupJoin_GeneratesInterceptor.verified.txt index 8956063..4b6087b 100644 --- a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/JoinTests.GroupJoin_GeneratesInterceptor.verified.txt +++ b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/JoinTests.GroupJoin_GeneratesInterceptor.verified.txt @@ -6,8 +6,8 @@ namespace ExpressiveSharp.Generated.Interceptors internal static class PolyfillInterceptors { [global::System.Runtime.CompilerServices.InterceptsLocationAttribute(/* scrubbed */)] - internal static global::ExpressiveSharp.IRewritableQueryable __Polyfill_GroupJoin_0( - this global::ExpressiveSharp.IRewritableQueryable source, + internal static global::ExpressiveSharp.IExpressiveQueryable __Polyfill_GroupJoin_0( + this global::ExpressiveSharp.IExpressiveQueryable source, global::System.Collections.Generic.IEnumerable inner, global::System.Func __func1, global::System.Func __func2, diff --git a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/JoinTests.Join_AnonymousResultSelector_GeneratesGenericInterceptor.verified.txt b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/JoinTests.Join_AnonymousResultSelector_GeneratesGenericInterceptor.verified.txt index 8ce9e15..9556d96 100644 --- a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/JoinTests.Join_AnonymousResultSelector_GeneratesGenericInterceptor.verified.txt +++ b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/JoinTests.Join_AnonymousResultSelector_GeneratesGenericInterceptor.verified.txt @@ -6,8 +6,8 @@ namespace ExpressiveSharp.Generated.Interceptors internal static class PolyfillInterceptors { [global::System.Runtime.CompilerServices.InterceptsLocationAttribute(/* scrubbed */)] - internal static global::ExpressiveSharp.IRewritableQueryable __Polyfill_Join_0( - this global::ExpressiveSharp.IRewritableQueryable source, + internal static global::ExpressiveSharp.IExpressiveQueryable __Polyfill_Join_0( + this global::ExpressiveSharp.IExpressiveQueryable source, global::System.Collections.Generic.IEnumerable inner, global::System.Func __func1, global::System.Func __func2, @@ -29,7 +29,7 @@ namespace ExpressiveSharp.Generated.Interceptors var i0c_expr_3 = typeof(T3).GetConstructors()[0]; var i0c_expr_0 = global::System.Linq.Expressions.Expression.New(i0c_expr_3, new global::System.Linq.Expressions.Expression[] { i0c_expr_1, i0c_expr_2 }, new global::System.Reflection.MemberInfo[] { typeof(T3).GetProperty("Product"), typeof(T3).GetProperty("CustomerName") }); var __lambda3 = global::System.Linq.Expressions.Expression.Lambda>(i0c_expr_0, i0c_p_o, i0c_p_c); - return (global::ExpressiveSharp.IRewritableQueryable)(object) + return (global::ExpressiveSharp.IExpressiveQueryable)(object) global::ExpressiveSharp.Extensions.ExpressiveQueryableExtensions.AsExpressive( global::System.Linq.Queryable.Join( (global::System.Linq.IQueryable)(object)source, diff --git a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/JoinTests.Join_GeneratesInterceptor.verified.txt b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/JoinTests.Join_GeneratesInterceptor.verified.txt index 38266a9..a6536f9 100644 --- a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/JoinTests.Join_GeneratesInterceptor.verified.txt +++ b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/JoinTests.Join_GeneratesInterceptor.verified.txt @@ -6,8 +6,8 @@ namespace ExpressiveSharp.Generated.Interceptors internal static class PolyfillInterceptors { [global::System.Runtime.CompilerServices.InterceptsLocationAttribute(/* scrubbed */)] - internal static global::ExpressiveSharp.IRewritableQueryable __Polyfill_Join_0( - this global::ExpressiveSharp.IRewritableQueryable source, + internal static global::ExpressiveSharp.IExpressiveQueryable __Polyfill_Join_0( + this global::ExpressiveSharp.IExpressiveQueryable source, global::System.Collections.Generic.IEnumerable inner, global::System.Func __func1, global::System.Func __func2, diff --git a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/NullConditionalTests.NullConditionalRewrite_ExpandsInWhereBody.verified.txt b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/NullConditionalTests.NullConditionalRewrite_ExpandsInWhereBody.verified.txt index c39ec5d..47ce57f 100644 --- a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/NullConditionalTests.NullConditionalRewrite_ExpandsInWhereBody.verified.txt +++ b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/NullConditionalTests.NullConditionalRewrite_ExpandsInWhereBody.verified.txt @@ -6,8 +6,8 @@ namespace ExpressiveSharp.Generated.Interceptors internal static class PolyfillInterceptors { [global::System.Runtime.CompilerServices.InterceptsLocationAttribute(/* scrubbed */)] - internal static global::ExpressiveSharp.IRewritableQueryable __Polyfill_Where_0( - this global::ExpressiveSharp.IRewritableQueryable source, + internal static global::ExpressiveSharp.IExpressiveQueryable __Polyfill_Where_0( + this global::ExpressiveSharp.IExpressiveQueryable source, global::System.Func __func) { // Source: o => o.Customer?.Name == "Alice" diff --git a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/OrderByTests.OrderBy_GeneratesInterceptor.verified.txt b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/OrderByTests.OrderBy_GeneratesInterceptor.verified.txt index 5ae2fde..e322e2f 100644 --- a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/OrderByTests.OrderBy_GeneratesInterceptor.verified.txt +++ b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/OrderByTests.OrderBy_GeneratesInterceptor.verified.txt @@ -6,8 +6,8 @@ namespace ExpressiveSharp.Generated.Interceptors internal static class PolyfillInterceptors { [global::System.Runtime.CompilerServices.InterceptsLocationAttribute(/* scrubbed */)] - internal static global::ExpressiveSharp.IRewritableQueryable __Polyfill_OrderBy_0( - this global::ExpressiveSharp.IRewritableQueryable source, + internal static global::ExpressiveSharp.IExpressiveQueryable __Polyfill_OrderBy_0( + this global::ExpressiveSharp.IExpressiveQueryable source, global::System.Func __func) { // Source: o => o.Priority diff --git a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/OrderByTests.ThenBy_CastsToIOrderedQueryable.verified.txt b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/OrderByTests.ThenBy_CastsToIOrderedQueryable.verified.txt index 578b486..87a02b3 100644 --- a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/OrderByTests.ThenBy_CastsToIOrderedQueryable.verified.txt +++ b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/OrderByTests.ThenBy_CastsToIOrderedQueryable.verified.txt @@ -6,8 +6,8 @@ namespace ExpressiveSharp.Generated.Interceptors internal static class PolyfillInterceptors { [global::System.Runtime.CompilerServices.InterceptsLocationAttribute(/* scrubbed */)] - internal static global::ExpressiveSharp.IRewritableQueryable __Polyfill_ThenBy_0( - this global::ExpressiveSharp.IRewritableQueryable source, + internal static global::ExpressiveSharp.IExpressiveQueryable __Polyfill_ThenBy_0( + this global::ExpressiveSharp.IExpressiveQueryable source, global::System.Func __func) { // Source: o => o.Name @@ -20,8 +20,8 @@ namespace ExpressiveSharp.Generated.Interceptors __lambda)); } [global::System.Runtime.CompilerServices.InterceptsLocationAttribute(/* scrubbed */)] - internal static global::ExpressiveSharp.IRewritableQueryable __Polyfill_OrderBy_1( - this global::ExpressiveSharp.IRewritableQueryable source, + internal static global::ExpressiveSharp.IExpressiveQueryable __Polyfill_OrderBy_1( + this global::ExpressiveSharp.IExpressiveQueryable source, global::System.Func __func) { // Source: o => o.Priority diff --git a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/PolyfillTargetTests.PolyfillTarget_RoutesToSpecifiedType.verified.txt b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/PolyfillTargetTests.PolyfillTarget_RoutesToSpecifiedType.verified.txt index 3d70d0a..bede1fe 100644 --- a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/PolyfillTargetTests.PolyfillTarget_RoutesToSpecifiedType.verified.txt +++ b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/PolyfillTargetTests.PolyfillTarget_RoutesToSpecifiedType.verified.txt @@ -7,7 +7,7 @@ namespace ExpressiveSharp.Generated.Interceptors { [global::System.Runtime.CompilerServices.InterceptsLocationAttribute(/* scrubbed */)] internal static global::System.Threading.Tasks.Task __Polyfill_AnyAsync_0( - this global::ExpressiveSharp.IRewritableQueryable source, + this global::ExpressiveSharp.IExpressiveQueryable source, global::System.Func __func, global::System.Threading.CancellationToken cancellationToken) { diff --git a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/PolyfillTargetTests.PolyfillTarget_WithoutAttribute_DefaultsToQueryable.verified.txt b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/PolyfillTargetTests.PolyfillTarget_WithoutAttribute_DefaultsToQueryable.verified.txt index 0c46766..24faac0 100644 --- a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/PolyfillTargetTests.PolyfillTarget_WithoutAttribute_DefaultsToQueryable.verified.txt +++ b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/PolyfillTargetTests.PolyfillTarget_WithoutAttribute_DefaultsToQueryable.verified.txt @@ -7,7 +7,7 @@ namespace ExpressiveSharp.Generated.Interceptors { [global::System.Runtime.CompilerServices.InterceptsLocationAttribute(/* scrubbed */)] internal static bool __Polyfill_Any_0( - this global::ExpressiveSharp.IRewritableQueryable source, + this global::ExpressiveSharp.IExpressiveQueryable source, global::System.Func __func) { // Source: o => o.Active diff --git a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/PolyfillTargetTests.cs b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/PolyfillTargetTests.cs index f0fbfb0..050b387 100644 --- a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/PolyfillTargetTests.cs +++ b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/PolyfillTargetTests.cs @@ -35,7 +35,7 @@ static class Stubs { [PolyfillTarget(typeof(MockEfExtensions))] public static Task AnyAsync( - this IRewritableQueryable source, + this IExpressiveQueryable source, Func predicate, CancellationToken cancellationToken = default) => throw new System.Diagnostics.UnreachableException(); diff --git a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ScalarMethodTests.All_GeneratesScalarInterceptor.verified.txt b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ScalarMethodTests.All_GeneratesScalarInterceptor.verified.txt index b1ae38c..ec929d4 100644 --- a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ScalarMethodTests.All_GeneratesScalarInterceptor.verified.txt +++ b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ScalarMethodTests.All_GeneratesScalarInterceptor.verified.txt @@ -7,7 +7,7 @@ namespace ExpressiveSharp.Generated.Interceptors { [global::System.Runtime.CompilerServices.InterceptsLocationAttribute(/* scrubbed */)] internal static bool __Polyfill_All_0( - this global::ExpressiveSharp.IRewritableQueryable source, + this global::ExpressiveSharp.IExpressiveQueryable source, global::System.Func __func) { // Source: o => o.Active diff --git a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ScalarMethodTests.Any_GeneratesScalarInterceptor.verified.txt b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ScalarMethodTests.Any_GeneratesScalarInterceptor.verified.txt index 339a7e3..205196b 100644 --- a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ScalarMethodTests.Any_GeneratesScalarInterceptor.verified.txt +++ b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ScalarMethodTests.Any_GeneratesScalarInterceptor.verified.txt @@ -7,7 +7,7 @@ namespace ExpressiveSharp.Generated.Interceptors { [global::System.Runtime.CompilerServices.InterceptsLocationAttribute(/* scrubbed */)] internal static bool __Polyfill_Any_0( - this global::ExpressiveSharp.IRewritableQueryable source, + this global::ExpressiveSharp.IExpressiveQueryable source, global::System.Func __func) { // Source: o => o.Tag == "urgent" diff --git a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ScalarMethodTests.Average_DecimalSelector_GeneratesScalarInterceptor.verified.txt b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ScalarMethodTests.Average_DecimalSelector_GeneratesScalarInterceptor.verified.txt index f5e2cfa..a106fc3 100644 --- a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ScalarMethodTests.Average_DecimalSelector_GeneratesScalarInterceptor.verified.txt +++ b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ScalarMethodTests.Average_DecimalSelector_GeneratesScalarInterceptor.verified.txt @@ -7,7 +7,7 @@ namespace ExpressiveSharp.Generated.Interceptors { [global::System.Runtime.CompilerServices.InterceptsLocationAttribute(/* scrubbed */)] internal static decimal __Polyfill_Average_0( - this global::ExpressiveSharp.IRewritableQueryable source, + this global::ExpressiveSharp.IExpressiveQueryable source, global::System.Func __func) { // Source: o => o.Amount diff --git a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ScalarMethodTests.Average_DoubleSelector_GeneratesScalarInterceptor.verified.txt b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ScalarMethodTests.Average_DoubleSelector_GeneratesScalarInterceptor.verified.txt index 8f299a8..3304f9b 100644 --- a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ScalarMethodTests.Average_DoubleSelector_GeneratesScalarInterceptor.verified.txt +++ b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ScalarMethodTests.Average_DoubleSelector_GeneratesScalarInterceptor.verified.txt @@ -7,7 +7,7 @@ namespace ExpressiveSharp.Generated.Interceptors { [global::System.Runtime.CompilerServices.InterceptsLocationAttribute(/* scrubbed */)] internal static double __Polyfill_Average_0( - this global::ExpressiveSharp.IRewritableQueryable source, + this global::ExpressiveSharp.IExpressiveQueryable source, global::System.Func __func) { // Source: o => o.Amount diff --git a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ScalarMethodTests.Average_FloatSelector_GeneratesScalarInterceptor.verified.txt b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ScalarMethodTests.Average_FloatSelector_GeneratesScalarInterceptor.verified.txt index d3585c3..f16ce6f 100644 --- a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ScalarMethodTests.Average_FloatSelector_GeneratesScalarInterceptor.verified.txt +++ b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ScalarMethodTests.Average_FloatSelector_GeneratesScalarInterceptor.verified.txt @@ -7,7 +7,7 @@ namespace ExpressiveSharp.Generated.Interceptors { [global::System.Runtime.CompilerServices.InterceptsLocationAttribute(/* scrubbed */)] internal static float __Polyfill_Average_0( - this global::ExpressiveSharp.IRewritableQueryable source, + this global::ExpressiveSharp.IExpressiveQueryable source, global::System.Func __func) { // Source: o => o.Amount diff --git a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ScalarMethodTests.Average_IntSelector_GeneratesScalarInterceptor.verified.txt b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ScalarMethodTests.Average_IntSelector_GeneratesScalarInterceptor.verified.txt index 1fbc420..1008fd5 100644 --- a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ScalarMethodTests.Average_IntSelector_GeneratesScalarInterceptor.verified.txt +++ b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ScalarMethodTests.Average_IntSelector_GeneratesScalarInterceptor.verified.txt @@ -7,7 +7,7 @@ namespace ExpressiveSharp.Generated.Interceptors { [global::System.Runtime.CompilerServices.InterceptsLocationAttribute(/* scrubbed */)] internal static double __Polyfill_Average_0( - this global::ExpressiveSharp.IRewritableQueryable source, + this global::ExpressiveSharp.IExpressiveQueryable source, global::System.Func __func) { // Source: o => o.Amount diff --git a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ScalarMethodTests.Average_LongSelector_GeneratesScalarInterceptor.verified.txt b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ScalarMethodTests.Average_LongSelector_GeneratesScalarInterceptor.verified.txt index 03bf1b8..292653f 100644 --- a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ScalarMethodTests.Average_LongSelector_GeneratesScalarInterceptor.verified.txt +++ b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ScalarMethodTests.Average_LongSelector_GeneratesScalarInterceptor.verified.txt @@ -7,7 +7,7 @@ namespace ExpressiveSharp.Generated.Interceptors { [global::System.Runtime.CompilerServices.InterceptsLocationAttribute(/* scrubbed */)] internal static double __Polyfill_Average_0( - this global::ExpressiveSharp.IRewritableQueryable source, + this global::ExpressiveSharp.IExpressiveQueryable source, global::System.Func __func) { // Source: o => o.Amount diff --git a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ScalarMethodTests.Average_NullableDecimalSelector_GeneratesScalarInterceptor.verified.txt b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ScalarMethodTests.Average_NullableDecimalSelector_GeneratesScalarInterceptor.verified.txt index f828b01..3cebb03 100644 --- a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ScalarMethodTests.Average_NullableDecimalSelector_GeneratesScalarInterceptor.verified.txt +++ b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ScalarMethodTests.Average_NullableDecimalSelector_GeneratesScalarInterceptor.verified.txt @@ -7,7 +7,7 @@ namespace ExpressiveSharp.Generated.Interceptors { [global::System.Runtime.CompilerServices.InterceptsLocationAttribute(/* scrubbed */)] internal static decimal? __Polyfill_Average_0( - this global::ExpressiveSharp.IRewritableQueryable source, + this global::ExpressiveSharp.IExpressiveQueryable source, global::System.Func __func) { // Source: o => o.Amount diff --git a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ScalarMethodTests.Average_NullableDoubleSelector_GeneratesScalarInterceptor.verified.txt b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ScalarMethodTests.Average_NullableDoubleSelector_GeneratesScalarInterceptor.verified.txt index d5e7e8b..2181865 100644 --- a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ScalarMethodTests.Average_NullableDoubleSelector_GeneratesScalarInterceptor.verified.txt +++ b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ScalarMethodTests.Average_NullableDoubleSelector_GeneratesScalarInterceptor.verified.txt @@ -7,7 +7,7 @@ namespace ExpressiveSharp.Generated.Interceptors { [global::System.Runtime.CompilerServices.InterceptsLocationAttribute(/* scrubbed */)] internal static double? __Polyfill_Average_0( - this global::ExpressiveSharp.IRewritableQueryable source, + this global::ExpressiveSharp.IExpressiveQueryable source, global::System.Func __func) { // Source: o => o.Amount diff --git a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ScalarMethodTests.Average_NullableFloatSelector_GeneratesScalarInterceptor.verified.txt b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ScalarMethodTests.Average_NullableFloatSelector_GeneratesScalarInterceptor.verified.txt index 97b170e..70c7dd6 100644 --- a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ScalarMethodTests.Average_NullableFloatSelector_GeneratesScalarInterceptor.verified.txt +++ b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ScalarMethodTests.Average_NullableFloatSelector_GeneratesScalarInterceptor.verified.txt @@ -7,7 +7,7 @@ namespace ExpressiveSharp.Generated.Interceptors { [global::System.Runtime.CompilerServices.InterceptsLocationAttribute(/* scrubbed */)] internal static float? __Polyfill_Average_0( - this global::ExpressiveSharp.IRewritableQueryable source, + this global::ExpressiveSharp.IExpressiveQueryable source, global::System.Func __func) { // Source: o => o.Amount diff --git a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ScalarMethodTests.Average_NullableIntSelector_GeneratesScalarInterceptor.verified.txt b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ScalarMethodTests.Average_NullableIntSelector_GeneratesScalarInterceptor.verified.txt index 9d387b7..4e35f06 100644 --- a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ScalarMethodTests.Average_NullableIntSelector_GeneratesScalarInterceptor.verified.txt +++ b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ScalarMethodTests.Average_NullableIntSelector_GeneratesScalarInterceptor.verified.txt @@ -7,7 +7,7 @@ namespace ExpressiveSharp.Generated.Interceptors { [global::System.Runtime.CompilerServices.InterceptsLocationAttribute(/* scrubbed */)] internal static double? __Polyfill_Average_0( - this global::ExpressiveSharp.IRewritableQueryable source, + this global::ExpressiveSharp.IExpressiveQueryable source, global::System.Func __func) { // Source: o => o.Amount diff --git a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ScalarMethodTests.Average_NullableLongSelector_GeneratesScalarInterceptor.verified.txt b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ScalarMethodTests.Average_NullableLongSelector_GeneratesScalarInterceptor.verified.txt index fdb41b8..4cc5694 100644 --- a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ScalarMethodTests.Average_NullableLongSelector_GeneratesScalarInterceptor.verified.txt +++ b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ScalarMethodTests.Average_NullableLongSelector_GeneratesScalarInterceptor.verified.txt @@ -7,7 +7,7 @@ namespace ExpressiveSharp.Generated.Interceptors { [global::System.Runtime.CompilerServices.InterceptsLocationAttribute(/* scrubbed */)] internal static double? __Polyfill_Average_0( - this global::ExpressiveSharp.IRewritableQueryable source, + this global::ExpressiveSharp.IExpressiveQueryable source, global::System.Func __func) { // Source: o => o.Amount diff --git a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ScalarMethodTests.Count_GeneratesScalarInterceptor.verified.txt b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ScalarMethodTests.Count_GeneratesScalarInterceptor.verified.txt index e37139a..beac5b4 100644 --- a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ScalarMethodTests.Count_GeneratesScalarInterceptor.verified.txt +++ b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ScalarMethodTests.Count_GeneratesScalarInterceptor.verified.txt @@ -7,7 +7,7 @@ namespace ExpressiveSharp.Generated.Interceptors { [global::System.Runtime.CompilerServices.InterceptsLocationAttribute(/* scrubbed */)] internal static int __Polyfill_Count_0( - this global::ExpressiveSharp.IRewritableQueryable source, + this global::ExpressiveSharp.IExpressiveQueryable source, global::System.Func __func) { // Source: o => o.Amount > 100 diff --git a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ScalarMethodTests.FirstOrDefault_GeneratesScalarInterceptor.verified.txt b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ScalarMethodTests.FirstOrDefault_GeneratesScalarInterceptor.verified.txt index 49d8baf..38aeff5 100644 --- a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ScalarMethodTests.FirstOrDefault_GeneratesScalarInterceptor.verified.txt +++ b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ScalarMethodTests.FirstOrDefault_GeneratesScalarInterceptor.verified.txt @@ -7,7 +7,7 @@ namespace ExpressiveSharp.Generated.Interceptors { [global::System.Runtime.CompilerServices.InterceptsLocationAttribute(/* scrubbed */)] internal static global::TestNs.Order __Polyfill_FirstOrDefault_0( - this global::ExpressiveSharp.IRewritableQueryable source, + this global::ExpressiveSharp.IExpressiveQueryable source, global::System.Func __func) { // Source: o => o.Active diff --git a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ScalarMethodTests.First_GeneratesScalarInterceptor.verified.txt b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ScalarMethodTests.First_GeneratesScalarInterceptor.verified.txt index dd1f4d9..0a02d17 100644 --- a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ScalarMethodTests.First_GeneratesScalarInterceptor.verified.txt +++ b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ScalarMethodTests.First_GeneratesScalarInterceptor.verified.txt @@ -7,7 +7,7 @@ namespace ExpressiveSharp.Generated.Interceptors { [global::System.Runtime.CompilerServices.InterceptsLocationAttribute(/* scrubbed */)] internal static global::TestNs.Order __Polyfill_First_0( - this global::ExpressiveSharp.IRewritableQueryable source, + this global::ExpressiveSharp.IExpressiveQueryable source, global::System.Func __func) { // Source: o => o.Active diff --git a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ScalarMethodTests.LastOrDefault_GeneratesScalarInterceptor.verified.txt b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ScalarMethodTests.LastOrDefault_GeneratesScalarInterceptor.verified.txt index 98aa5d7..63cc307 100644 --- a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ScalarMethodTests.LastOrDefault_GeneratesScalarInterceptor.verified.txt +++ b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ScalarMethodTests.LastOrDefault_GeneratesScalarInterceptor.verified.txt @@ -7,7 +7,7 @@ namespace ExpressiveSharp.Generated.Interceptors { [global::System.Runtime.CompilerServices.InterceptsLocationAttribute(/* scrubbed */)] internal static global::TestNs.Order __Polyfill_LastOrDefault_0( - this global::ExpressiveSharp.IRewritableQueryable source, + this global::ExpressiveSharp.IExpressiveQueryable source, global::System.Func __func) { // Source: o => o.Active diff --git a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ScalarMethodTests.Last_GeneratesScalarInterceptor.verified.txt b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ScalarMethodTests.Last_GeneratesScalarInterceptor.verified.txt index c6f7b5b..9cfa2a4 100644 --- a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ScalarMethodTests.Last_GeneratesScalarInterceptor.verified.txt +++ b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ScalarMethodTests.Last_GeneratesScalarInterceptor.verified.txt @@ -7,7 +7,7 @@ namespace ExpressiveSharp.Generated.Interceptors { [global::System.Runtime.CompilerServices.InterceptsLocationAttribute(/* scrubbed */)] internal static global::TestNs.Order __Polyfill_Last_0( - this global::ExpressiveSharp.IRewritableQueryable source, + this global::ExpressiveSharp.IExpressiveQueryable source, global::System.Func __func) { // Source: o => o.Active diff --git a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ScalarMethodTests.LongCount_GeneratesScalarInterceptor.verified.txt b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ScalarMethodTests.LongCount_GeneratesScalarInterceptor.verified.txt index ec73a3f..0544055 100644 --- a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ScalarMethodTests.LongCount_GeneratesScalarInterceptor.verified.txt +++ b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ScalarMethodTests.LongCount_GeneratesScalarInterceptor.verified.txt @@ -7,7 +7,7 @@ namespace ExpressiveSharp.Generated.Interceptors { [global::System.Runtime.CompilerServices.InterceptsLocationAttribute(/* scrubbed */)] internal static long __Polyfill_LongCount_0( - this global::ExpressiveSharp.IRewritableQueryable source, + this global::ExpressiveSharp.IExpressiveQueryable source, global::System.Func __func) { // Source: o => o.Amount > 100 diff --git a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ScalarMethodTests.MaxBy_GeneratesScalarInterceptor.verified.txt b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ScalarMethodTests.MaxBy_GeneratesScalarInterceptor.verified.txt index 8d62088..5555a5f 100644 --- a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ScalarMethodTests.MaxBy_GeneratesScalarInterceptor.verified.txt +++ b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ScalarMethodTests.MaxBy_GeneratesScalarInterceptor.verified.txt @@ -7,7 +7,7 @@ namespace ExpressiveSharp.Generated.Interceptors { [global::System.Runtime.CompilerServices.InterceptsLocationAttribute(/* scrubbed */)] internal static global::TestNs.Order __Polyfill_MaxBy_0( - this global::ExpressiveSharp.IRewritableQueryable source, + this global::ExpressiveSharp.IExpressiveQueryable source, global::System.Func __func) { // Source: o => o.Amount diff --git a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ScalarMethodTests.Max_GenericSelector_GeneratesScalarInterceptor.verified.txt b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ScalarMethodTests.Max_GenericSelector_GeneratesScalarInterceptor.verified.txt index 389e7e6..f588cb5 100644 --- a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ScalarMethodTests.Max_GenericSelector_GeneratesScalarInterceptor.verified.txt +++ b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ScalarMethodTests.Max_GenericSelector_GeneratesScalarInterceptor.verified.txt @@ -7,7 +7,7 @@ namespace ExpressiveSharp.Generated.Interceptors { [global::System.Runtime.CompilerServices.InterceptsLocationAttribute(/* scrubbed */)] internal static string __Polyfill_Max_0( - this global::ExpressiveSharp.IRewritableQueryable source, + this global::ExpressiveSharp.IExpressiveQueryable source, global::System.Func __func) { // Source: o => o.Name diff --git a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ScalarMethodTests.MinBy_GeneratesScalarInterceptor.verified.txt b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ScalarMethodTests.MinBy_GeneratesScalarInterceptor.verified.txt index 99ff43b..a9994fe 100644 --- a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ScalarMethodTests.MinBy_GeneratesScalarInterceptor.verified.txt +++ b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ScalarMethodTests.MinBy_GeneratesScalarInterceptor.verified.txt @@ -7,7 +7,7 @@ namespace ExpressiveSharp.Generated.Interceptors { [global::System.Runtime.CompilerServices.InterceptsLocationAttribute(/* scrubbed */)] internal static global::TestNs.Order __Polyfill_MinBy_0( - this global::ExpressiveSharp.IRewritableQueryable source, + this global::ExpressiveSharp.IExpressiveQueryable source, global::System.Func __func) { // Source: o => o.Amount diff --git a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ScalarMethodTests.Min_GenericSelector_GeneratesScalarInterceptor.verified.txt b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ScalarMethodTests.Min_GenericSelector_GeneratesScalarInterceptor.verified.txt index 8b0313f..54a46d0 100644 --- a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ScalarMethodTests.Min_GenericSelector_GeneratesScalarInterceptor.verified.txt +++ b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ScalarMethodTests.Min_GenericSelector_GeneratesScalarInterceptor.verified.txt @@ -7,7 +7,7 @@ namespace ExpressiveSharp.Generated.Interceptors { [global::System.Runtime.CompilerServices.InterceptsLocationAttribute(/* scrubbed */)] internal static string __Polyfill_Min_0( - this global::ExpressiveSharp.IRewritableQueryable source, + this global::ExpressiveSharp.IExpressiveQueryable source, global::System.Func __func) { // Source: o => o.Name diff --git a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ScalarMethodTests.SingleOrDefault_GeneratesScalarInterceptor.verified.txt b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ScalarMethodTests.SingleOrDefault_GeneratesScalarInterceptor.verified.txt index 6e51d85..49c8856 100644 --- a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ScalarMethodTests.SingleOrDefault_GeneratesScalarInterceptor.verified.txt +++ b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ScalarMethodTests.SingleOrDefault_GeneratesScalarInterceptor.verified.txt @@ -7,7 +7,7 @@ namespace ExpressiveSharp.Generated.Interceptors { [global::System.Runtime.CompilerServices.InterceptsLocationAttribute(/* scrubbed */)] internal static global::TestNs.Order __Polyfill_SingleOrDefault_0( - this global::ExpressiveSharp.IRewritableQueryable source, + this global::ExpressiveSharp.IExpressiveQueryable source, global::System.Func __func) { // Source: o => o.Active diff --git a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ScalarMethodTests.Single_GeneratesScalarInterceptor.verified.txt b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ScalarMethodTests.Single_GeneratesScalarInterceptor.verified.txt index d11fa7e..084bed4 100644 --- a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ScalarMethodTests.Single_GeneratesScalarInterceptor.verified.txt +++ b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ScalarMethodTests.Single_GeneratesScalarInterceptor.verified.txt @@ -7,7 +7,7 @@ namespace ExpressiveSharp.Generated.Interceptors { [global::System.Runtime.CompilerServices.InterceptsLocationAttribute(/* scrubbed */)] internal static global::TestNs.Order __Polyfill_Single_0( - this global::ExpressiveSharp.IRewritableQueryable source, + this global::ExpressiveSharp.IExpressiveQueryable source, global::System.Func __func) { // Source: o => o.Active diff --git a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ScalarMethodTests.Sum_DecimalSelector_GeneratesScalarInterceptor.verified.txt b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ScalarMethodTests.Sum_DecimalSelector_GeneratesScalarInterceptor.verified.txt index 7d90a62..6a4afe4 100644 --- a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ScalarMethodTests.Sum_DecimalSelector_GeneratesScalarInterceptor.verified.txt +++ b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ScalarMethodTests.Sum_DecimalSelector_GeneratesScalarInterceptor.verified.txt @@ -7,7 +7,7 @@ namespace ExpressiveSharp.Generated.Interceptors { [global::System.Runtime.CompilerServices.InterceptsLocationAttribute(/* scrubbed */)] internal static decimal __Polyfill_Sum_0( - this global::ExpressiveSharp.IRewritableQueryable source, + this global::ExpressiveSharp.IExpressiveQueryable source, global::System.Func __func) { // Source: o => o.Amount diff --git a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ScalarMethodTests.Sum_DoubleSelector_GeneratesScalarInterceptor.verified.txt b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ScalarMethodTests.Sum_DoubleSelector_GeneratesScalarInterceptor.verified.txt index 80991c9..75a0c77 100644 --- a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ScalarMethodTests.Sum_DoubleSelector_GeneratesScalarInterceptor.verified.txt +++ b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ScalarMethodTests.Sum_DoubleSelector_GeneratesScalarInterceptor.verified.txt @@ -7,7 +7,7 @@ namespace ExpressiveSharp.Generated.Interceptors { [global::System.Runtime.CompilerServices.InterceptsLocationAttribute(/* scrubbed */)] internal static double __Polyfill_Sum_0( - this global::ExpressiveSharp.IRewritableQueryable source, + this global::ExpressiveSharp.IExpressiveQueryable source, global::System.Func __func) { // Source: o => o.Amount diff --git a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ScalarMethodTests.Sum_FloatSelector_GeneratesScalarInterceptor.verified.txt b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ScalarMethodTests.Sum_FloatSelector_GeneratesScalarInterceptor.verified.txt index 9cba7a3..7bdf049 100644 --- a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ScalarMethodTests.Sum_FloatSelector_GeneratesScalarInterceptor.verified.txt +++ b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ScalarMethodTests.Sum_FloatSelector_GeneratesScalarInterceptor.verified.txt @@ -7,7 +7,7 @@ namespace ExpressiveSharp.Generated.Interceptors { [global::System.Runtime.CompilerServices.InterceptsLocationAttribute(/* scrubbed */)] internal static float __Polyfill_Sum_0( - this global::ExpressiveSharp.IRewritableQueryable source, + this global::ExpressiveSharp.IExpressiveQueryable source, global::System.Func __func) { // Source: o => o.Amount diff --git a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ScalarMethodTests.Sum_IntSelector_GeneratesScalarInterceptor.verified.txt b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ScalarMethodTests.Sum_IntSelector_GeneratesScalarInterceptor.verified.txt index dd7a776..ab1d771 100644 --- a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ScalarMethodTests.Sum_IntSelector_GeneratesScalarInterceptor.verified.txt +++ b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ScalarMethodTests.Sum_IntSelector_GeneratesScalarInterceptor.verified.txt @@ -7,7 +7,7 @@ namespace ExpressiveSharp.Generated.Interceptors { [global::System.Runtime.CompilerServices.InterceptsLocationAttribute(/* scrubbed */)] internal static int __Polyfill_Sum_0( - this global::ExpressiveSharp.IRewritableQueryable source, + this global::ExpressiveSharp.IExpressiveQueryable source, global::System.Func __func) { // Source: o => o.Amount diff --git a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ScalarMethodTests.Sum_LongSelector_GeneratesScalarInterceptor.verified.txt b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ScalarMethodTests.Sum_LongSelector_GeneratesScalarInterceptor.verified.txt index b8d3ba8..e1322b2 100644 --- a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ScalarMethodTests.Sum_LongSelector_GeneratesScalarInterceptor.verified.txt +++ b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ScalarMethodTests.Sum_LongSelector_GeneratesScalarInterceptor.verified.txt @@ -7,7 +7,7 @@ namespace ExpressiveSharp.Generated.Interceptors { [global::System.Runtime.CompilerServices.InterceptsLocationAttribute(/* scrubbed */)] internal static long __Polyfill_Sum_0( - this global::ExpressiveSharp.IRewritableQueryable source, + this global::ExpressiveSharp.IExpressiveQueryable source, global::System.Func __func) { // Source: o => o.Amount diff --git a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ScalarMethodTests.Sum_NullableDecimalSelector_GeneratesScalarInterceptor.verified.txt b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ScalarMethodTests.Sum_NullableDecimalSelector_GeneratesScalarInterceptor.verified.txt index a5e8a36..884df57 100644 --- a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ScalarMethodTests.Sum_NullableDecimalSelector_GeneratesScalarInterceptor.verified.txt +++ b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ScalarMethodTests.Sum_NullableDecimalSelector_GeneratesScalarInterceptor.verified.txt @@ -7,7 +7,7 @@ namespace ExpressiveSharp.Generated.Interceptors { [global::System.Runtime.CompilerServices.InterceptsLocationAttribute(/* scrubbed */)] internal static decimal? __Polyfill_Sum_0( - this global::ExpressiveSharp.IRewritableQueryable source, + this global::ExpressiveSharp.IExpressiveQueryable source, global::System.Func __func) { // Source: o => o.Amount diff --git a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ScalarMethodTests.Sum_NullableDoubleSelector_GeneratesScalarInterceptor.verified.txt b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ScalarMethodTests.Sum_NullableDoubleSelector_GeneratesScalarInterceptor.verified.txt index 6e5d712..b8f9ac8 100644 --- a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ScalarMethodTests.Sum_NullableDoubleSelector_GeneratesScalarInterceptor.verified.txt +++ b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ScalarMethodTests.Sum_NullableDoubleSelector_GeneratesScalarInterceptor.verified.txt @@ -7,7 +7,7 @@ namespace ExpressiveSharp.Generated.Interceptors { [global::System.Runtime.CompilerServices.InterceptsLocationAttribute(/* scrubbed */)] internal static double? __Polyfill_Sum_0( - this global::ExpressiveSharp.IRewritableQueryable source, + this global::ExpressiveSharp.IExpressiveQueryable source, global::System.Func __func) { // Source: o => o.Amount diff --git a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ScalarMethodTests.Sum_NullableFloatSelector_GeneratesScalarInterceptor.verified.txt b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ScalarMethodTests.Sum_NullableFloatSelector_GeneratesScalarInterceptor.verified.txt index 321d721..1f003e4 100644 --- a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ScalarMethodTests.Sum_NullableFloatSelector_GeneratesScalarInterceptor.verified.txt +++ b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ScalarMethodTests.Sum_NullableFloatSelector_GeneratesScalarInterceptor.verified.txt @@ -7,7 +7,7 @@ namespace ExpressiveSharp.Generated.Interceptors { [global::System.Runtime.CompilerServices.InterceptsLocationAttribute(/* scrubbed */)] internal static float? __Polyfill_Sum_0( - this global::ExpressiveSharp.IRewritableQueryable source, + this global::ExpressiveSharp.IExpressiveQueryable source, global::System.Func __func) { // Source: o => o.Amount diff --git a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ScalarMethodTests.Sum_NullableIntSelector_GeneratesScalarInterceptor.verified.txt b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ScalarMethodTests.Sum_NullableIntSelector_GeneratesScalarInterceptor.verified.txt index 8d1d577..1fd2186 100644 --- a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ScalarMethodTests.Sum_NullableIntSelector_GeneratesScalarInterceptor.verified.txt +++ b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ScalarMethodTests.Sum_NullableIntSelector_GeneratesScalarInterceptor.verified.txt @@ -7,7 +7,7 @@ namespace ExpressiveSharp.Generated.Interceptors { [global::System.Runtime.CompilerServices.InterceptsLocationAttribute(/* scrubbed */)] internal static int? __Polyfill_Sum_0( - this global::ExpressiveSharp.IRewritableQueryable source, + this global::ExpressiveSharp.IExpressiveQueryable source, global::System.Func __func) { // Source: o => o.Amount diff --git a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ScalarMethodTests.Sum_NullableLongSelector_GeneratesScalarInterceptor.verified.txt b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ScalarMethodTests.Sum_NullableLongSelector_GeneratesScalarInterceptor.verified.txt index bc98d52..aec8df1 100644 --- a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ScalarMethodTests.Sum_NullableLongSelector_GeneratesScalarInterceptor.verified.txt +++ b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ScalarMethodTests.Sum_NullableLongSelector_GeneratesScalarInterceptor.verified.txt @@ -7,7 +7,7 @@ namespace ExpressiveSharp.Generated.Interceptors { [global::System.Runtime.CompilerServices.InterceptsLocationAttribute(/* scrubbed */)] internal static long? __Polyfill_Sum_0( - this global::ExpressiveSharp.IRewritableQueryable source, + this global::ExpressiveSharp.IExpressiveQueryable source, global::System.Func __func) { // Source: o => o.Amount diff --git a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/SelectManyTests.SelectMany_CollectionSelector_GeneratesInterceptor.verified.txt b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/SelectManyTests.SelectMany_CollectionSelector_GeneratesInterceptor.verified.txt index 984bb92..1590218 100644 --- a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/SelectManyTests.SelectMany_CollectionSelector_GeneratesInterceptor.verified.txt +++ b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/SelectManyTests.SelectMany_CollectionSelector_GeneratesInterceptor.verified.txt @@ -6,8 +6,8 @@ namespace ExpressiveSharp.Generated.Interceptors internal static class PolyfillInterceptors { [global::System.Runtime.CompilerServices.InterceptsLocationAttribute(/* scrubbed */)] - internal static global::ExpressiveSharp.IRewritableQueryable __Polyfill_SelectMany_0( - this global::ExpressiveSharp.IRewritableQueryable source, + internal static global::ExpressiveSharp.IExpressiveQueryable __Polyfill_SelectMany_0( + this global::ExpressiveSharp.IExpressiveQueryable source, global::System.Func> __func) { // Source: o => o.Tags diff --git a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/SelectManyTests.SelectMany_WithResultSelector_GeneratesInterceptor.verified.txt b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/SelectManyTests.SelectMany_WithResultSelector_GeneratesInterceptor.verified.txt index 8c7d39a..f889521 100644 --- a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/SelectManyTests.SelectMany_WithResultSelector_GeneratesInterceptor.verified.txt +++ b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/SelectManyTests.SelectMany_WithResultSelector_GeneratesInterceptor.verified.txt @@ -6,8 +6,8 @@ namespace ExpressiveSharp.Generated.Interceptors internal static class PolyfillInterceptors { [global::System.Runtime.CompilerServices.InterceptsLocationAttribute(/* scrubbed */)] - internal static global::ExpressiveSharp.IRewritableQueryable __Polyfill_SelectMany_0( - this global::ExpressiveSharp.IRewritableQueryable source, + internal static global::ExpressiveSharp.IExpressiveQueryable __Polyfill_SelectMany_0( + this global::ExpressiveSharp.IExpressiveQueryable source, global::System.Func> __func1, global::System.Func __func2) { diff --git a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/SelectTests.Select_AnonymousType_GeneratesGenericInterceptor.verified.txt b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/SelectTests.Select_AnonymousType_GeneratesGenericInterceptor.verified.txt index c5dcb8f..d0b8d86 100644 --- a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/SelectTests.Select_AnonymousType_GeneratesGenericInterceptor.verified.txt +++ b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/SelectTests.Select_AnonymousType_GeneratesGenericInterceptor.verified.txt @@ -6,8 +6,8 @@ namespace ExpressiveSharp.Generated.Interceptors internal static class PolyfillInterceptors { [global::System.Runtime.CompilerServices.InterceptsLocationAttribute(/* scrubbed */)] - internal static global::ExpressiveSharp.IRewritableQueryable __Polyfill_Select_0( - this global::ExpressiveSharp.IRewritableQueryable source, + internal static global::ExpressiveSharp.IExpressiveQueryable __Polyfill_Select_0( + this global::ExpressiveSharp.IExpressiveQueryable source, global::System.Func __func) { // Source: o => new { o.Id, o.Name } @@ -17,7 +17,7 @@ namespace ExpressiveSharp.Generated.Interceptors var i0_expr_3 = typeof(T1).GetConstructors()[0]; var i0_expr_0 = global::System.Linq.Expressions.Expression.New(i0_expr_3, new global::System.Linq.Expressions.Expression[] { i0_expr_1, i0_expr_2 }, new global::System.Reflection.MemberInfo[] { typeof(T1).GetProperty("Id"), typeof(T1).GetProperty("Name") }); var __lambda = global::System.Linq.Expressions.Expression.Lambda>(i0_expr_0, i0_p_o); - return (global::ExpressiveSharp.IRewritableQueryable)(object) + return (global::ExpressiveSharp.IExpressiveQueryable)(object) global::ExpressiveSharp.Extensions.ExpressiveQueryableExtensions.AsExpressive( global::System.Linq.Queryable.Select( (global::System.Linq.IQueryable)(object)source, diff --git a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/SelectTests.Select_AnonymousType_WithComputedExpression_GeneratesCorrectly.verified.txt b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/SelectTests.Select_AnonymousType_WithComputedExpression_GeneratesCorrectly.verified.txt index 97eadc8..0539587 100644 --- a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/SelectTests.Select_AnonymousType_WithComputedExpression_GeneratesCorrectly.verified.txt +++ b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/SelectTests.Select_AnonymousType_WithComputedExpression_GeneratesCorrectly.verified.txt @@ -6,8 +6,8 @@ namespace ExpressiveSharp.Generated.Interceptors internal static class PolyfillInterceptors { [global::System.Runtime.CompilerServices.InterceptsLocationAttribute(/* scrubbed */)] - internal static global::ExpressiveSharp.IRewritableQueryable __Polyfill_Select_0( - this global::ExpressiveSharp.IRewritableQueryable source, + internal static global::ExpressiveSharp.IExpressiveQueryable __Polyfill_Select_0( + this global::ExpressiveSharp.IExpressiveQueryable source, global::System.Func __func) { // Source: o => new { o.Id, Total = o.Price * o.Qty } @@ -20,7 +20,7 @@ namespace ExpressiveSharp.Generated.Interceptors var i0_expr_6 = typeof(T1).GetConstructors()[0]; var i0_expr_0 = global::System.Linq.Expressions.Expression.New(i0_expr_6, new global::System.Linq.Expressions.Expression[] { i0_expr_1, i0_expr_2 }, new global::System.Reflection.MemberInfo[] { typeof(T1).GetProperty("Id"), typeof(T1).GetProperty("Total") }); var __lambda = global::System.Linq.Expressions.Expression.Lambda>(i0_expr_0, i0_p_o); - return (global::ExpressiveSharp.IRewritableQueryable)(object) + return (global::ExpressiveSharp.IExpressiveQueryable)(object) global::ExpressiveSharp.Extensions.ExpressiveQueryableExtensions.AsExpressive( global::System.Linq.Queryable.Select( (global::System.Linq.IQueryable)(object)source, diff --git a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/SelectTests.Select_NamedType_GeneratesConcreteInterceptor.verified.txt b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/SelectTests.Select_NamedType_GeneratesConcreteInterceptor.verified.txt index 0422e8f..94f977a 100644 --- a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/SelectTests.Select_NamedType_GeneratesConcreteInterceptor.verified.txt +++ b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/SelectTests.Select_NamedType_GeneratesConcreteInterceptor.verified.txt @@ -6,8 +6,8 @@ namespace ExpressiveSharp.Generated.Interceptors internal static class PolyfillInterceptors { [global::System.Runtime.CompilerServices.InterceptsLocationAttribute(/* scrubbed */)] - internal static global::ExpressiveSharp.IRewritableQueryable __Polyfill_Select_0( - this global::ExpressiveSharp.IRewritableQueryable source, + internal static global::ExpressiveSharp.IExpressiveQueryable __Polyfill_Select_0( + this global::ExpressiveSharp.IExpressiveQueryable source, global::System.Func __func) { // Source: o => o.Name diff --git a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/SetOperationTests.ExceptBy_GeneratesInterceptor.verified.txt b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/SetOperationTests.ExceptBy_GeneratesInterceptor.verified.txt index d7c03dc..38397ae 100644 --- a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/SetOperationTests.ExceptBy_GeneratesInterceptor.verified.txt +++ b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/SetOperationTests.ExceptBy_GeneratesInterceptor.verified.txt @@ -6,8 +6,8 @@ namespace ExpressiveSharp.Generated.Interceptors internal static class PolyfillInterceptors { [global::System.Runtime.CompilerServices.InterceptsLocationAttribute(/* scrubbed */)] - internal static global::ExpressiveSharp.IRewritableQueryable __Polyfill_ExceptBy_0( - this global::ExpressiveSharp.IRewritableQueryable source, + internal static global::ExpressiveSharp.IExpressiveQueryable __Polyfill_ExceptBy_0( + this global::ExpressiveSharp.IExpressiveQueryable source, global::System.Collections.Generic.IEnumerable second, global::System.Func __func) { diff --git a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/SetOperationTests.IntersectBy_GeneratesInterceptor.verified.txt b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/SetOperationTests.IntersectBy_GeneratesInterceptor.verified.txt index 7891d99..79b5027 100644 --- a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/SetOperationTests.IntersectBy_GeneratesInterceptor.verified.txt +++ b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/SetOperationTests.IntersectBy_GeneratesInterceptor.verified.txt @@ -6,8 +6,8 @@ namespace ExpressiveSharp.Generated.Interceptors internal static class PolyfillInterceptors { [global::System.Runtime.CompilerServices.InterceptsLocationAttribute(/* scrubbed */)] - internal static global::ExpressiveSharp.IRewritableQueryable __Polyfill_IntersectBy_0( - this global::ExpressiveSharp.IRewritableQueryable source, + internal static global::ExpressiveSharp.IExpressiveQueryable __Polyfill_IntersectBy_0( + this global::ExpressiveSharp.IExpressiveQueryable source, global::System.Collections.Generic.IEnumerable second, global::System.Func __func) { diff --git a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/SetOperationTests.UnionBy_GeneratesInterceptor.verified.txt b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/SetOperationTests.UnionBy_GeneratesInterceptor.verified.txt index 5473a92..5e9a51e 100644 --- a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/SetOperationTests.UnionBy_GeneratesInterceptor.verified.txt +++ b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/SetOperationTests.UnionBy_GeneratesInterceptor.verified.txt @@ -6,8 +6,8 @@ namespace ExpressiveSharp.Generated.Interceptors internal static class PolyfillInterceptors { [global::System.Runtime.CompilerServices.InterceptsLocationAttribute(/* scrubbed */)] - internal static global::ExpressiveSharp.IRewritableQueryable __Polyfill_UnionBy_0( - this global::ExpressiveSharp.IRewritableQueryable source, + internal static global::ExpressiveSharp.IExpressiveQueryable __Polyfill_UnionBy_0( + this global::ExpressiveSharp.IExpressiveQueryable source, global::System.Collections.Generic.IEnumerable second, global::System.Func __func) { diff --git a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/SingleLambdaQueryableTests.CountBy_GeneratesInterceptor.verified.txt b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/SingleLambdaQueryableTests.CountBy_GeneratesInterceptor.verified.txt index 78a7416..7401d5d 100644 --- a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/SingleLambdaQueryableTests.CountBy_GeneratesInterceptor.verified.txt +++ b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/SingleLambdaQueryableTests.CountBy_GeneratesInterceptor.verified.txt @@ -6,8 +6,8 @@ namespace ExpressiveSharp.Generated.Interceptors internal static class PolyfillInterceptors { [global::System.Runtime.CompilerServices.InterceptsLocationAttribute(/* scrubbed */)] - internal static global::ExpressiveSharp.IRewritableQueryable> __Polyfill_CountBy_0( - this global::ExpressiveSharp.IRewritableQueryable source, + internal static global::ExpressiveSharp.IExpressiveQueryable> __Polyfill_CountBy_0( + this global::ExpressiveSharp.IExpressiveQueryable source, global::System.Func __func) { // Source: o => o.Tag diff --git a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/SingleLambdaQueryableTests.DistinctBy_GeneratesInterceptor.verified.txt b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/SingleLambdaQueryableTests.DistinctBy_GeneratesInterceptor.verified.txt index 37886e6..c349d71 100644 --- a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/SingleLambdaQueryableTests.DistinctBy_GeneratesInterceptor.verified.txt +++ b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/SingleLambdaQueryableTests.DistinctBy_GeneratesInterceptor.verified.txt @@ -6,8 +6,8 @@ namespace ExpressiveSharp.Generated.Interceptors internal static class PolyfillInterceptors { [global::System.Runtime.CompilerServices.InterceptsLocationAttribute(/* scrubbed */)] - internal static global::ExpressiveSharp.IRewritableQueryable __Polyfill_DistinctBy_0( - this global::ExpressiveSharp.IRewritableQueryable source, + internal static global::ExpressiveSharp.IExpressiveQueryable __Polyfill_DistinctBy_0( + this global::ExpressiveSharp.IExpressiveQueryable source, global::System.Func __func) { // Source: o => o.Tag diff --git a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/SingleLambdaQueryableTests.OrderByDescending_GeneratesInterceptor.verified.txt b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/SingleLambdaQueryableTests.OrderByDescending_GeneratesInterceptor.verified.txt index 7481807..f59c8c8 100644 --- a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/SingleLambdaQueryableTests.OrderByDescending_GeneratesInterceptor.verified.txt +++ b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/SingleLambdaQueryableTests.OrderByDescending_GeneratesInterceptor.verified.txt @@ -6,8 +6,8 @@ namespace ExpressiveSharp.Generated.Interceptors internal static class PolyfillInterceptors { [global::System.Runtime.CompilerServices.InterceptsLocationAttribute(/* scrubbed */)] - internal static global::ExpressiveSharp.IRewritableQueryable __Polyfill_OrderByDescending_0( - this global::ExpressiveSharp.IRewritableQueryable source, + internal static global::ExpressiveSharp.IExpressiveQueryable __Polyfill_OrderByDescending_0( + this global::ExpressiveSharp.IExpressiveQueryable source, global::System.Func __func) { // Source: o => o.Amount diff --git a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/SingleLambdaQueryableTests.SkipWhile_GeneratesInterceptor.verified.txt b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/SingleLambdaQueryableTests.SkipWhile_GeneratesInterceptor.verified.txt index 3627866..b309dff 100644 --- a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/SingleLambdaQueryableTests.SkipWhile_GeneratesInterceptor.verified.txt +++ b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/SingleLambdaQueryableTests.SkipWhile_GeneratesInterceptor.verified.txt @@ -6,8 +6,8 @@ namespace ExpressiveSharp.Generated.Interceptors internal static class PolyfillInterceptors { [global::System.Runtime.CompilerServices.InterceptsLocationAttribute(/* scrubbed */)] - internal static global::ExpressiveSharp.IRewritableQueryable __Polyfill_SkipWhile_0( - this global::ExpressiveSharp.IRewritableQueryable source, + internal static global::ExpressiveSharp.IExpressiveQueryable __Polyfill_SkipWhile_0( + this global::ExpressiveSharp.IExpressiveQueryable source, global::System.Func __func) { // Source: o => o.Amount < 50 diff --git a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/SingleLambdaQueryableTests.TakeWhile_GeneratesInterceptor.verified.txt b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/SingleLambdaQueryableTests.TakeWhile_GeneratesInterceptor.verified.txt index 7d43b04..e04edf5 100644 --- a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/SingleLambdaQueryableTests.TakeWhile_GeneratesInterceptor.verified.txt +++ b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/SingleLambdaQueryableTests.TakeWhile_GeneratesInterceptor.verified.txt @@ -6,8 +6,8 @@ namespace ExpressiveSharp.Generated.Interceptors internal static class PolyfillInterceptors { [global::System.Runtime.CompilerServices.InterceptsLocationAttribute(/* scrubbed */)] - internal static global::ExpressiveSharp.IRewritableQueryable __Polyfill_TakeWhile_0( - this global::ExpressiveSharp.IRewritableQueryable source, + internal static global::ExpressiveSharp.IExpressiveQueryable __Polyfill_TakeWhile_0( + this global::ExpressiveSharp.IExpressiveQueryable source, global::System.Func __func) { // Source: o => o.Active diff --git a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/SingleLambdaQueryableTests.ThenByDescending_GeneratesInterceptor.verified.txt b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/SingleLambdaQueryableTests.ThenByDescending_GeneratesInterceptor.verified.txt index ac1db13..ec51841 100644 --- a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/SingleLambdaQueryableTests.ThenByDescending_GeneratesInterceptor.verified.txt +++ b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/SingleLambdaQueryableTests.ThenByDescending_GeneratesInterceptor.verified.txt @@ -6,8 +6,8 @@ namespace ExpressiveSharp.Generated.Interceptors internal static class PolyfillInterceptors { [global::System.Runtime.CompilerServices.InterceptsLocationAttribute(/* scrubbed */)] - internal static global::ExpressiveSharp.IRewritableQueryable __Polyfill_ThenByDescending_0( - this global::ExpressiveSharp.IRewritableQueryable source, + internal static global::ExpressiveSharp.IExpressiveQueryable __Polyfill_ThenByDescending_0( + this global::ExpressiveSharp.IExpressiveQueryable source, global::System.Func __func) { // Source: o => o.Tag @@ -20,8 +20,8 @@ namespace ExpressiveSharp.Generated.Interceptors __lambda)); } [global::System.Runtime.CompilerServices.InterceptsLocationAttribute(/* scrubbed */)] - internal static global::ExpressiveSharp.IRewritableQueryable __Polyfill_OrderBy_1( - this global::ExpressiveSharp.IRewritableQueryable source, + internal static global::ExpressiveSharp.IExpressiveQueryable __Polyfill_OrderBy_1( + this global::ExpressiveSharp.IExpressiveQueryable source, global::System.Func __func) { // Source: o => o.Amount diff --git a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/WhereTests.ChainedWhereAndSelect_GeneratesTwoInterceptors.verified.txt b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/WhereTests.ChainedWhereAndSelect_GeneratesTwoInterceptors.verified.txt index 32f6b28..6dde481 100644 --- a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/WhereTests.ChainedWhereAndSelect_GeneratesTwoInterceptors.verified.txt +++ b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/WhereTests.ChainedWhereAndSelect_GeneratesTwoInterceptors.verified.txt @@ -6,8 +6,8 @@ namespace ExpressiveSharp.Generated.Interceptors internal static class PolyfillInterceptors { [global::System.Runtime.CompilerServices.InterceptsLocationAttribute(/* scrubbed */)] - internal static global::ExpressiveSharp.IRewritableQueryable __Polyfill_Select_0( - this global::ExpressiveSharp.IRewritableQueryable source, + internal static global::ExpressiveSharp.IExpressiveQueryable __Polyfill_Select_0( + this global::ExpressiveSharp.IExpressiveQueryable source, global::System.Func __func) { // Source: o => o.Name @@ -20,8 +20,8 @@ namespace ExpressiveSharp.Generated.Interceptors __lambda)); } [global::System.Runtime.CompilerServices.InterceptsLocationAttribute(/* scrubbed */)] - internal static global::ExpressiveSharp.IRewritableQueryable __Polyfill_Where_1( - this global::ExpressiveSharp.IRewritableQueryable source, + internal static global::ExpressiveSharp.IExpressiveQueryable __Polyfill_Where_1( + this global::ExpressiveSharp.IExpressiveQueryable source, global::System.Func __func) { // Source: o => o.Tag == "urgent" diff --git a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/WhereTests.Where_CapturedInstanceField_GeneratesClosureAccess.verified.txt b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/WhereTests.Where_CapturedInstanceField_GeneratesClosureAccess.verified.txt index 4207eee..9225f9c 100644 --- a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/WhereTests.Where_CapturedInstanceField_GeneratesClosureAccess.verified.txt +++ b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/WhereTests.Where_CapturedInstanceField_GeneratesClosureAccess.verified.txt @@ -6,8 +6,8 @@ namespace ExpressiveSharp.Generated.Interceptors internal static class PolyfillInterceptors { [global::System.Runtime.CompilerServices.InterceptsLocationAttribute(/* scrubbed */)] - internal static global::ExpressiveSharp.IRewritableQueryable __Polyfill_Where_0( - this global::ExpressiveSharp.IRewritableQueryable source, + internal static global::ExpressiveSharp.IExpressiveQueryable __Polyfill_Where_0( + this global::ExpressiveSharp.IExpressiveQueryable source, global::System.Func __func) { // Source: o => o.Price > _minPrice diff --git a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/WhereTests.Where_CapturedVariable_GeneratesClosureAccess.verified.txt b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/WhereTests.Where_CapturedVariable_GeneratesClosureAccess.verified.txt index 4f86210..4fec14c 100644 --- a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/WhereTests.Where_CapturedVariable_GeneratesClosureAccess.verified.txt +++ b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/WhereTests.Where_CapturedVariable_GeneratesClosureAccess.verified.txt @@ -6,8 +6,8 @@ namespace ExpressiveSharp.Generated.Interceptors internal static class PolyfillInterceptors { [global::System.Runtime.CompilerServices.InterceptsLocationAttribute(/* scrubbed */)] - internal static global::ExpressiveSharp.IRewritableQueryable __Polyfill_Where_0( - this global::ExpressiveSharp.IRewritableQueryable source, + internal static global::ExpressiveSharp.IExpressiveQueryable __Polyfill_Where_0( + this global::ExpressiveSharp.IExpressiveQueryable source, global::System.Func __func) { // Source: o => o.Price > minPrice diff --git a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/WhereTests.Where_SimpleCondition_GeneratesInterceptor.verified.txt b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/WhereTests.Where_SimpleCondition_GeneratesInterceptor.verified.txt index 91ef8d5..64b6345 100644 --- a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/WhereTests.Where_SimpleCondition_GeneratesInterceptor.verified.txt +++ b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/WhereTests.Where_SimpleCondition_GeneratesInterceptor.verified.txt @@ -6,8 +6,8 @@ namespace ExpressiveSharp.Generated.Interceptors internal static class PolyfillInterceptors { [global::System.Runtime.CompilerServices.InterceptsLocationAttribute(/* scrubbed */)] - internal static global::ExpressiveSharp.IRewritableQueryable __Polyfill_Where_0( - this global::ExpressiveSharp.IRewritableQueryable source, + internal static global::ExpressiveSharp.IExpressiveQueryable __Polyfill_Where_0( + this global::ExpressiveSharp.IExpressiveQueryable source, global::System.Func __func) { // Source: o => o.Tag == "urgent" diff --git a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ZipTests.Zip_WithResultSelector_GeneratesInterceptor.verified.txt b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ZipTests.Zip_WithResultSelector_GeneratesInterceptor.verified.txt index fc0253f..58b5f62 100644 --- a/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ZipTests.Zip_WithResultSelector_GeneratesInterceptor.verified.txt +++ b/tests/ExpressiveSharp.Generator.Tests/PolyfillInterceptorGenerator/ZipTests.Zip_WithResultSelector_GeneratesInterceptor.verified.txt @@ -6,8 +6,8 @@ namespace ExpressiveSharp.Generated.Interceptors internal static class PolyfillInterceptors { [global::System.Runtime.CompilerServices.InterceptsLocationAttribute(/* scrubbed */)] - internal static global::ExpressiveSharp.IRewritableQueryable __Polyfill_Zip_0( - this global::ExpressiveSharp.IRewritableQueryable source, + internal static global::ExpressiveSharp.IExpressiveQueryable __Polyfill_Zip_0( + this global::ExpressiveSharp.IExpressiveQueryable source, global::System.Collections.Generic.IEnumerable second, global::System.Func __func) { diff --git a/tests/ExpressiveSharp.Tests/Extensions/ExpressiveQueryableExtensionsTests.cs b/tests/ExpressiveSharp.Tests/Extensions/ExpressiveQueryableExtensionsTests.cs index 653d599..1404b92 100644 --- a/tests/ExpressiveSharp.Tests/Extensions/ExpressiveQueryableExtensionsTests.cs +++ b/tests/ExpressiveSharp.Tests/Extensions/ExpressiveQueryableExtensionsTests.cs @@ -6,13 +6,13 @@ namespace ExpressiveSharp.Tests.Extensions; public class ExpressiveQueryableExtensionsTests { [TestMethod] - public void AsExpressive_WrapsAsRewritableQueryable() + public void AsExpressive_WrapsAsExpressiveQueryable() { var source = new[] { 1, 2, 3 }.AsQueryable(); var result = source.AsExpressive(); - Assert.IsInstanceOfType>(result); + Assert.IsInstanceOfType>(result); } [TestMethod] diff --git a/tests/ExpressiveSharp.Tests/Extensions/ExpressiveQueryableLinqExtensionsTests.cs b/tests/ExpressiveSharp.Tests/Extensions/ExpressiveQueryableLinqExtensionsTests.cs new file mode 100644 index 0000000..3fba536 --- /dev/null +++ b/tests/ExpressiveSharp.Tests/Extensions/ExpressiveQueryableLinqExtensionsTests.cs @@ -0,0 +1,108 @@ +using ExpressiveSharp.Extensions; + +namespace ExpressiveSharp.Tests.Extensions; + +[TestClass] +public class ExpressiveQueryableLinqExtensionsTests +{ + private IExpressiveQueryable CreateExpressiveSource() + => new[] { 1, 2, 3 }.AsQueryable().AsExpressive(); + + [TestMethod] + public void Take_PreservesExpressiveQueryable() + { + var source = CreateExpressiveSource(); + var result = source.Take(2); + Assert.IsInstanceOfType>(result); + } + + [TestMethod] + public void Skip_PreservesExpressiveQueryable() + { + var source = CreateExpressiveSource(); + var result = source.Skip(1); + Assert.IsInstanceOfType>(result); + } + + [TestMethod] + public void Distinct_PreservesExpressiveQueryable() + { + var source = CreateExpressiveSource(); + var result = source.Distinct(); + Assert.IsInstanceOfType>(result); + } + + [TestMethod] + public void Reverse_PreservesExpressiveQueryable() + { + var source = CreateExpressiveSource(); + var result = source.Reverse(); + Assert.IsInstanceOfType>(result); + } + + [TestMethod] + public void Concat_PreservesExpressiveQueryable() + { + var source = CreateExpressiveSource(); + var result = source.Concat(new[] { 4, 5 }); + Assert.IsInstanceOfType>(result); + } + + [TestMethod] + public void Union_PreservesExpressiveQueryable() + { + var source = CreateExpressiveSource(); + var result = source.Union(new[] { 3, 4 }); + Assert.IsInstanceOfType>(result); + } + + [TestMethod] + public void Intersect_PreservesExpressiveQueryable() + { + var source = CreateExpressiveSource(); + var result = source.Intersect(new[] { 2, 3 }); + Assert.IsInstanceOfType>(result); + } + + [TestMethod] + public void Except_PreservesExpressiveQueryable() + { + var source = CreateExpressiveSource(); + var result = source.Except(new[] { 1 }); + Assert.IsInstanceOfType>(result); + } + + [TestMethod] + public void DefaultIfEmpty_PreservesExpressiveQueryable() + { + var source = new string[0].AsQueryable().AsExpressive(); + var result = source.DefaultIfEmpty(); + Assert.IsInstanceOfType>(result); + } + + [TestMethod] + public void DefaultIfEmpty_WithValue_PreservesExpressiveQueryable() + { + var source = new int[0].AsQueryable().AsExpressive(); + var result = source.DefaultIfEmpty(42); + Assert.IsInstanceOfType>(result); + } + + [TestMethod] + public void ChainedPassthrough_PreservesExpressiveQueryable() + { + var source = CreateExpressiveSource(); + var result = source.Take(10).Skip(1).Distinct(); + Assert.IsInstanceOfType>(result); + } + +#if NET9_0_OR_GREATER + [TestMethod] + public void Index_PreservesExpressiveQueryable() + { + var source = CreateExpressiveSource(); + var result = source.Index(); + Assert.IsInstanceOfType>(result); + } +#endif +} diff --git a/tests/ExpressiveSharp.Tests/Extensions/RewritableQueryableLinqExtensionsTests.cs b/tests/ExpressiveSharp.Tests/Extensions/RewritableQueryableLinqExtensionsTests.cs deleted file mode 100644 index 0d086a5..0000000 --- a/tests/ExpressiveSharp.Tests/Extensions/RewritableQueryableLinqExtensionsTests.cs +++ /dev/null @@ -1,108 +0,0 @@ -using ExpressiveSharp.Extensions; - -namespace ExpressiveSharp.Tests.Extensions; - -[TestClass] -public class RewritableQueryableLinqExtensionsTests -{ - private IRewritableQueryable CreateRewritableSource() - => new[] { 1, 2, 3 }.AsQueryable().AsExpressive(); - - [TestMethod] - public void Take_PreservesRewritableQueryable() - { - var source = CreateRewritableSource(); - var result = source.Take(2); - Assert.IsInstanceOfType>(result); - } - - [TestMethod] - public void Skip_PreservesRewritableQueryable() - { - var source = CreateRewritableSource(); - var result = source.Skip(1); - Assert.IsInstanceOfType>(result); - } - - [TestMethod] - public void Distinct_PreservesRewritableQueryable() - { - var source = CreateRewritableSource(); - var result = source.Distinct(); - Assert.IsInstanceOfType>(result); - } - - [TestMethod] - public void Reverse_PreservesRewritableQueryable() - { - var source = CreateRewritableSource(); - var result = source.Reverse(); - Assert.IsInstanceOfType>(result); - } - - [TestMethod] - public void Concat_PreservesRewritableQueryable() - { - var source = CreateRewritableSource(); - var result = source.Concat(new[] { 4, 5 }); - Assert.IsInstanceOfType>(result); - } - - [TestMethod] - public void Union_PreservesRewritableQueryable() - { - var source = CreateRewritableSource(); - var result = source.Union(new[] { 3, 4 }); - Assert.IsInstanceOfType>(result); - } - - [TestMethod] - public void Intersect_PreservesRewritableQueryable() - { - var source = CreateRewritableSource(); - var result = source.Intersect(new[] { 2, 3 }); - Assert.IsInstanceOfType>(result); - } - - [TestMethod] - public void Except_PreservesRewritableQueryable() - { - var source = CreateRewritableSource(); - var result = source.Except(new[] { 1 }); - Assert.IsInstanceOfType>(result); - } - - [TestMethod] - public void DefaultIfEmpty_PreservesRewritableQueryable() - { - var source = new string[0].AsQueryable().AsExpressive(); - var result = source.DefaultIfEmpty(); - Assert.IsInstanceOfType>(result); - } - - [TestMethod] - public void DefaultIfEmpty_WithValue_PreservesRewritableQueryable() - { - var source = new int[0].AsQueryable().AsExpressive(); - var result = source.DefaultIfEmpty(42); - Assert.IsInstanceOfType>(result); - } - - [TestMethod] - public void ChainedPassthrough_PreservesRewritableQueryable() - { - var source = CreateRewritableSource(); - var result = source.Take(10).Skip(1).Distinct(); - Assert.IsInstanceOfType>(result); - } - -#if NET9_0_OR_GREATER - [TestMethod] - public void Index_PreservesRewritableQueryable() - { - var source = CreateRewritableSource(); - var result = source.Index(); - Assert.IsInstanceOfType>(result); - } -#endif -}