Skip to content

Automated Resyntax fixes #1449

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 17 commits into from
May 5, 2025
Merged

Automated Resyntax fixes #1449

merged 17 commits into from
May 5, 2025

Conversation

resyntax-ci[bot]
Copy link
Contributor

@resyntax-ci resyntax-ci bot commented May 2, 2025

Resyntax fixed 38 issues in 20 files.

  • Fixed 8 occurrences of single-clause-match-to-match-define
  • Fixed 6 occurrences of let-to-define
  • Fixed 3 occurrences of for/fold-with-conditional-body-to-when-keyword
  • Fixed 3 occurrences of cond-let-to-cond-define
  • Fixed 3 occurrences of zero-comparison-to-positive?
  • Fixed 2 occurrences of define-simple-macro-to-define-syntax-parse-rule
  • Fixed 2 occurrences of define-let-to-double-define
  • Fixed 2 occurrences of sort-with-keyed-comparator-to-sort-by-key
  • Fixed 2 occurrences of format-identity
  • Fixed 1 occurrence of always-throwing-cond-to-when
  • Fixed 1 occurrence of map-to-for
  • Fixed 1 occurrence of if-x-else-x-to-and
  • Fixed 1 occurrence of if-let-to-cond
  • Fixed 1 occurrence of inverted-unless
  • Fixed 1 occurrence of begin0-let-to-define-begin0
  • Fixed 1 occurrence of if-else-false-to-and

resyntax-ci bot added 17 commits May 2, 2025 00:58
Internal definitions are recommended instead of `let` expressions, to reduce nesting.
This `if` expression can be refactored to an equivalent expression using `and`.
This `match` expression can be simplified using `match-define`.
This expression is equivalent to calling the `positive?` predicate.
The `let` expression in this `begin0` form can be extracted into the surrounding definition context.
`cond` with internal definitions is preferred over `if` with `let`, to reduce nesting
This conditional expression can be replaced with a simpler, equivalent expression.
The `define-simple-macro` form has been renamed to `define-syntax-parse-rule`.
This negated `unless` expression can be replaced by a `when` expression.
Internal definitions are recommended instead of `let` expressions, to reduce nesting.
This `for/fold` loop can be simplified by using the `#:when` keyword.
This `let` expression can be pulled up into a `define` expression.
Using `when` and `unless` is simpler than a conditional with an always-throwing branch.
This `map` operation can be replaced with a `for/list` loop.
This `sort` expression can be replaced with a simpler, equivalent expression.
This use of `format` does nothing.
This `for/fold` loop can be simplified by using the `#:when` keyword.
(let ([dom+ (for/fold ([acc '()]) ([dom (in-list dom*)])
(if (pair? dom)
(cons (cdr dom) acc)
acc))])
Copy link
Member

Choose a reason for hiding this comment

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

Could this be a for/list?

Copy link
Member

Choose a reason for hiding this comment

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

Copy link
Contributor

@jackfirth jackfirth May 6, 2025

Choose a reason for hiding this comment

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

Such a rewrite would have to add a reverse in order to preserve ordering, so Resyntax would rewrite it to this:

(reverse
 (for/list ([dom (in-list dom*)]
            #:when (pair? dom))
   (cdr dom)))

I'm not sure that's a great idea since it adds two extra linear traversals over the resulting list, making the code slower.

Copy link
Member

Choose a reason for hiding this comment

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

We should have a for/reverse, clearly.

Copy link
Contributor

Choose a reason for hiding this comment

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

I'm not all that sure it comes up often enough to be warranted :p I think a lot of the time when the order of a list doesn't matter so using for/reverse would be viable, it would also be the case that just using an actually-unordered data structure like a set would be even better.

(let ([e (syntax-e args)])
(values (car e) (cdr e)))]
(define e (syntax-e args))
(values (car e) (cdr e))]
Copy link
Member

Choose a reason for hiding this comment

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

There should be a function that does this.

@samth samth merged commit c14115c into master May 5, 2025
5 checks passed
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.

2 participants