Skip to content

New rule: Shared else-value for if/case #784

@soegaard

Description

@soegaard

Rule summary

From:

      (if (symbol? level)
          (case level
            [(warning)                                'warning]
            [(danger)                                 'danger]
            [(info success warning danger
                   primary secondary light dark)      level]
            [else                                     'info])
          'info)

To:

          (case level
            [(warning)                                'warning]
            [(danger)                                 'danger]
            [(info success warning danger
                   primary secondary light dark)      level]
            [else                                     'info])

The observation is that the value return by the else-arm of the if-expression,
is the same as the expression returned in the else-expression of the case.

Test case

#lang resyntax/test

test: "original code should be refactorable to new code"
--------------------
#lang racket
(define level 'foo)
(if (symbol? level)
    (case level
      [(warning) 'warning]
      [else      'info])
    'info)

====================
#lang racket
(define level 'foo)
(case level
      [(warning) 'warning]
      [else      'info])
--------------------

No-change test case

Additional context

Spotted here:

https://github.com/soegaard/webracket/blob/main/lib/web-easy/renderer.rkt#L892

Metadata

Metadata

Assignees

No one assigned

    Labels

    new lintIssues suggesting new lints or pull requests implementing new lints

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions