Skip to content

Commit 813d6da

Browse files
committed
Test IDISP005 when IAsyncDisposable
#199
1 parent 95583e3 commit 813d6da

2 files changed

Lines changed: 38 additions & 4 deletions

File tree

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
namespace IDisposableAnalyzers.NetCoreTests.IDISP005ReturnTypeShouldBeIDisposableTests
2+
{
3+
using Gu.Roslyn.Asserts;
4+
using Microsoft.CodeAnalysis;
5+
using Microsoft.CodeAnalysis.Diagnostics;
6+
using NUnit.Framework;
7+
8+
public static class Valid
9+
{
10+
private static readonly DiagnosticAnalyzer Analyzer = new ReturnValueAnalyzer();
11+
private static readonly DiagnosticDescriptor Descriptor = Descriptors.IDISP005ReturnTypeShouldBeIDisposable;
12+
13+
[Test]
14+
public static void LocalDisposeAsync()
15+
{
16+
var code = @"
17+
namespace N
18+
{
19+
using System;
20+
using System.IO;
21+
22+
public class C
23+
{
24+
public IAsyncDisposable M() => File.OpenRead(string.Empty);
25+
}
26+
}";
27+
28+
RoslynAssert.Valid(Analyzer, code);
29+
}
30+
}
31+
}

IDisposableAnalyzers/Analyzers/ReturnValueAnalyzer.cs

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -189,22 +189,25 @@ private static bool IsDisposableReturnTypeOrIgnored(ITypeSymbol? type, Compilati
189189
return true;
190190
}
191191

192+
if (type == KnownSymbol.IAsyncDisposable)
193+
{
194+
return true;
195+
}
196+
192197
if (type == KnownSymbol.IEnumerator)
193198
{
194199
return true;
195200
}
196201

197202
if (type == KnownSymbol.Task)
198203
{
199-
var namedType = type as INamedTypeSymbol;
200-
return namedType?.IsGenericType == true &&
204+
return type is INamedTypeSymbol { IsGenericType: true } namedType &&
201205
Disposable.IsAssignableFrom(namedType.TypeArguments[0], compilation);
202206
}
203207

204208
if (type == KnownSymbol.Func)
205209
{
206-
var namedType = type as INamedTypeSymbol;
207-
return namedType?.IsGenericType == true &&
210+
return type is INamedTypeSymbol { IsGenericType: true } namedType &&
208211
Disposable.IsAssignableFrom(namedType.TypeArguments[namedType.TypeArguments.Length - 1], compilation);
209212
}
210213

0 commit comments

Comments
 (0)