Add Jellyfin.CodeAnalysis and analyzers to all projects

Integrated Jellyfin.CodeAnalysis as a project reference across core and test projects. Added centrally managed code analysis and style enforcement packages (IDisposableAnalyzers, Microsoft.CodeAnalysis.BannedApiAnalyzers, SerilogAnalyzer, SmartAnalyzers.MultithreadingAnalyzer, StyleCop.Analyzers) to all affected projects. Updated dependency graphs, asset files, and build scripts to ensure analyzers run during builds, enforcing consistent code quality and style rules throughout the codebase. Removed custom warning properties to rely on analyzer enforcement.
This commit is contained in:
2026-02-23 07:03:54 -05:00
parent 8d39eb77e6
commit ede6904433
181 changed files with 22265 additions and 526 deletions
@@ -74,6 +74,9 @@
}
}
},
"IDisposableAnalyzers/4.0.8": {
"type": "package"
},
"J2N/2.0.0": {
"type": "package",
"compile": {
@@ -108,6 +111,13 @@
}
}
},
"Microsoft.CodeAnalysis.BannedApiAnalyzers/4.14.0": {
"type": "package",
"build": {
"buildTransitive/Microsoft.CodeAnalysis.BannedApiAnalyzers.props": {},
"buildTransitive/Microsoft.CodeAnalysis.BannedApiAnalyzers.targets": {}
}
},
"Microsoft.Data.Sqlite.Core/11.0.0-preview.1.26104.118": {
"type": "package",
"dependencies": {
@@ -621,6 +631,12 @@
}
}
},
"SerilogAnalyzer/0.15.0": {
"type": "package"
},
"SmartAnalyzers.MultithreadingAnalyzer/1.1.31": {
"type": "package"
},
"SourceGear.sqlite3/3.50.4.2": {
"type": "package",
"compile": {
@@ -808,6 +824,15 @@
"lib/net5.0/Std.UriTemplate.dll": {}
}
},
"StyleCop.Analyzers/1.2.0-beta.556": {
"type": "package",
"dependencies": {
"StyleCop.Analyzers.Unstable": "1.2.0.556"
}
},
"StyleCop.Analyzers.Unstable/1.2.0.556": {
"type": "package"
},
"Jellyfin.CodeAnalysis/1.0.0": {
"type": "project",
"framework": ".NETStandard,Version=v2.0",
@@ -825,7 +850,9 @@
"type": "project",
"framework": ".NETCoreApp,Version=v11.0",
"dependencies": {
"Jellyfin.Model": "10.12.0"
"Jellyfin.CodeAnalysis": "1.0.0",
"Jellyfin.Model": "10.12.0",
"Jellyfin.Sdk": "2025.10.21"
},
"compile": {
"bin/placeholder/Jellyfin.Common.dll": {}
@@ -842,6 +869,7 @@
"framework": ".NETCoreApp,Version=v11.0",
"dependencies": {
"BitFaster.Caching": "2.5.4",
"Jellyfin.CodeAnalysis": "1.0.0",
"Jellyfin.Common": "10.12.0",
"Jellyfin.MediaEncoding.Keyframes": "10.11.0",
"Jellyfin.Model": "10.12.0",
@@ -860,7 +888,9 @@
"type": "project",
"framework": ".NETCoreApp,Version=v11.0",
"dependencies": {
"Jellyfin.CodeAnalysis": "1.0.0",
"Jellyfin.Database.Implementations": "10.11.0",
"Jellyfin.Sdk": "2025.10.21",
"Microsoft.Extensions.Logging": "11.0.0-preview.1.26104.118"
},
"compile": {
@@ -874,6 +904,7 @@
"type": "project",
"framework": ".NETCoreApp,Version=v11.0",
"dependencies": {
"Jellyfin.CodeAnalysis": "1.0.0",
"Microsoft.EntityFrameworkCore.Relational": "11.0.0-preview.1.26104.118",
"Polly": "8.6.5"
},
@@ -888,6 +919,7 @@
"type": "project",
"framework": ".NETCoreApp,Version=v11.0",
"dependencies": {
"Jellyfin.CodeAnalysis": "1.0.0",
"Jellyfin.Common": "10.12.0",
"Jellyfin.Database.Implementations": "10.11.0",
"Microsoft.EntityFrameworkCore": "11.0.0-preview.1.26104.118",
@@ -905,6 +937,7 @@
"type": "project",
"framework": ".NETCoreApp,Version=v11.0",
"dependencies": {
"Jellyfin.CodeAnalysis": "1.0.0",
"Jellyfin.Common": "10.12.0",
"Jellyfin.Database.Implementations": "10.11.0",
"Microsoft.EntityFrameworkCore.Relational": "11.0.0-preview.1.26104.118",
@@ -923,6 +956,7 @@
"dependencies": {
"Diacritics": "4.1.4",
"ICU4N.Transliterator": "60.1.0-alpha.356",
"Jellyfin.CodeAnalysis": "1.0.0",
"Jellyfin.Sdk": "2025.10.21"
},
"compile": {
@@ -951,6 +985,7 @@
"type": "project",
"framework": ".NETCoreApp,Version=v11.0",
"dependencies": {
"Jellyfin.CodeAnalysis": "1.0.0",
"Jellyfin.Data": "10.12.0",
"Jellyfin.Extensions": "10.12.0",
"Jellyfin.Sdk": "2025.10.21"
@@ -969,8 +1004,10 @@
"type": "project",
"framework": ".NETCoreApp,Version=v11.0",
"dependencies": {
"Jellyfin.CodeAnalysis": "1.0.0",
"Jellyfin.Common": "10.12.0",
"Jellyfin.Model": "10.12.0"
"Jellyfin.Model": "10.12.0",
"Jellyfin.Sdk": "2025.10.21"
},
"compile": {
"bin/placeholder/Jellyfin.Naming.dll": {}
@@ -1094,6 +1131,21 @@
"unicode-icon-128x128.jpg"
]
},
"IDisposableAnalyzers/4.0.8": {
"sha512": "vNi4NMG0CcJyjXxiNDcQ21FwV/whM9o9OEZKD+oP7tuxAqFEzX/x5OhC3OZJqW/w+8GOtCmJPBquYgMWgz0rfQ==",
"type": "package",
"path": "idisposableanalyzers/4.0.8",
"hasTools": true,
"files": [
".nupkg.metadata",
".signature.p7s",
"analyzers/dotnet/cs/IDisposableAnalyzers.dll",
"idisposableanalyzers.4.0.8.nupkg.sha512",
"idisposableanalyzers.nuspec",
"tools/install.ps1",
"tools/uninstall.ps1"
]
},
"J2N/2.0.0": {
"sha512": "M5bwDajAARZiyqupU+rHQJnsVLxNBOHJ8vKYHd8LcLIb1FgLfzzcJvc31Qo5Xz/GEHFjDF9ScjKL/ks/zRTXuA==",
"type": "package",
@@ -1141,6 +1193,74 @@
"lib/netstandard2.1/Jellyfin.Sdk.xml"
]
},
"Microsoft.CodeAnalysis.BannedApiAnalyzers/4.14.0": {
"sha512": "gSWJlDWwmDhtbrEJGiHqvEjz9KthIiFD0qYB8zZ6a7z+xpMSPEtM9yTYELSa58iFWYlzSRqP9FXO6KoT3+ZMtg==",
"type": "package",
"path": "microsoft.codeanalysis.bannedapianalyzers/4.14.0",
"hasTools": true,
"files": [
".nupkg.metadata",
".signature.p7s",
"Icon.png",
"ThirdPartyNotices.txt",
"analyzers/dotnet/cs/Microsoft.CodeAnalysis.BannedApiAnalyzers.dll",
"analyzers/dotnet/cs/Microsoft.CodeAnalysis.CSharp.BannedApiAnalyzers.dll",
"analyzers/dotnet/cs/cs/Microsoft.CodeAnalysis.BannedApiAnalyzers.resources.dll",
"analyzers/dotnet/cs/de/Microsoft.CodeAnalysis.BannedApiAnalyzers.resources.dll",
"analyzers/dotnet/cs/es/Microsoft.CodeAnalysis.BannedApiAnalyzers.resources.dll",
"analyzers/dotnet/cs/fr/Microsoft.CodeAnalysis.BannedApiAnalyzers.resources.dll",
"analyzers/dotnet/cs/it/Microsoft.CodeAnalysis.BannedApiAnalyzers.resources.dll",
"analyzers/dotnet/cs/ja/Microsoft.CodeAnalysis.BannedApiAnalyzers.resources.dll",
"analyzers/dotnet/cs/ko/Microsoft.CodeAnalysis.BannedApiAnalyzers.resources.dll",
"analyzers/dotnet/cs/pl/Microsoft.CodeAnalysis.BannedApiAnalyzers.resources.dll",
"analyzers/dotnet/cs/pt-BR/Microsoft.CodeAnalysis.BannedApiAnalyzers.resources.dll",
"analyzers/dotnet/cs/ru/Microsoft.CodeAnalysis.BannedApiAnalyzers.resources.dll",
"analyzers/dotnet/cs/tr/Microsoft.CodeAnalysis.BannedApiAnalyzers.resources.dll",
"analyzers/dotnet/cs/zh-Hans/Microsoft.CodeAnalysis.BannedApiAnalyzers.resources.dll",
"analyzers/dotnet/cs/zh-Hant/Microsoft.CodeAnalysis.BannedApiAnalyzers.resources.dll",
"analyzers/dotnet/vb/Microsoft.CodeAnalysis.BannedApiAnalyzers.dll",
"analyzers/dotnet/vb/Microsoft.CodeAnalysis.VisualBasic.BannedApiAnalyzers.dll",
"analyzers/dotnet/vb/cs/Microsoft.CodeAnalysis.BannedApiAnalyzers.resources.dll",
"analyzers/dotnet/vb/de/Microsoft.CodeAnalysis.BannedApiAnalyzers.resources.dll",
"analyzers/dotnet/vb/es/Microsoft.CodeAnalysis.BannedApiAnalyzers.resources.dll",
"analyzers/dotnet/vb/fr/Microsoft.CodeAnalysis.BannedApiAnalyzers.resources.dll",
"analyzers/dotnet/vb/it/Microsoft.CodeAnalysis.BannedApiAnalyzers.resources.dll",
"analyzers/dotnet/vb/ja/Microsoft.CodeAnalysis.BannedApiAnalyzers.resources.dll",
"analyzers/dotnet/vb/ko/Microsoft.CodeAnalysis.BannedApiAnalyzers.resources.dll",
"analyzers/dotnet/vb/pl/Microsoft.CodeAnalysis.BannedApiAnalyzers.resources.dll",
"analyzers/dotnet/vb/pt-BR/Microsoft.CodeAnalysis.BannedApiAnalyzers.resources.dll",
"analyzers/dotnet/vb/ru/Microsoft.CodeAnalysis.BannedApiAnalyzers.resources.dll",
"analyzers/dotnet/vb/tr/Microsoft.CodeAnalysis.BannedApiAnalyzers.resources.dll",
"analyzers/dotnet/vb/zh-Hans/Microsoft.CodeAnalysis.BannedApiAnalyzers.resources.dll",
"analyzers/dotnet/vb/zh-Hant/Microsoft.CodeAnalysis.BannedApiAnalyzers.resources.dll",
"buildTransitive/Microsoft.CodeAnalysis.BannedApiAnalyzers.props",
"buildTransitive/Microsoft.CodeAnalysis.BannedApiAnalyzers.targets",
"documentation/Microsoft.CodeAnalysis.BannedApiAnalyzers.md",
"documentation/Microsoft.CodeAnalysis.BannedApiAnalyzers.sarif",
"editorconfig/AllRulesDefault/.editorconfig",
"editorconfig/AllRulesDisabled/.editorconfig",
"editorconfig/AllRulesEnabled/.editorconfig",
"editorconfig/ApiDesignRulesDefault/.editorconfig",
"editorconfig/ApiDesignRulesEnabled/.editorconfig",
"editorconfig/DataflowRulesDefault/.editorconfig",
"editorconfig/DataflowRulesEnabled/.editorconfig",
"editorconfig/PortedFromFxCopRulesDefault/.editorconfig",
"editorconfig/PortedFromFxCopRulesEnabled/.editorconfig",
"microsoft.codeanalysis.bannedapianalyzers.4.14.0.nupkg.sha512",
"microsoft.codeanalysis.bannedapianalyzers.nuspec",
"rulesets/AllRulesDefault.ruleset",
"rulesets/AllRulesDisabled.ruleset",
"rulesets/AllRulesEnabled.ruleset",
"rulesets/ApiDesignRulesDefault.ruleset",
"rulesets/ApiDesignRulesEnabled.ruleset",
"rulesets/DataflowRulesDefault.ruleset",
"rulesets/DataflowRulesEnabled.ruleset",
"rulesets/PortedFromFxCopRulesDefault.ruleset",
"rulesets/PortedFromFxCopRulesEnabled.ruleset",
"tools/install.ps1",
"tools/uninstall.ps1"
]
},
"Microsoft.Data.Sqlite.Core/11.0.0-preview.1.26104.118": {
"sha512": "Wq/TlVr4AClalGUro9wS+5qmvPS9zteDo+zc7AOICye0TxgHbdwU46Ux4W0IaLKl5vTj9vXQrTK5t9OM1vJpLQ==",
"type": "package",
@@ -1889,6 +2009,36 @@
"polly.core.nuspec"
]
},
"SerilogAnalyzer/0.15.0": {
"sha512": "sVpwfls4MfNnwIXLSGCgaUnV+c9kgJ8ia6GsyRcpd4Vs3gLogSDtSYBYrre2K2u/PNMo8GgG09RehwVnze70Tw==",
"type": "package",
"path": "seriloganalyzer/0.15.0",
"hasTools": true,
"files": [
".nupkg.metadata",
".signature.p7s",
"analyzers/dotnet/cs/SerilogAnalyzer.dll",
"seriloganalyzer.0.15.0.nupkg.sha512",
"seriloganalyzer.nuspec",
"tools/install.ps1",
"tools/uninstall.ps1"
]
},
"SmartAnalyzers.MultithreadingAnalyzer/1.1.31": {
"sha512": "2f2k7bbhDd132ArglCKpzKoWBcp3uzbIFcb4aosnlqIKlfYKDE2HevBVRNVa+LkWFnjXFFWs47Bo96fu8iS//Q==",
"type": "package",
"path": "smartanalyzers.multithreadinganalyzer/1.1.31",
"hasTools": true,
"files": [
".nupkg.metadata",
".signature.p7s",
"analyzers/dotnet/cs/SmartAnalyzers.MultithreadingAnalyzer.dll",
"smartanalyzers.multithreadinganalyzer.1.1.31.nupkg.sha512",
"smartanalyzers.multithreadinganalyzer.nuspec",
"tools/install.ps1",
"tools/uninstall.ps1"
]
},
"SourceGear.sqlite3/3.50.4.2": {
"sha512": "eV9HwQ88WyoU+reGVxJz1SwME9NbYnl9h2LOY15j0LGdXN4JkTJDk8JRRg/yNgt00O3Cn5/qnska10FEZNoU5g==",
"type": "package",
@@ -2013,6 +2163,45 @@
"std.uritemplate.nuspec"
]
},
"StyleCop.Analyzers/1.2.0-beta.556": {
"sha512": "llRPgmA1fhC0I0QyFLEcjvtM2239QzKr/tcnbsjArLMJxJlu0AA5G7Fft0OI30pHF3MW63Gf4aSSsjc5m82J1Q==",
"type": "package",
"path": "stylecop.analyzers/1.2.0-beta.556",
"files": [
".nupkg.metadata",
".signature.p7s",
"LICENSE",
"THIRD-PARTY-NOTICES.txt",
"stylecop.analyzers.1.2.0-beta.556.nupkg.sha512",
"stylecop.analyzers.nuspec"
]
},
"StyleCop.Analyzers.Unstable/1.2.0.556": {
"sha512": "zvn9Mqs/ox/83cpYPignI8hJEM2A93s2HkHs8HYMOAQW0PkampyoErAiIyKxgTLqbbad29HX/shv/6LGSjPJNQ==",
"type": "package",
"path": "stylecop.analyzers.unstable/1.2.0.556",
"hasTools": true,
"files": [
".nupkg.metadata",
".signature.p7s",
"LICENSE",
"THIRD-PARTY-NOTICES.txt",
"analyzers/dotnet/cs/StyleCop.Analyzers.CodeFixes.dll",
"analyzers/dotnet/cs/StyleCop.Analyzers.dll",
"analyzers/dotnet/cs/de-DE/StyleCop.Analyzers.resources.dll",
"analyzers/dotnet/cs/en-GB/StyleCop.Analyzers.resources.dll",
"analyzers/dotnet/cs/es-MX/StyleCop.Analyzers.resources.dll",
"analyzers/dotnet/cs/fr-FR/StyleCop.Analyzers.resources.dll",
"analyzers/dotnet/cs/pl-PL/StyleCop.Analyzers.resources.dll",
"analyzers/dotnet/cs/pt-BR/StyleCop.Analyzers.resources.dll",
"analyzers/dotnet/cs/ru-RU/StyleCop.Analyzers.resources.dll",
"rulesets/StyleCopAnalyzersDefault.ruleset",
"stylecop.analyzers.unstable.1.2.0.556.nupkg.sha512",
"stylecop.analyzers.unstable.nuspec",
"tools/install.ps1",
"tools/uninstall.ps1"
]
},
"Jellyfin.CodeAnalysis/1.0.0": {
"type": "project",
"path": "../src/Jellyfin.CodeAnalysis/Jellyfin.CodeAnalysis.csproj",
@@ -2072,13 +2261,20 @@
"projectFileDependencyGroups": {
"net11.0": [
"AsyncKeyedLock >= 8.0.2",
"IDisposableAnalyzers >= 4.0.8",
"Jellyfin.CodeAnalysis >= 1.0.0",
"Jellyfin.Controller >= 10.12.0",
"Jellyfin.Data >= 10.12.0",
"Jellyfin.Database.Implementations >= 10.11.0",
"Jellyfin.Database.Providers.Postgres >= 1.0.0",
"Jellyfin.Database.Providers.Sqlite >= 1.0.0",
"Jellyfin.Model >= 10.12.0",
"Microsoft.EntityFrameworkCore.Relational >= 11.0.0-preview.1.26104.118"
"Jellyfin.Sdk >= 2025.10.21",
"Microsoft.CodeAnalysis.BannedApiAnalyzers >= 4.14.0",
"Microsoft.EntityFrameworkCore.Relational >= 11.0.0-preview.1.26104.118",
"SerilogAnalyzer >= 0.15.0",
"SmartAnalyzers.MultithreadingAnalyzer >= 1.1.31",
"StyleCop.Analyzers >= 1.2.0-beta.556"
]
},
"packageFolders": {
@@ -2124,6 +2320,9 @@
"E:\\Projects\\pgsql-jellyfin\\MediaBrowser.Model\\MediaBrowser.Model.csproj": {
"projectPath": "E:\\Projects\\pgsql-jellyfin\\MediaBrowser.Model\\MediaBrowser.Model.csproj"
},
"E:\\Projects\\pgsql-jellyfin\\src\\Jellyfin.CodeAnalysis\\Jellyfin.CodeAnalysis.csproj": {
"projectPath": "E:\\Projects\\pgsql-jellyfin\\src\\Jellyfin.CodeAnalysis\\Jellyfin.CodeAnalysis.csproj"
},
"E:\\Projects\\pgsql-jellyfin\\src\\Jellyfin.Database\\Jellyfin.Database.Implementations\\Jellyfin.Database.Implementations.csproj": {
"projectPath": "E:\\Projects\\pgsql-jellyfin\\src\\Jellyfin.Database\\Jellyfin.Database.Implementations\\Jellyfin.Database.Implementations.csproj"
},
@@ -2162,10 +2361,47 @@
"version": "[8.0.2, )",
"versionCentrallyManaged": true
},
"IDisposableAnalyzers": {
"include": "Runtime, Build, Native, ContentFiles, Analyzers",
"suppressParent": "All",
"target": "Package",
"version": "[4.0.8, )",
"versionCentrallyManaged": true
},
"Jellyfin.Sdk": {
"target": "Package",
"version": "[2025.10.21, )",
"versionCentrallyManaged": true
},
"Microsoft.CodeAnalysis.BannedApiAnalyzers": {
"include": "Runtime, Build, Native, ContentFiles, Analyzers",
"suppressParent": "All",
"target": "Package",
"version": "[4.14.0, )",
"versionCentrallyManaged": true
},
"Microsoft.EntityFrameworkCore.Relational": {
"target": "Package",
"version": "[11.0.0-preview.1.26104.118, )",
"versionCentrallyManaged": true
},
"SerilogAnalyzer": {
"suppressParent": "All",
"target": "Package",
"version": "[0.15.0, )",
"versionCentrallyManaged": true
},
"SmartAnalyzers.MultithreadingAnalyzer": {
"suppressParent": "All",
"target": "Package",
"version": "[1.1.31, )",
"versionCentrallyManaged": true
},
"StyleCop.Analyzers": {
"suppressParent": "All",
"target": "Package",
"version": "[1.2.0-beta.556, )",
"versionCentrallyManaged": true
}
},
"centralPackageVersions": {