Skip to content

Conversation

@Shane32
Copy link
Owner

@Shane32 Shane32 commented Oct 3, 2025

Summary by CodeRabbit

  • New Features

    • None; no functional or API changes.
  • Bug Fixes

    • Improved .NET Framework 3.5 compatibility by excluding unsupported automatic imports.
  • Refactor

    • Reduced redundant namespace imports across the codebase to simplify compilation and maintenance.
  • Tests

    • Consolidated test imports at project level and cleaned up redundant test-file imports.
  • Chores

    • Enabled implicit global usings and added project-wide namespace imports for more consistent builds.

@Shane32 Shane32 requested a review from gfoidl October 3, 2025 15:47
@Shane32 Shane32 self-assigned this Oct 3, 2025
@coderabbitai
Copy link
Contributor

coderabbitai bot commented Oct 3, 2025

📝 Walkthrough

Walkthrough

Enables project-level implicit/global usings via Directory.Build.props and adjusts targets for net35; removes many per-file using directives across library, payloads, demos, and tests; adds project-level Using entries for the test project and a single fully-qualified Encoder.Quality reference in PdfByteQRCode.

Changes

Cohort / File(s) Summary
Build configuration
Directory.Build.props, Directory.Build.targets
Enable ImplicitUsings; add global <Using> entries (BitArray alias, System.Globalization, System.Text, System.Text.RegularExpressions); conditionally Using Remove for System.Threading.Tasks when $(TargetFramework) == 'net35'.
Core library & renderers
QRCoder/..., QRCoder.Xaml/XamlQRCode.cs
Removed numerous per-file using directives; added/kept using static QRCoder.QRCodeGenerator in noted files; qualified System.Drawing.Imaging.Encoder.Quality in QRCoder/PdfByteQRCode.cs; no API signature changes.
QRCodeGenerator internals
QRCoder/QRCodeGenerator/*
Removed many using directives across generator components (AlignmentPattern(s), AlphanumericEncoder, CapacityTables, CodewordBlock, GaloisField, ModulePlacer., Point, Polynom, VersionInfo, etc.); retained conditional System.Buffers where present.
Payload generators
QRCoder/PayloadGenerator.cs, QRCoder/PayloadGenerator/*
Removed multiple using directives (System, System.Globalization, Linq, Text, Regex, etc.) from root and individual payload files; no functional/code-path changes.
Exceptions & extensions
QRCoder/Exceptions/DataTooLongException.cs, QRCoder/Extensions/*
Removed unused using directives; no API or logic changes.
Demos & console apps
QRCoderConsole/Program.cs, QRCoderDemo/*, QRCoderDemoUWP/*
Removed unused using directives from demo/console UIs; main logic unchanged.
Tests — per-file removals
QRCoderTests/**/*
Removed per-file using directives (QRCoder, Shouldly, Xunit, System.*) across many tests; test source left unchanged.
Tests — project-level usings
QRCoderTests/QRCoderTests.csproj
Added <ItemGroup> with <Using> entries for QRCoder, QRCoderTests.Helpers, Shouldly, System.Drawing, and Xunit to provide project-wide imports for tests.
API tests
QRCoderApiTests/ApiApprovalTests.cs
Removed using directives (System, System.IO, System.Linq); file content unchanged.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20–25 minutes

Possibly related PRs

Suggested reviewers

  • gfoidl
  • codebude

Pre-merge checks and finishing touches

✅ Passed checks (3 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title Check ✅ Passed The title “Enable implicit usings” succinctly captures the core objective of this pull request, which is to introduce implicit global using support via adjustments to Directory.Build.props and related targets. It is focused, clear, and directly reflects the most significant change without extraneous detail. A reader scanning the PR list will immediately understand the primary intent of these modifications.
Docstring Coverage ✅ Passed No functions found in the changes. Docstring coverage check skipped.
✨ Finishing touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch usings

📜 Recent review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 10378e3 and 9fe64c2.

📒 Files selected for processing (2)
  • Directory.Build.props (2 hunks)
  • Directory.Build.targets (1 hunks)
🚧 Files skipped from review as they are similar to previous changes (2)
  • Directory.Build.props
  • Directory.Build.targets
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (2)
  • GitHub Check: build
  • GitHub Check: additional-tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

🧹 Nitpick comments (1)
QRCoder/PdfByteQRCode.cs (1)

86-86: Simplify to use the existing using directive.

Since System.Drawing.Imaging is already imported at line 2, the fully-qualified reference System.Drawing.Imaging.Encoder.Quality is unnecessary. The original Encoder.Quality should work correctly.

Apply this diff to simplify the reference:

-                Param = new EncoderParameter[] { new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, jpgQuality) }
+                Param = new EncoderParameter[] { new EncoderParameter(Encoder.Quality, jpgQuality) }
📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 84f4906 and 10378e3.

