Skip to content

MA0185: Add tests and docs for literal-only interpolated strings#987

Merged
meziantou merged 2 commits intomainfrom
copilot/update-ma0185-diagnostic-rule
Feb 1, 2026
Merged

MA0185: Add tests and docs for literal-only interpolated strings#987
meziantou merged 2 commits intomainfrom
copilot/update-ma0185-diagnostic-rule

Conversation

Copy link
Contributor

Copilot AI commented Feb 1, 2026

MA0185 already detects string.Create(CultureInfo.InvariantCulture, $"literal") with no interpolations, but this wasn't explicitly documented or comprehensively tested.

Changes:

  • Added test coverage for empty ($"") and multi-word literal strings
  • Updated docs to explicitly list "no parameters at all" as a detected case
  • Added example matching the issue scenario

Example:

// Already detected and reported by MA0185
var x = string.Create(CultureInfo.InvariantCulture, $"string without parameters.");

// Suggested fix
var x = $"string without parameters.";

All 11 MA0185 tests pass (2 new, 9 existing).

Warning

Firewall rules blocked me from connecting to one or more addresses (expand for details)

I tried to connect to the following addresses, but was blocked by firewall rules:

  • 1s1vsblobprodcus386.vsblob.vsassets.io
    • Triggering command: /usr/share/dotnet/dotnet dotnet restore --no-dependencies /home/REDACTED/work/Meziantou.Analyzer/Meziantou.Analyzer/Meziantou.Analyzer.slnx --packages /home/REDACTED/work/Meziantou.Analyzer/.codeql-scratch/dbs/csharp/working/packages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal /p:TargetFrameworkRootPath=/home/REDACTED/work/Meziantou.Analyzer/.codeql-scratch/dbs/csharp/working/emptyFakeDotnetRoot /p:NetCoreTargetingPackRoot=/home/REDACTED/work/Meziantou.Analyzer/.codeql-scratch/dbs/csharp/working/emptyFakeDotnetRoot /p:AllowMissingPrunePackageData=true -l t tion.cs cal/bin/grep t lAnalyzer.cs ndor/bin/grep grep (dns block)
  • pdfvsblobprodcus380.vsblob.vsassets.io
    • Triggering command: /usr/share/dotnet/dotnet dotnet restore --no-dependencies /home/REDACTED/work/Meziantou.Analyzer/Meziantou.Analyzer/tests/Meziantou.Analyzer.Test/Meziantou.Analyzer.Test.csproj --packages /home/REDACTED/work/Meziantou.Analyzer/.codeql-scratch/dbs/csharp/working/packages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal /p:TargetFrameworkRootPath=/home/REDACTED/work/Meziantou.Analyzer/.codeql-scratch/dbs/csharp/working/emptyFakeDotnetRoot /p:NetCoreTargetingPackRoot=/home/REDACTED/work/Meziantou.Analyzer/.codeql-scratch/dbs/csharp/working/emptyFakeDotnetRoot /p:AllowMissingPrunePackageData=true -l t tion.cs tnet/tools/grep t s /usr/bin/grep grep (dns block)
  • st8vsblobprodcus339.vsblob.vsassets.io
    • Triggering command: /usr/share/dotnet/dotnet dotnet restore --no-dependencies /home/REDACTED/work/Meziantou.Analyzer/Meziantou.Analyzer/Meziantou.Analyzer.slnx --packages /home/REDACTED/work/Meziantou.Analyzer/.codeql-scratch/dbs/csharp/working/packages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal /p:TargetFrameworkRootPath=/home/REDACTED/work/Meziantou.Analyzer/.codeql-scratch/dbs/csharp/working/emptyFakeDotnetRoot /p:NetCoreTargetingPackRoot=/home/REDACTED/work/Meziantou.Analyzer/.codeql-scratch/dbs/csharp/working/emptyFakeDotnetRoot /p:AllowMissingPrunePackageData=true -l t tion.cs cal/bin/grep t lAnalyzer.cs ndor/bin/grep grep (dns block)
    • Triggering command: /usr/share/dotnet/dotnet dotnet restore --no-dependencies /home/REDACTED/work/Meziantou.Analyzer/Meziantou.Analyzer/tests/Meziantou.Analyzer.Test/Meziantou.Analyzer.Test.csproj --packages /home/REDACTED/work/Meziantou.Analyzer/.codeql-scratch/dbs/csharp/working/packages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal /p:TargetFrameworkRootPath=/home/REDACTED/work/Meziantou.Analyzer/.codeql-scratch/dbs/csharp/working/emptyFakeDotnetRoot /p:NetCoreTargetingPackRoot=/home/REDACTED/work/Meziantou.Analyzer/.codeql-scratch/dbs/csharp/working/emptyFakeDotnetRoot /p:AllowMissingPrunePackageData=true -l t tion.cs tnet/tools/grep t s /usr/bin/grep grep (dns block)

If you need me to access, download, or install something from one of these locations, you can either:

Original prompt

This section details on the original issue you should resolve

<issue_title>Report diagnostic for passing a literal string without parameters as interpolated string argument</issue_title>
<issue_description>There's no analyzer rule (anywhere, that I know of) that reports a diagnostic when a string literal without parameters is passed as value for an argument that is an interpolated string handler.

