Skip to content

Fix false positives in redundant_discardable_let rule#6075

Merged
SimplyDanny merged 11 commits intorealm:mainfrom
kaseken:fix-false-positive-on-redundant-discardable-let
Jun 21, 2025
Merged

Fix false positives in redundant_discardable_let rule#6075
SimplyDanny merged 11 commits intorealm:mainfrom
kaseken:fix-false-positive-on-redundant-discardable-let

Conversation

@kaseken
Copy link
Contributor

@kaseken kaseken commented May 11, 2025

Fixes #6063

I’d appreciate any feedback or suggestions. Thanks in advance for your time and review!

Changes

  • Fix false positive for @ViewBuilder functions when ignore_swiftui_view_bodies is set to true.
  • Fix false positive for #Preview when ignore_swiftui_view_bodies is set to true.
  • Fix false positive for PreviewProvider when ignore_swiftui_view_bodies is set to true.

@SwiftLintBot
Copy link

SwiftLintBot commented May 11, 2025

1 Warning
⚠️ This PR may need tests.
18 Messages
📖 Building this branch resulted in a binary size of 25119.02 KiB vs 25118.15 KiB when built on main (0% larger).
📖 Linting Aerial with this PR took 0.17 s vs 0.17 s on main (0% slower).
📖 Linting Alamofire with this PR took 0.17 s vs 0.17 s on main (0% slower).
📖 Linting Brave with this PR took 0.74 s vs 0.73 s on main (1% slower).
📖 Linting DuckDuckGo with this PR took 5.23 s vs 5.22 s on main (0% slower).
📖 Linting Firefox with this PR took 1.0 s vs 1.02 s on main (1% faster).
📖 Linting Kickstarter with this PR took 0.73 s vs 0.73 s on main (0% slower).
📖 Linting Moya with this PR took 0.13 s vs 0.13 s on main (0% slower).
📖 Linting NetNewsWire with this PR took 0.29 s vs 0.29 s on main (0% slower).
📖 Linting Nimble with this PR took 0.15 s vs 0.15 s on main (0% slower).
📖 Linting PocketCasts with this PR took 0.7 s vs 0.7 s on main (0% slower).
📖 Linting Quick with this PR took 0.13 s vs 0.13 s on main (0% slower).
📖 Linting Realm with this PR took 0.42 s vs 0.42 s on main (0% slower).
📖 Linting Sourcery with this PR took 0.28 s vs 0.28 s on main (0% slower).
📖 Linting Swift with this PR took 0.43 s vs 0.43 s on main (0% slower).
📖 Linting VLC with this PR took 0.2 s vs 0.2 s on main (0% slower).
📖 Linting Wire with this PR took 1.78 s vs 1.79 s on main (0% faster).
📖 Linting WordPress with this PR took 0.97 s vs 0.98 s on main (1% faster).

Generated by 🚫 Danger

Copy link
Collaborator

@SimplyDanny SimplyDanny left a comment

Choose a reason for hiding this comment

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

Thank you for the contribution! The implementation looks very good already. 👍

My comments are mainly about style and consistency. Please have a look.

@kaseken
Copy link
Contributor Author

kaseken commented Jun 17, 2025

@SimplyDanny Thank you for your thorough review!

I've incorporated all of your suggestions.

Additionally, I’ve added more triggeringExamples as unit tests to further ensure that the added isPreviewProviderBody isn’t causing any issues.
00866da

I’d appreciate it if you could take another look when you have time. Thanks in advance!

@kaseken kaseken requested a review from SimplyDanny June 17, 2025 07:00
Copy link
Collaborator

@SimplyDanny SimplyDanny left a comment

Choose a reason for hiding this comment

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

Thanks for the updates. There are a few more points to address.

kaseken added 11 commits June 21, 2025 16:46
- Fix false positive for @ViewBuilder functions when ignore_swiftui_view_bodies is set to true.
- Fix false positive for #Preview when ignore_swiftui_view_bodies is set to true.
- Fix false positive for PreviewProvider when ignore_swiftui_view_bodies is set to true.
- Moved log to Enhancements section.
- Added blank line above.
- Fixed typo.
- Added issue link.
- Removed redundant cases.
- Added a case where corrections should not be applied.
@kaseken
Copy link
Contributor Author

kaseken commented Jun 21, 2025

@SimplyDanny Thanks for reviewing! I've fixed all the issues.