📒 Files selected for processing (89)
  • Directory.Build.props (2 hunks)
  • Directory.Build.targets (1 hunks)
  • QRCoder.Xaml/XamlQRCode.cs (0 hunks)
  • QRCoder/ASCIIQRCode.cs (0 hunks)
  • QRCoder/ArtQRCode.cs (0 hunks)
  • QRCoder/Base64QRCode.cs (0 hunks)
  • QRCoder/BitmapByteQRCode.cs (0 hunks)
  • QRCoder/Exceptions/DataTooLongException.cs (0 hunks)
  • QRCoder/Extensions/BitArrayExtensions.cs (0 hunks)
  • QRCoder/Extensions/StringValueAttribute.cs (0 hunks)
  • QRCoder/PayloadGenerator.cs (0 hunks)
  • QRCoder/PayloadGenerator/BezahlCode.cs (0 hunks)
  • QRCoder/PayloadGenerator/BitcoinLikeCryptoCurrencyAddress.cs (0 hunks)
  • QRCoder/PayloadGenerator/CalendarEvent.cs (0 hunks)
  • QRCoder/PayloadGenerator/ContactData.cs (0 hunks)
  • QRCoder/PayloadGenerator/Girocode.cs (0 hunks)
  • QRCoder/PayloadGenerator/MMS.cs (0 hunks)
  • QRCoder/PayloadGenerator/Mail.cs (0 hunks)
  • QRCoder/PayloadGenerator/MoneroTransaction.cs (0 hunks)
  • QRCoder/PayloadGenerator/OneTimePassword.cs (0 hunks)
  • QRCoder/PayloadGenerator/RussiaPaymentOrder.cs (0 hunks)
  • QRCoder/PayloadGenerator/SMS.cs (0 hunks)
  • QRCoder/PayloadGenerator/ShadowSocksConfig.cs (0 hunks)
  • QRCoder/PayloadGenerator/SlovenianUpnQr.cs (0 hunks)
  • QRCoder/PayloadGenerator/SwissQrCode.cs (0 hunks)
  • QRCoder/PayloadGenerator/Url.cs (0 hunks)
  • QRCoder/PayloadGenerator/WhatsAppMessage.cs (0 hunks)
  • QRCoder/PdfByteQRCode.cs (1 hunks)
  • QRCoder/PngByteQRCode.cs (0 hunks)
  • QRCoder/PostscriptQRCode.cs (0 hunks)
  • QRCoder/QRCode.cs (0 hunks)
  • QRCoder/QRCodeData.cs (0 hunks)
  • QRCoder/QRCodeGenerator.cs (0 hunks)
  • QRCoder/QRCodeGenerator/AlignmentPattern.cs (0 hunks)
  • QRCoder/QRCodeGenerator/AlignmentPatterns.cs (0 hunks)
  • QRCoder/QRCodeGenerator/AlphanumericEncoder.cs (0 hunks)
  • QRCoder/QRCodeGenerator/CapacityTables.cs (0 hunks)
  • QRCoder/QRCodeGenerator/CodewordBlock.cs (0 hunks)
  • QRCoder/QRCodeGenerator/GaloisField.cs (0 hunks)
  • QRCoder/QRCodeGenerator/ModulePlacer.BlockedModules.cs (0 hunks)
  • QRCoder/QRCodeGenerator/ModulePlacer.MaskPattern.cs (0 hunks)
  • QRCoder/QRCodeGenerator/ModulePlacer.cs (0 hunks)
  • QRCoder/QRCodeGenerator/Point.cs (0 hunks)
  • QRCoder/QRCodeGenerator/Polynom.cs (0 hunks)
  • QRCoder/QRCodeGenerator/VersionInfo.cs (0 hunks)
  • QRCoder/QRCodeGenerator/VersionInfoDetails.cs (0 hunks)
  • QRCoder/SvgQRCode.cs (0 hunks)
  • QRCoderApiTests/ApiApprovalTests.cs (0 hunks)
  • QRCoderConsole/Program.cs (0 hunks)
  • QRCoderDemo/Form1.cs (0 hunks)
  • QRCoderDemo/Program.cs (0 hunks)
  • QRCoderDemoUWP/App.xaml.cs (0 hunks)
  • QRCoderDemoUWP/MainPage.xaml.cs (0 hunks)
  • QRCoderTests/ArtQRCodeRendererTests.cs (0 hunks)
  • QRCoderTests/AsciiQRCodeRendererTests.cs (0 hunks)
  • QRCoderTests/Base64QRCodeRendererTests.cs (0 hunks)
  • QRCoderTests/BitmapByteQRCodeRendererTests.cs (0 hunks)
  • QRCoderTests/Helpers/HelperFunctions.cs (0 hunks)
  • QRCoderTests/Helpers/ShouldMatchApprovedBinaryExtensions.cs (0 hunks)
  • QRCoderTests/PayloadGeneratorTests/BezahlCodeTests.cs (0 hunks)
  • QRCoderTests/PayloadGeneratorTests/BitcoinAddressTests.cs (0 hunks)
  • QRCoderTests/PayloadGeneratorTests/BitcoinCashAddressTests.cs (0 hunks)
  • QRCoderTests/PayloadGeneratorTests/BookmarkTests.cs (0 hunks)
  • QRCoderTests/PayloadGeneratorTests/CalendarEventTests.cs (0 hunks)
  • QRCoderTests/PayloadGeneratorTests/ContactDataTests.cs (0 hunks)
  • QRCoderTests/PayloadGeneratorTests/GeolocationTests.cs (0 hunks)
  • QRCoderTests/PayloadGeneratorTests/GirocodeTests.cs (0 hunks)
  • QRCoderTests/PayloadGeneratorTests/IbanTests.cs (0 hunks)
  • QRCoderTests/PayloadGeneratorTests/LitecoinAddressTests.cs (0 hunks)
  • QRCoderTests/PayloadGeneratorTests/MMSTests.cs (0 hunks)
  • QRCoderTests/PayloadGeneratorTests/MailTests.cs (0 hunks)
  • QRCoderTests/PayloadGeneratorTests/MoneroTransactionTests.cs (0 hunks)
  • QRCoderTests/PayloadGeneratorTests/OneTimePasswordTests.cs (0 hunks)
  • QRCoderTests/PayloadGeneratorTests/PhoneNumberTests.cs (0 hunks)
  • QRCoderTests/PayloadGeneratorTests/RussiaPaymentOrderTests.cs (0 hunks)
  • QRCoderTests/PayloadGeneratorTests/SMSTests.cs (0 hunks)
  • QRCoderTests/PayloadGeneratorTests/ShadowSocksConfigTests.cs (0 hunks)
  • QRCoderTests/PayloadGeneratorTests/SkypeCallTests.cs (0 hunks)
  • QRCoderTests/PayloadGeneratorTests/SwissQrCodeTests.cs (0 hunks)
  • QRCoderTests/PayloadGeneratorTests/UrlTests.cs (0 hunks)
  • QRCoderTests/PayloadGeneratorTests/WhatsAppMessageTests.cs (0 hunks)
  • QRCoderTests/PayloadGeneratorTests/WiFiTests.cs (0 hunks)
  • QRCoderTests/PngByteQRCodeRendererTests.cs (0 hunks)
  • QRCoderTests/PostscriptQRCodeRendererTests.cs (0 hunks)
  • QRCoderTests/QRCodeRendererTests.cs (0 hunks)
  • QRCoderTests/QRCoderTests.csproj (1 hunks)
  • QRCoderTests/QRGeneratorTests.cs (0 hunks)
  • QRCoderTests/SvgQRCodeRendererTests.cs (0 hunks)
  • QRCoderTests/XamlQRCodeRendererTests.cs (0 hunks)
