From 524154e104fa3fdbf88929e3ea32e9276c1cfa03 Mon Sep 17 00:00:00 2001 From: John Lambert Date: Tue, 13 Feb 2024 15:24:19 -0500 Subject: [PATCH] Add more syntax checks. --- .editorconfig | 39 +++++++++++++++++++ .../Services/ClearMLAuthenticationService.cs | 7 ++++ .../Services/InMemoryStorage.cs | 1 + .../Services/S3FileStorage.cs | 7 ++++ .../Services/S3WriteStream.cs | 2 + .../SmtTransferEngineCommitService.cs | 7 ++++ .../Services/SmtTransferEngineState.cs | 6 ++- .../Utils/AsyncTimer.cs | 2 + src/SIL.Machine.Tool/ConsoleProgressBar.cs | 2 + src/SIL.Machine.Tool/Program.cs | 2 + .../Services/NmtEngineServiceTests.cs | 2 + .../Services/SmtTransferEngineServiceTests.cs | 2 + .../HermitCrabTestBase.cs | 2 + 13 files changed, 80 insertions(+), 1 deletion(-) diff --git a/.editorconfig b/.editorconfig index debed79b9..3ff085900 100644 --- a/.editorconfig +++ b/.editorconfig @@ -145,6 +145,9 @@ dotnet_diagnostic.CA1305.severity = warning # CA1507: Use nameof to express symbol names dotnet_diagnostic.CA1507.severity = warning +# CA1708: Identifiers should differ by more than case +dotnet_diagnostic.CA1708.severity = warning + # CA1510: Use ArgumentNullException throw helper dotnet_diagnostic.CA1510.severity = warning @@ -157,6 +160,15 @@ dotnet_diagnostic.CA1512.severity = warning # CA1513: Use ObjectDisposedException throw helper dotnet_diagnostic.CA1513.severity = warning +# CA1715: Identifiers should have correct prefix +dotnet_diagnostic.CA1715.severity = warning + +# CA1720: Identifiers should not contain type names +dotnet_diagnostic.CA1720.severity = warning + +# CA1724: Type Names Should Not Match Namespaces +dotnet_diagnostic.CA1724.severity = warning + # CA1725: Parameter names should match base declaration dotnet_diagnostic.CA1725.severity = warning @@ -402,6 +414,33 @@ dotnet_diagnostic.CA1050.severity = warning # CA1816: Call GC.SuppressFinalize correctly dotnet_diagnostic.CA1816.severity = warning +# CA1801: Review unused parameters +dotnet_diagnostic.CA1801.severity = warning + +# CA2200: Rethrow to preserve stack details +dotnet_diagnostic.CA2200.severity = warning + +# CA2211: Non-constant fields should not be visible +dotnet_diagnostic.CA2211.severity = warning + +# CA2213: Disposable fields should be disposed +dotnet_diagnostic.CA2213.severity = warning + +# CA2214: Do not call overridable methods in constructors +dotnet_diagnostic.CA2214.severity = warning + +# CA2215: Dispose methods should call base class dispose +dotnet_diagnostic.CA2215.severity = warning + +# CA2216: Disposable types should declare finalizer +dotnet_diagnostic.CA2216.severity = warning + +# CA2218: Override GetHashCode on overriding Equals +dotnet_diagnostic.CA2218.severity = warning + +# CA2219: Do not raise exceptions in exception clauses +dotnet_diagnostic.CA2219.severity = warning + # NUnit2046 Use Has.Length/Has.Count/Is.Empty instead of testing property directly dotnet_diagnostic.NUnit2046.severity = warning diff --git a/src/SIL.Machine.AspNetCore/Services/ClearMLAuthenticationService.cs b/src/SIL.Machine.AspNetCore/Services/ClearMLAuthenticationService.cs index 2b29ebfa8..65f75a210 100644 --- a/src/SIL.Machine.AspNetCore/Services/ClearMLAuthenticationService.cs +++ b/src/SIL.Machine.AspNetCore/Services/ClearMLAuthenticationService.cs @@ -74,4 +74,11 @@ private async Task AuthorizeAsync(CancellationToken cancellationToken) _authToken = refreshedToken; _logger.LogInformation("ClearML Authentication Token Refresh Successful."); } + + public override void Dispose() + { + _httpClient.Dispose(); + base.Dispose(); + GC.SuppressFinalize(this); + } } diff --git a/src/SIL.Machine.AspNetCore/Services/InMemoryStorage.cs b/src/SIL.Machine.AspNetCore/Services/InMemoryStorage.cs index b2a6a0418..4ec0dbc0c 100644 --- a/src/SIL.Machine.AspNetCore/Services/InMemoryStorage.cs +++ b/src/SIL.Machine.AspNetCore/Services/InMemoryStorage.cs @@ -42,6 +42,7 @@ public Entry(Entry other) protected override void Dispose(bool disposing) { _parent._memoryStreams[Path] = new Entry(this); + base.Dispose(disposing); } public override void Flush() diff --git a/src/SIL.Machine.AspNetCore/Services/S3FileStorage.cs b/src/SIL.Machine.AspNetCore/Services/S3FileStorage.cs index 176831406..3fe800475 100644 --- a/src/SIL.Machine.AspNetCore/Services/S3FileStorage.cs +++ b/src/SIL.Machine.AspNetCore/Services/S3FileStorage.cs @@ -4,7 +4,9 @@ namespace SIL.Machine.AspNetCore.Services; public class S3FileStorage : DisposableBase, IFileStorage { +#pragma warning disable CA2213 // Disposed in DisposeManagedResources private readonly AmazonS3Client _client; +#pragma warning restore CA2213 private readonly string _bucketName; private readonly string _basePath; private readonly ILoggerFactory _loggerFactory; @@ -119,4 +121,9 @@ public async Task DeleteAsync(string path, bool recurse = false, CancellationTok $"Received status code {response.HttpStatusCode} when attempting to delete {path}" ); } + + protected override void DisposeManagedResources() + { + _client?.Dispose(); + } } diff --git a/src/SIL.Machine.AspNetCore/Services/S3WriteStream.cs b/src/SIL.Machine.AspNetCore/Services/S3WriteStream.cs index c3a783810..10da171ab 100644 --- a/src/SIL.Machine.AspNetCore/Services/S3WriteStream.cs +++ b/src/SIL.Machine.AspNetCore/Services/S3WriteStream.cs @@ -142,6 +142,7 @@ protected override void Dispose(bool disposing) } } } + _client.Dispose(); base.Dispose(disposing); } @@ -189,6 +190,7 @@ public override async ValueTask DisposeAsync() { await AbortAsync(e); } + await base.DisposeAsync(); } private async Task AbortAsync(Exception? e = null) diff --git a/src/SIL.Machine.AspNetCore/Services/SmtTransferEngineCommitService.cs b/src/SIL.Machine.AspNetCore/Services/SmtTransferEngineCommitService.cs index 86abcc971..acee38f36 100644 --- a/src/SIL.Machine.AspNetCore/Services/SmtTransferEngineCommitService.cs +++ b/src/SIL.Machine.AspNetCore/Services/SmtTransferEngineCommitService.cs @@ -38,4 +38,11 @@ await _stateService.CommitAsync( _logger.LogError(e, "Error occurred while committing SMT transfer engines."); } } + + public override void Dispose() + { + _stateService.Dispose(); + base.Dispose(); + GC.SuppressFinalize(this); + } } diff --git a/src/SIL.Machine.AspNetCore/Services/SmtTransferEngineState.cs b/src/SIL.Machine.AspNetCore/Services/SmtTransferEngineState.cs index 4a21ede86..842e5504b 100644 --- a/src/SIL.Machine.AspNetCore/Services/SmtTransferEngineState.cs +++ b/src/SIL.Machine.AspNetCore/Services/SmtTransferEngineState.cs @@ -12,8 +12,10 @@ string engineId private readonly ITruecaserFactory _truecaserFactory = truecaserFactory; private readonly AsyncLock _lock = new(); +#pragma warning disable CA2213 // Disposed in UnloadAsync private IInteractiveTranslationModel? _smtModel; private HybridTranslationEngine? _hybridEngine; +#pragma warning restore CA2213 public string EngineId { get; } = engineId; @@ -107,9 +109,11 @@ private async Task UnloadAsync(CancellationToken cancellationToken = default) await SaveModelAsync(cancellationToken); _hybridEngine.Dispose(); + _hybridEngine = null; + _smtModel?.Dispose(); _smtModel = null; - _hybridEngine = null; + CurrentBuildRevision = -1; } diff --git a/src/SIL.Machine.AspNetCore/Utils/AsyncTimer.cs b/src/SIL.Machine.AspNetCore/Utils/AsyncTimer.cs index 57d62bcbe..31e452abb 100644 --- a/src/SIL.Machine.AspNetCore/Utils/AsyncTimer.cs +++ b/src/SIL.Machine.AspNetCore/Utils/AsyncTimer.cs @@ -2,7 +2,9 @@ public class AsyncTimer : AsyncDisposableBase { +#pragma warning disable CA2213 // Disposed in DisposeManagedResources private readonly Timer _timer; +#pragma warning restore CA2213 private readonly Func _callback; private readonly AsyncLock _lock; private bool _running; diff --git a/src/SIL.Machine.Tool/ConsoleProgressBar.cs b/src/SIL.Machine.Tool/ConsoleProgressBar.cs index 52df0b8ed..8e504eec4 100644 --- a/src/SIL.Machine.Tool/ConsoleProgressBar.cs +++ b/src/SIL.Machine.Tool/ConsoleProgressBar.cs @@ -103,6 +103,8 @@ public void Dispose() { _disposed = true; UpdateText(string.Empty); + _timer.Dispose(); + _outWriter.Dispose(); } } } diff --git a/src/SIL.Machine.Tool/Program.cs b/src/SIL.Machine.Tool/Program.cs index 0395fd5cb..75cb71e51 100644 --- a/src/SIL.Machine.Tool/Program.cs +++ b/src/SIL.Machine.Tool/Program.cs @@ -2,7 +2,9 @@ namespace SIL.Machine; +#pragma warning disable CA1724 // Type Names Should Not Match Namespaces - SIL.Program. Ignore. public class Program +#pragma warning restore CA1724 { public static Task Main(string[] args) { diff --git a/tests/SIL.Machine.AspNetCore.Tests/Services/NmtEngineServiceTests.cs b/tests/SIL.Machine.AspNetCore.Tests/Services/NmtEngineServiceTests.cs index 4f5a57f08..166ce59d0 100644 --- a/tests/SIL.Machine.AspNetCore.Tests/Services/NmtEngineServiceTests.cs +++ b/tests/SIL.Machine.AspNetCore.Tests/Services/NmtEngineServiceTests.cs @@ -93,7 +93,9 @@ private class TestEnvironment : DisposableBase { private readonly Hangfire.InMemory.InMemoryStorage _memoryStorage; private readonly BackgroundJobClient _jobClient; +#pragma warning disable CA2213 // Disposed in DisposeManagedResources private BackgroundJobServer _jobServer; +#pragma warning restore CA2213 private readonly IDistributedReaderWriterLockFactory _lockFactory; public TestEnvironment() diff --git a/tests/SIL.Machine.AspNetCore.Tests/Services/SmtTransferEngineServiceTests.cs b/tests/SIL.Machine.AspNetCore.Tests/Services/SmtTransferEngineServiceTests.cs index 269cf8696..9caa678fa 100644 --- a/tests/SIL.Machine.AspNetCore.Tests/Services/SmtTransferEngineServiceTests.cs +++ b/tests/SIL.Machine.AspNetCore.Tests/Services/SmtTransferEngineServiceTests.cs @@ -219,7 +219,9 @@ private class TestEnvironment : DisposableBase { private readonly Hangfire.InMemory.InMemoryStorage _memoryStorage; private readonly BackgroundJobClient _jobClient; +#pragma warning disable CA2213 // Disposed properly in DisposeManagedResources private BackgroundJobServer _jobServer; +#pragma warning restore CA2213 private readonly ITruecaserFactory _truecaserFactory; private readonly IDistributedReaderWriterLockFactory _lockFactory; private readonly IBuildJobService _buildJobService; diff --git a/tests/SIL.Machine.Morphology.HermitCrab.Tests/HermitCrabTestBase.cs b/tests/SIL.Machine.Morphology.HermitCrab.Tests/HermitCrabTestBase.cs index 52ac99baf..2d340be9c 100644 --- a/tests/SIL.Machine.Morphology.HermitCrab.Tests/HermitCrabTestBase.cs +++ b/tests/SIL.Machine.Morphology.HermitCrab.Tests/HermitCrabTestBase.cs @@ -900,7 +900,9 @@ private static void AddBdryDef(CharacterDefinitionTable table, string strRep) table.AddBoundary(strRep); } +#pragma warning disable CA1720 // Identifier contains type name - legacy protected FeatureStruct Char(CharacterDefinitionTable table, string strRep) +#pragma warning restore CA1720 { return table[strRep].FeatureStruct; }