Some CI jobs ('buildkite/swiftlint' and ''buildkite/swiftlint/danger') seems to be failing due to an error unrelated to this PR.
https://buildkite.com/swiftlint/swiftlint/builds/9882

Maybe the DANGER_GITHUB_API_TOKEN has expired?

bundle exec danger --verbose
--
  | To use retry middleware with Faraday v2.0+, install `faraday-retry` gem
  | bundler: failed to load command: danger (/Users/administrator/.rbenv/versions/3.4.2/bin/danger)
  | /Users/administrator/.rbenv/versions/3.4.2/lib/ruby/gems/3.4.0/gems/octokit-5.6.1/lib/octokit/response/raise_error.rb:14:in 'Octokit::Response::RaiseError#on_complete': GET https://api.github.com/repos/realm/SwiftLint/pulls/6075: 401 - Bad credentials // See: https://docs.github.com/rest (Octokit::Unauthorized)
  | from /Users/administrator/.rbenv/versions/3.4.2/lib/ruby/gems/3.4.0/gems/faraday-2.7.4/lib/faraday/middleware.rb:18:in 'block in Faraday::Middleware#call'
  | from /Users/administrator/.rbenv/versions/3.4.2/lib/ruby/gems/3.4.0/gems/faraday-2.7.4/lib/faraday/response.rb:42:in 'Faraday::Response#on_complete'
  | from /Users/administrator/.rbenv/versions/3.4.2/lib/ruby/gems/3.4.0/gems/faraday-2.7.4/lib/faraday/middleware.rb:17:in 'Faraday::Middleware#call'
  | from /Users/administrator/.rbenv/versions/3.4.2/lib/ruby/gems/3.4.0/gems/octokit-5.6.1/lib/octokit/middleware/follow_redirects.rb:73:in 'Octokit::Middleware::FollowRedirects#perform_with_redirection'
  | from /Users/administrator/.rbenv/versions/3.4.2/lib/ruby/gems/3.4.0/gems/octokit-5.6.1/lib/octokit/middleware/follow_redirects.rb:61:in 'Octokit::Middleware::FollowRedirects#call'
  | from /Users/administrator/.rbenv/versions/3.4.2/lib/ruby/gems/3.4.0/gems/faraday-2.7.4/lib/faraday/rack_builder.rb:153:in 'Faraday::RackBuilder#build_response'
  | from /Users/administrator/.rbenv/versions/3.4.2/lib/ruby/gems/3.4.0/gems/faraday-2.7.4/lib/faraday/connection.rb:444:in 'Faraday::Connection#run_request'
  | from /Users/administrator/.rbenv/versions/3.4.2/lib/ruby/gems/3.4.0/gems/faraday-2.7.4/lib/faraday/connection.rb:200:in 'Faraday::Connection#get'
  | from /Users/administrator/.rbenv/versions/3.4.2/lib/ruby/gems/3.4.0/gems/sawyer-0.9.2/lib/sawyer/agent.rb:99:in 'Sawyer::Agent#call'
  | from /Users/administrator/.rbenv/versions/3.4.2/lib/ruby/gems/3.4.0/gems/octokit-5.6.1/lib/octokit/connection.rb:156:in 'Octokit::Connection#request'
  | from /Users/administrator/.rbenv/versions/3.4.2/lib/ruby/gems/3.4.0/gems/octokit-5.6.1/lib/octokit/connection.rb:19:in 'Octokit::Connection#get'
  | from /Users/administrator/.rbenv/versions/3.4.2/lib/ruby/gems/3.4.0/gems/octokit-5.6.1/lib/octokit/client/pull_requests.rb:33:in 'Octokit::Client::PullRequests#pull_request'
  | from /Users/administrator/.rbenv/versions/3.4.2/lib/ruby/gems/3.4.0/gems/danger-9.2.0/lib/danger/request_sources/github/github.rb:117:in 'Danger::RequestSources::GitHub#fetch_details'
  | from /Users/administrator/.rbenv/versions/3.4.2/lib/ruby/gems/3.4.0/gems/danger-9.2.0/lib/danger/danger_core/environment_manager.rb:53:in 'Danger::EnvironmentManager#fill_environment_vars'
  | from /Users/administrator/.rbenv/versions/3.4.2/lib/ruby/gems/3.4.0/gems/danger-9.2.0/lib/danger/danger_core/dangerfile.rb:280:in 'Danger::Dangerfile#run'
  | from /Users/administrator/.rbenv/versions/3.4.2/lib/ruby/gems/3.4.0/gems/danger-9.2.0/lib/danger/danger_core/executor.rb:28:in 'Danger::Executor#run'
  | from /Users/administrator/.rbenv/versions/3.4.2/lib/ruby/gems/3.4.0/gems/danger-9.2.0/lib/danger/commands/runner.rb:73:in 'Danger::Runner#run'
  | from /Users/administrator/.rbenv/versions/3.4.2/lib/ruby/gems/3.4.0/gems/claide-1.1.0/lib/claide/command.rb:334:in 'CLAide::Command.run'
  | from /Users/administrator/.rbenv/versions/3.4.2/lib/ruby/gems/3.4.0/gems/danger-9.2.0/bin/danger:5:in '<top (required)>'
  | from /Users/administrator/.rbenv/versions/3.4.2/bin/danger:25:in 'Kernel#load'
  | from /Users/administrator/.rbenv/versions/3.4.2/bin/danger:25:in '<top (required)>'
  | from /Users/administrator/.rbenv/versions/3.4.2/lib/ruby/gems/3.4.0/gems/bundler-2.4.12/lib/bundler/cli/exec.rb:58:in 'Kernel.load'
  | from /Users/administrator/.rbenv/versions/3.4.2/lib/ruby/gems/3.4.0/gems/bundler-2.4.12/lib/bundler/cli/exec.rb:58:in 'Bundler::CLI::Exec#kernel_load'
  | from /Users/administrator/.rbenv/versions/3.4.2/lib/ruby/gems/3.4.0/gems/bundler-2.4.12/lib/bundler/cli/exec.rb:23:in 'Bundler::CLI::Exec#run'
  | from /Users/administrator/.rbenv/versions/3.4.2/lib/ruby/gems/3.4.0/gems/bundler-2.4.12/lib/bundler/cli.rb:492:in 'Bundler::CLI#exec'
  | from /Users/administrator/.rbenv/versions/3.4.2/lib/ruby/gems/3.4.0/gems/bundler-2.4.12/lib/bundler/vendor/thor/lib/thor/command.rb:27:in 'Bundler::Thor::Command#run'
  | from /Users/administrator/.rbenv/versions/3.4.2/lib/ruby/gems/3.4.0/gems/bundler-2.4.12/lib/bundler/vendor/thor/lib/thor/invocation.rb:127:in 'Bundler::Thor::Invocation#invoke_command'
  | from /Users/administrator/.rbenv/versions/3.4.2/lib/ruby/gems/3.4.0/gems/bundler-2.4.12/lib/bundler/vendor/thor/lib/thor.rb:392:in 'Bundler::Thor.dispatch'
  | from /Users/administrator/.rbenv/versions/3.4.2/lib/ruby/gems/3.4.0/gems/bundler-2.4.12/lib/bundler/cli.rb:34:in 'Bundler::CLI.dispatch'
  | from /Users/administrator/.rbenv/versions/3.4.2/lib/ruby/gems/3.4.0/gems/bundler-2.4.12/lib/bundler/vendor/thor/lib/thor/base.rb:485:in 'Bundler::Thor::Base::ClassMethods#start'
  | from /Users/administrator/.rbenv/versions/3.4.2/lib/ruby/gems/3.4.0/gems/bundler-2.4.12/lib/bundler/cli.rb:28:in 'Bundler::CLI.start'
  | from /Users/administrator/.rbenv/versions/3.4.2/lib/ruby/gems/3.4.0/gems/bundler-2.4.12/exe/bundle:45:in 'block in <top (required)>'
  | from /Users/administrator/.rbenv/versions/3.4.2/lib/ruby/gems/3.4.0/gems/bundler-2.4.12/lib/bundler/friendly_errors.rb:117:in 'Bundler.with_friendly_errors'
  | from /Users/administrator/.rbenv/versions/3.4.2/lib/ruby/gems/3.4.0/gems/bundler-2.4.12/exe/bundle:33:in '<top (required)>'
  | from /Users/administrator/.rbenv/versions/3.4.2/bin/bundle:25:in 'Kernel#load'
  | from /Users/administrator/.rbenv/versions/3.4.2/bin/bundle:25:in '<main>'
  | make: *** [oss_scan] Error 1
  | 🚨 Error: The command exited with status 2
  | user command error: exit status 2

@kaseken kaseken requested a review from SimplyDanny June 21, 2025 08:12
Copy link
Collaborator

@SimplyDanny SimplyDanny left a comment

Choose a reason for hiding this comment

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

Thank you very much @kaseken! Looks very good now.

Build issues will get resolved soon. I'll retrigger the check once that's done and merge your PR afterwards.

@SimplyDanny SimplyDanny enabled auto-merge (squash) June 21, 2025 13:17
@SimplyDanny SimplyDanny disabled auto-merge June 21, 2025 23:30
@SimplyDanny SimplyDanny merged commit c22de52 into realm:main Jun 21, 2025
20 checks passed
@kaseken kaseken deleted the fix-false-positive-on-redundant-discardable-let branch June 22, 2025 02:14
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

False positive on redundant_discardable_let rule in SwiftUI @ViewBuilder

3 participants