浏览代码

Start adding IDisposableAnalyzers to projects

Bond_009 1 年之前
父节点
当前提交
afc195286f

+ 1 - 0
Directory.Packages.props

@@ -19,6 +19,7 @@
     <PackageVersion Include="DotNet.Glob" Version="3.1.3" />
     <PackageVersion Include="EFCoreSecondLevelCacheInterceptor" Version="3.9.2" />
     <PackageVersion Include="FsCheck.Xunit" Version="2.16.6" />
+    <PackageVersion Include="IDisposableAnalyzers" Version="4.0.7" />
     <PackageVersion Include="Jellyfin.XmlTv" Version="10.8.0" />
     <PackageVersion Include="libse" Version="3.6.13" />
     <PackageVersion Include="LrcParser" Version="2023.524.0" />

+ 14 - 0
jellyfin.ruleset

@@ -173,4 +173,18 @@
     <!-- error on RS0030: Do not used banned APIs -->
     <Rule Id="RS0030" Action="Error" />
   </Rules>
+
+  <Rules AnalyzerId="IDisposableAnalyzers" RuleNamespace="IDisposableAnalyzers.Correctness">
+    <!-- disable warning IDISP001: Dispose created -->
+    <Rule Id="IDISP001" Action="Info" />
+    <!-- TODO: Enable when false positives are fixed -->
+    <!-- disable warning IDISP003: Dispose previous before re-assigning -->
+    <Rule Id="IDISP003" Action="Info" />
+    <!-- disable warning IDISP004: Don't ignore created IDisposable -->
+    <Rule Id="IDISP004" Action="Info" />
+    <!-- disable warning IDISP007: Don't dispose injected -->
+    <Rule Id="IDISP007" Action="Info" />
+    <!-- disable warning IDISP008: Don't assign member with injected and created disposables -->
+    <Rule Id="IDISP008" Action="Info" />
+  </Rules>
 </RuleSet>

+ 5 - 1
src/Jellyfin.Drawing.Skia/Jellyfin.Drawing.Skia.csproj

@@ -31,8 +31,12 @@
     <ProjectReference Include="..\..\MediaBrowser.Common\MediaBrowser.Common.csproj" />
   </ItemGroup>
 
-  <!-- Code analysers-->
+  <!-- Code Analyzers-->
   <ItemGroup Condition=" '$(Configuration)' == 'Debug' ">
+    <PackageReference Include="IDisposableAnalyzers">
+      <PrivateAssets>all</PrivateAssets>
+      <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
+    </PackageReference>
     <PackageReference Include="Microsoft.CodeAnalysis.BannedApiAnalyzers">
       <PrivateAssets>all</PrivateAssets>
       <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>

+ 4 - 3
src/Jellyfin.Drawing.Skia/SkiaEncoder.cs

@@ -122,8 +122,8 @@ public class SkiaEncoder : IImageEncoder
             var svg = new SKSvg();
             try
             {
-                svg.Load(path);
-                return new ImageDimensions(Convert.ToInt32(svg.Picture.CullRect.Width), Convert.ToInt32(svg.Picture.CullRect.Height));
+                using var picture = svg.Load(path);
+                return new ImageDimensions(Convert.ToInt32(picture.CullRect.Width), Convert.ToInt32(picture.CullRect.Height));
             }
             catch (FormatException skiaColorException)
             {
@@ -432,7 +432,8 @@ public class SkiaEncoder : IImageEncoder
 
         // scale image (the FromImage creates a copy)
         var imageInfo = new SKImageInfo(width, height, bitmap.ColorType, bitmap.AlphaType, bitmap.ColorSpace);
-        using var resizedBitmap = SKBitmap.FromImage(ResizeImage(bitmap, imageInfo));
+        using var resizedImage = ResizeImage(bitmap, imageInfo);
+        using var resizedBitmap = SKBitmap.FromImage(resizedImage);
 
         // If all we're doing is resizing then we can stop now
         if (!hasBackgroundColor && !hasForegroundColor && blur == 0 && !hasIndicator)

+ 4 - 4
src/Jellyfin.Drawing.Skia/SkiaHelper.cs

@@ -19,7 +19,6 @@ public static class SkiaHelper
     public static SKBitmap? GetNextValidImage(SkiaEncoder skiaEncoder, IReadOnlyList<string> paths, int currentIndex, out int newIndex)
     {
         var imagesTested = new Dictionary<int, int>();
-        SKBitmap? bitmap = null;
 
         while (imagesTested.Count < paths.Count)
         {
@@ -28,7 +27,7 @@ public static class SkiaHelper
                 currentIndex = 0;
             }
 
-            bitmap = skiaEncoder.Decode(paths[currentIndex], false, null, out _);
+            SKBitmap? bitmap = skiaEncoder.Decode(paths[currentIndex], false, null, out _);
 
             imagesTested[currentIndex] = 0;
 
@@ -36,11 +35,12 @@ public static class SkiaHelper
 
             if (bitmap is not null)
             {
-                break;
+                newIndex = currentIndex;
+                return bitmap;
             }
         }
 
         newIndex = currentIndex;
-        return bitmap;
+        return null;
     }
 }

