Type to search pages and rules.

Browse pages

LS2009: Result Part Not Named After Its Result

LS2009 is a compiler check that reports a result part, a type declared beside a use-case result and reached through its properties, whose name does not start with the result name, so a reader cannot tell which result the part belongs to. This page states what the rule reports, where the error sits, and how to name the part after its result.

Markdown

Reference#

What the Rule Enforces#

LS2009 enforces Name result parts after their result (litespec/workspace/naming#name-result-parts-after-their-result). It runs in Application, Infrastructure, and Worker. Its category is LiteSpec.Layers. Severity and enablement follow the Analyzers overview.

What the Rule Reports#

The rule reports a type declared in the same namespace as a {UseCase}QueryResult or {UseCase}CommandResult type, when the result reaches it through a public property, directly or through another part, including as a collection element, and its name does not start with the result name. A helper the handler uses and the result does not reach, such as a page reader or a cursor, is not a part, and the rule ignores it. The diagnostic sits on the type name, and its message names the part and the result it belongs to.

Failing Example#

C#
public sealed record ReadLoanQueryResult(int LoanId, LoanHoldItem[] Holds);

public sealed record LoanHoldItem(int HoldId);

Passing Example#

C#
public sealed record ReadLoanQueryResult(int LoanId, ReadLoanQueryResultHold[] Holds);

public sealed record ReadLoanQueryResultHold(int HoldId);

How to Fix#

Name the part {UseCase}QueryResult{Part} or {UseCase}CommandResult{Part}, starting with the full result name.

Notes#

What the Rule Ignores#

The rule does not report the result itself, a type the result does not reach (the message, handler, validator, definition, or a helper), a nested type, or a type declared where no result is declared. It does not run in Domain or WebApi.