💤 Files with no reviewable changes (85)
  • QRCoder/Extensions/BitArrayExtensions.cs
  • QRCoderDemoUWP/MainPage.xaml.cs
  • QRCoder/PayloadGenerator/WhatsAppMessage.cs
  • QRCoder/SvgQRCode.cs
  • QRCoderDemoUWP/App.xaml.cs
  • QRCoder/PayloadGenerator/RussiaPaymentOrder.cs
  • QRCoderTests/PayloadGeneratorTests/CalendarEventTests.cs
  • QRCoderTests/PayloadGeneratorTests/GirocodeTests.cs
  • QRCoderTests/PayloadGeneratorTests/SkypeCallTests.cs
  • QRCoderTests/PostscriptQRCodeRendererTests.cs
  • QRCoder/PayloadGenerator/MMS.cs
  • QRCoderTests/PayloadGeneratorTests/OneTimePasswordTests.cs
  • QRCoderTests/BitmapByteQRCodeRendererTests.cs
  • QRCoder/Base64QRCode.cs
  • QRCoderTests/PayloadGeneratorTests/GeolocationTests.cs
  • QRCoder/BitmapByteQRCode.cs
  • QRCoderTests/AsciiQRCodeRendererTests.cs
  • QRCoder/QRCodeGenerator/GaloisField.cs
  • QRCoderTests/PayloadGeneratorTests/MMSTests.cs
  • QRCoder/PngByteQRCode.cs
  • QRCoder/QRCodeGenerator/VersionInfo.cs
  • QRCoderDemo/Form1.cs
  • QRCoderConsole/Program.cs
  • QRCoder/QRCodeGenerator/CapacityTables.cs
  • QRCoder/PayloadGenerator/BezahlCode.cs
  • QRCoder/Exceptions/DataTooLongException.cs
  • QRCoder/PayloadGenerator/Girocode.cs
  • QRCoderTests/PayloadGeneratorTests/ContactDataTests.cs
  • QRCoder/PostscriptQRCode.cs
  • QRCoderTests/PayloadGeneratorTests/ShadowSocksConfigTests.cs
  • QRCoder/PayloadGenerator/Mail.cs
  • QRCoderTests/PayloadGeneratorTests/RussiaPaymentOrderTests.cs
  • QRCoder/Extensions/StringValueAttribute.cs
  • QRCoderTests/PayloadGeneratorTests/BezahlCodeTests.cs
  • QRCoder/PayloadGenerator/OneTimePassword.cs
  • QRCoder/QRCodeGenerator/Point.cs
  • QRCoder/QRCodeGenerator/AlignmentPattern.cs
  • QRCoder/QRCodeGenerator/CodewordBlock.cs
  • QRCoder/ArtQRCode.cs
  • QRCoderTests/PayloadGeneratorTests/SwissQrCodeTests.cs
  • QRCoderTests/PayloadGeneratorTests/UrlTests.cs
  • QRCoderTests/PayloadGeneratorTests/IbanTests.cs
  • QRCoder/PayloadGenerator/CalendarEvent.cs
  • QRCoder/QRCodeGenerator/Polynom.cs
  • QRCoderTests/PayloadGeneratorTests/WiFiTests.cs
  • QRCoderTests/QRCodeRendererTests.cs
  • QRCoder.Xaml/XamlQRCode.cs
  • QRCoderTests/PayloadGeneratorTests/WhatsAppMessageTests.cs
  • QRCoder/PayloadGenerator/ContactData.cs
  • QRCoder/QRCode.cs
  • QRCoder/PayloadGenerator/BitcoinLikeCryptoCurrencyAddress.cs
  • QRCoderTests/ArtQRCodeRendererTests.cs
  • QRCoderTests/PngByteQRCodeRendererTests.cs
  • QRCoder/PayloadGenerator/SwissQrCode.cs
  • QRCoderTests/PayloadGeneratorTests/LitecoinAddressTests.cs
  • QRCoderTests/SvgQRCodeRendererTests.cs
  • QRCoderTests/PayloadGeneratorTests/SMSTests.cs
  • QRCoder/PayloadGenerator.cs
  • QRCoder/QRCodeGenerator/ModulePlacer.cs
  • QRCoderTests/PayloadGeneratorTests/BitcoinCashAddressTests.cs
  • QRCoderDemo/Program.cs
  • QRCoder/QRCodeGenerator.cs
  • QRCoderTests/XamlQRCodeRendererTests.cs
  • QRCoder/PayloadGenerator/MoneroTransaction.cs
  • QRCoderTests/PayloadGeneratorTests/PhoneNumberTests.cs
  • QRCoder/PayloadGenerator/ShadowSocksConfig.cs
  • QRCoder/PayloadGenerator/SMS.cs
  • QRCoder/PayloadGenerator/SlovenianUpnQr.cs
  • QRCoderTests/PayloadGeneratorTests/MoneroTransactionTests.cs
  • QRCoderTests/PayloadGeneratorTests/MailTests.cs
  • QRCoder/QRCodeGenerator/VersionInfoDetails.cs
  • QRCoder/PayloadGenerator/Url.cs
  • QRCoderTests/QRGeneratorTests.cs
  • QRCoder/QRCodeGenerator/ModulePlacer.MaskPattern.cs
  • QRCoder/QRCodeData.cs
  • QRCoder/QRCodeGenerator/AlignmentPatterns.cs
  • QRCoderTests/PayloadGeneratorTests/BitcoinAddressTests.cs
  • QRCoderTests/Helpers/HelperFunctions.cs
  • QRCoderTests/Base64QRCodeRendererTests.cs
  • QRCoder/QRCodeGenerator/ModulePlacer.BlockedModules.cs
  • QRCoder/ASCIIQRCode.cs
  • QRCoderTests/PayloadGeneratorTests/BookmarkTests.cs
  • QRCoderApiTests/ApiApprovalTests.cs
  • QRCoder/QRCodeGenerator/AlphanumericEncoder.cs
  • QRCoderTests/Helpers/ShouldMatchApprovedBinaryExtensions.cs
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (2)
  • GitHub Check: additional-tests
  • GitHub Check: build
🔇 Additional comments (4)
Directory.Build.targets (1)

14-18: LGTM! Correct workaround for net35 compatibility.

The conditional removal of System.Threading.Tasks for net35 targets is necessary and correct, as this namespace does not exist in .NET Framework 3.5. The comment clearly explains the rationale.

QRCoderTests/QRCoderTests.csproj (1)

60-66: LGTM! Appropriate test-specific global usings.

The explicit Using entries for test namespaces (QRCoder, test helpers, Shouldly, System.Drawing, and Xunit) are appropriate and will streamline test code by eliminating repetitive using directives.

Directory.Build.props (2)

17-17: LGTM! Enables modern implicit usings feature.

Enabling ImplicitUsings is appropriate for this codebase and aligns with modern C# best practices, reducing boilerplate across the solution.


53-59: LGTM! Appropriate global using directives.

The explicit global usings for commonly used namespaces (System.Globalization, System.Text, System.Text.RegularExpressions) are well-chosen. The BitArray alias for System.Collections.BitArray is a good practice to avoid potential naming conflicts with other collection types.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

refactoring Refactoring of code without changes to functionality

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants