SwiftLint icon indicating copy to clipboard operation
SwiftLint copied to clipboard

Fix false positives in redundant_discardable_let rule

Open kaseken opened this issue 8 months ago • 2 comments

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.

kaseken avatar May 11 '25 08:05 kaseken

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

Generated by :no_entry_sign: Danger

SwiftLintBot avatar May 11 '25 08:05 SwiftLintBot

@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. https://github.com/realm/SwiftLint/pull/6075/commits/00866da6a0fc1e55c7bc16c25794080600b31fa9

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

kaseken avatar Jun 17 '25 07:06 kaseken

@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 avatar Jun 21 '25 08:06 kaseken