+ 2 - 2
src/Jellyfin.Drawing.Skia/StripCollageBuilder.cs

@@ -189,12 +189,12 @@ public partial class StripCollageBuilder
 
                 // Scale image. The FromBitmap creates a copy
                 var imageInfo = new SKImageInfo(cellWidth, cellHeight, currentBitmap.ColorType, currentBitmap.AlphaType, currentBitmap.ColorSpace);
-                using var resizedBitmap = SKBitmap.FromImage(SkiaEncoder.ResizeImage(currentBitmap, imageInfo));
+                using var resizeImage = SkiaEncoder.ResizeImage(currentBitmap, imageInfo);
 
                 // draw this image into the strip at the next position
                 var xPos = x * cellWidth;
                 var yPos = y * cellHeight;
-                canvas.DrawBitmap(resizedBitmap, xPos, yPos);
+                canvas.DrawImage(resizeImage, xPos, yPos);
             }
         }
 

+ 5 - 1
src/Jellyfin.Drawing/Jellyfin.Drawing.csproj

@@ -21,8 +21,12 @@
     <Compile Include="..\..\SharedVersion.cs" />
   </ItemGroup>
 
-  <!-- Code analysers-->
+  <!-- Code Analyzers-->
   <ItemGroup Condition=" '$(Configuration)' == 'Debug' ">
+    <PackageReference Include="IDisposableAnalyzers">
+      <PrivateAssets>all</PrivateAssets>
+      <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
+    </PackageReference>
     <PackageReference Include="Microsoft.CodeAnalysis.BannedApiAnalyzers">
       <PrivateAssets>all</PrivateAssets>
       <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>

+ 4 - 0
src/Jellyfin.Extensions/Jellyfin.Extensions.csproj

@@ -34,6 +34,10 @@
 
   <!-- Code Analyzers-->
   <ItemGroup Condition=" '$(Configuration)' == 'Debug' ">
+    <PackageReference Include="IDisposableAnalyzers">
+      <PrivateAssets>all</PrivateAssets>
+      <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
+    </PackageReference>
     <PackageReference Include="Microsoft.CodeAnalysis.BannedApiAnalyzers">
       <PrivateAssets>all</PrivateAssets>
       <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>

+ 4 - 0
src/Jellyfin.MediaEncoding.Hls/Jellyfin.MediaEncoding.Hls.csproj

@@ -7,6 +7,10 @@
 
   <!-- Code Analyzers-->
   <ItemGroup Condition=" '$(Configuration)' == 'Debug' ">
+    <PackageReference Include="IDisposableAnalyzers">
+      <PrivateAssets>all</PrivateAssets>
+      <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
+    </PackageReference>
     <PackageReference Include="Microsoft.CodeAnalysis.BannedApiAnalyzers">
       <PrivateAssets>all</PrivateAssets>
       <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>

+ 4 - 0
src/Jellyfin.MediaEncoding.Keyframes/Jellyfin.MediaEncoding.Keyframes.csproj

@@ -11,6 +11,10 @@
 
   <!-- Code Analyzers-->
   <ItemGroup Condition=" '$(Configuration)' == 'Debug' ">
+    <PackageReference Include="IDisposableAnalyzers">
+      <PrivateAssets>all</PrivateAssets>
+      <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
+    </PackageReference>
     <PackageReference Include="Microsoft.CodeAnalysis.BannedApiAnalyzers">
       <PrivateAssets>all</PrivateAssets>
       <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>