var x = string.Create(CultureInfo.InvariantCulture, $"string without parameters."); // NOK
var x = string.Create(CultureInfo.InvariantCulture, $"Current time is {DateTime.Now:D}."); // OK
```</issue_description>

<agent_instructions>Can you update MA0185 to detect string.Create with string interpolation that doesn't contains any parts</agent_instructions>

## Comments on the Issue (you are @copilot in this section)

<comments>
</comments>

💬 We'd love your input! Share your thoughts on Copilot coding agent in our 2 minute survey.

…s in MA0185

Co-authored-by: meziantou <509220+meziantou@users.noreply.github.com>
Copilot AI changed the title [WIP] Add diagnostic for interpolated string without parameters MA0185: Add tests and docs for literal-only interpolated strings Feb 1, 2026
Copilot AI requested a review from meziantou February 1, 2026 21:46
@meziantou meziantou marked this pull request as ready for review February 1, 2026 21:55
@meziantou meziantou merged commit a6aad95 into main Feb 1, 2026
13 checks passed
@meziantou meziantou deleted the copilot/update-ma0185-diagnostic-rule branch February 1, 2026 21:55
This was referenced Feb 2, 2026
IhateTrains pushed a commit to ParadoxGameConverters/ImperatorToCK3 that referenced this pull request Feb 5, 2026
Updated
[Meziantou.Analyzer](https://github.com/meziantou/Meziantou.Analyzer)
from 2.0.285 to 2.0.297.

<details>
<summary>Release notes</summary>

_Sourced from [Meziantou.Analyzer's
releases](https://github.com/meziantou/Meziantou.Analyzer/releases)._

## 2.0.297

NuGet package:
<https://www.nuget.org/packages/Meziantou.Analyzer/2.0.297>

## What's Changed
* MA0007: Support multiline pattern-matching expressions by @​Copilot in
meziantou/Meziantou.Analyzer#997


**Full Changelog**:
meziantou/Meziantou.Analyzer@2.0.296...2.0.297

## 2.0.296

NuGet package:
<https://www.nuget.org/packages/Meziantou.Analyzer/2.0.296>

## What's Changed
* Fix MA0185 false-positive for nullable value types by @​Copilot in
meziantou/Meziantou.Analyzer#995


**Full Changelog**:
meziantou/Meziantou.Analyzer@2.0.295...2.0.296

## 2.0.295

NuGet package:
<https://www.nuget.org/packages/Meziantou.Analyzer/2.0.295>

## What's Changed
* Update default TargetFramework and adjust test setups by @​meziantou
in meziantou/Meziantou.Analyzer#993


**Full Changelog**:
meziantou/Meziantou.Analyzer@2.0.294...2.0.295

## 2.0.294

NuGet package:
<https://www.nuget.org/packages/Meziantou.Analyzer/2.0.294>

**Full Changelog**:
meziantou/Meziantou.Analyzer@2.0.293...2.0.294

## 2.0.293

NuGet package:
<https://www.nuget.org/packages/Meziantou.Analyzer/2.0.293>

## What's Changed
* Fix MA0183 false-positive with params array arguments in string.Format
by @​Copilot in meziantou/Meziantou.Analyzer#991


**Full Changelog**:
meziantou/Meziantou.Analyzer@2.0.292...2.0.293

## 2.0.292

NuGet package:
<https://www.nuget.org/packages/Meziantou.Analyzer/2.0.292>

## What's Changed
* Enable MA0184 by default with silent severity by @​Copilot in
meziantou/Meziantou.Analyzer#988


**Full Changelog**:
meziantou/Meziantou.Analyzer@2.0.291...2.0.292

## 2.0.291

NuGet package:
<https://www.nuget.org/packages/Meziantou.Analyzer/2.0.291>

## What's Changed
* MA0185: Add tests and docs for literal-only interpolated strings by
@​Copilot in meziantou/Meziantou.Analyzer#987


**Full Changelog**:
meziantou/Meziantou.Analyzer@2.0.290...2.0.291

## 2.0.290

NuGet package:
<https://www.nuget.org/packages/Meziantou.Analyzer/2.0.290>

## What's Changed
* Add MA0185: Simplify string.Create with culture-invariant parameters
by @​Copilot in meziantou/Meziantou.Analyzer#986


**Full Changelog**:
meziantou/Meziantou.Analyzer@2.0.289...2.0.290

## 2.0.289

NuGet package:
<https://www.nuget.org/packages/Meziantou.Analyzer/2.0.289>

## What's Changed
* Add MA0184: Report interpolated strings without parameters by
@​Copilot in meziantou/Meziantou.Analyzer#984


**Full Changelog**:
meziantou/Meziantou.Analyzer@2.0.288...2.0.289

## 2.0.288

NuGet package:
<https://www.nuget.org/packages/Meziantou.Analyzer/2.0.288>

## What's Changed
* Disable MA0042 async overload suggestions for TemporaryDirectory in
test projects by @​Copilot in
meziantou/Meziantou.Analyzer#980


**Full Changelog**:
meziantou/Meziantou.Analyzer@2.0.287...2.0.288

## 2.0.287

NuGet package:
<https://www.nuget.org/packages/Meziantou.Analyzer/2.0.287>

## What's Changed
* Add MA0183: Detect string.Format without placeholders or formatting
arguments by @​Copilot in
meziantou/Meziantou.Analyzer#979


**Full Changelog**:
meziantou/Meziantou.Analyzer@2.0.286...2.0.287

## 2.0.286

NuGet package:
<https://www.nuget.org/packages/Meziantou.Analyzer/2.0.286>

**Full Changelog**:
meziantou/Meziantou.Analyzer@2.0.285...2.0.286

Commits viewable in [compare
view](meziantou/Meziantou.Analyzer@2.0.285...2.0.297).
</details>

[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=Meziantou.Analyzer&package-manager=nuget&previous-version=2.0.285&new-version=2.0.297)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
This was referenced Feb 5, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Report diagnostic for passing a literal string without parameters as interpolated string argument

2 participants