From acd25f7682777817fb7169deb23fd533970229bc Mon Sep 17 00:00:00 2001 From: "resyntax-ci[bot]" <181813515+resyntax-ci[bot]@users.noreply.github.com> Date: Sun, 12 Jul 2026 00:34:33 +0000 Subject: [PATCH 01/10] Fix 3 occurrences of `list-element-definitions-to-match-define` These list element variable definitions can be expressed more succinctly with `match-define`. Note that the suggested replacement raises an error if the list contains more elements than expected. --- drracket-core-lib/drracket/private/syncheck/blueboxes-gui.rkt | 3 +-- drracket-core-lib/drracket/private/syncheck/gui.rkt | 4 +--- drracket-core-lib/drracket/private/syncheck/online-comp.rkt | 3 +-- 3 files changed, 3 insertions(+), 7 deletions(-) diff --git a/drracket-core-lib/drracket/private/syncheck/blueboxes-gui.rkt b/drracket-core-lib/drracket/private/syncheck/blueboxes-gui.rkt index 200e7fe48..d068b463a 100644 --- a/drracket-core-lib/drracket/private/syncheck/blueboxes-gui.rkt +++ b/drracket-core-lib/drracket/private/syncheck/blueboxes-gui.rkt @@ -778,8 +778,7 @@ (handle-evt get-blueboxes-cache-chan (λ (resp-chan+to-update-the-strs) - (define resp-chan (list-ref resp-chan+to-update-the-strs 0)) - (define to-update-the-strs (list-ref resp-chan+to-update-the-strs 1)) + (match-define (list resp-chan to-update-the-strs) resp-chan+to-update-the-strs) (define (start-blueboxes-computation) (thread diff --git a/drracket-core-lib/drracket/private/syncheck/gui.rkt b/drracket-core-lib/drracket/private/syncheck/gui.rkt index 3498a9454..0cd28a470 100644 --- a/drracket-core-lib/drracket/private/syncheck/gui.rkt +++ b/drracket-core-lib/drracket/private/syncheck/gui.rkt @@ -1523,9 +1523,7 @@ If the namespace does not, they are colored the unbound color. (define in-edit-sequence '()) (define (un/highlight highlight?) (for ([(lst _) (in-hash current-matching-identifiers)]) - (define txt (list-ref lst 0)) - (define start (list-ref lst 1)) - (define end (list-ref lst 2)) + (match-define (list txt start end) lst) (unless refreshing? (unless (member txt in-edit-sequence) (set! in-edit-sequence (cons txt in-edit-sequence)) diff --git a/drracket-core-lib/drracket/private/syncheck/online-comp.rkt b/drracket-core-lib/drracket/private/syncheck/online-comp.rkt index b09a3a4b1..2530db7ec 100644 --- a/drracket-core-lib/drracket/private/syncheck/online-comp.rkt +++ b/drracket-core-lib/drracket/private/syncheck/online-comp.rkt @@ -24,8 +24,7 @@ (exn-message x)))]) (let loop () (define id/name (place-channel-get local-chan)) - (define id (list-ref id/name 0)) - (define name (list-ref id/name 1)) + (match-define (list id name) id/name) (define res ((hash-ref table id) name)) (place-channel-put local-chan res) (loop)))))) From cde827341b7662645bd0277f4798bfdcdd947ed2 Mon Sep 17 00:00:00 2001 From: "resyntax-ci[bot]" <181813515+resyntax-ci[bot]@users.noreply.github.com> Date: Sun, 12 Jul 2026 00:34:33 +0000 Subject: [PATCH 02/10] Fix 1 occurrence of `and-let-to-cond` Using `cond` allows converting `let` to internal definitions, reducing nesting --- drracket-core-lib/drracket/private/syncheck/gui.rkt | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/drracket-core-lib/drracket/private/syncheck/gui.rkt b/drracket-core-lib/drracket/private/syncheck/gui.rkt index 0cd28a470..74267ef5e 100644 --- a/drracket-core-lib/drracket/private/syncheck/gui.rkt +++ b/drracket-core-lib/drracket/private/syncheck/gui.rkt @@ -431,11 +431,13 @@ If the namespace does not, they are colored the unbound color. (define arrow-records #f) (define/private (fetch-arrow-records txt pos) - (and arrow-records - (let ([im (hash-ref arrow-records txt #f)]) - (if im - (interval-map-ref im pos '()) - '())))) + (cond + [arrow-records + (define im (hash-ref arrow-records txt #f)) + (if im + (interval-map-ref im pos '()) + '())] + [else #f])) (define/public (dump-arrow-records) (cond From ea7cc5b78fb21e419f460ac72f3e0c12df82a26f Mon Sep 17 00:00:00 2001 From: "resyntax-ci[bot]" <181813515+resyntax-ci[bot]@users.noreply.github.com> Date: Sun, 12 Jul 2026 00:34:33 +0000 Subject: [PATCH 03/10] Fix 2 occurrences of `printf-to-display` This use of `printf` has no arguments other than the template string. --- drracket-core-lib/drracket/private/syncheck/gui.rkt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drracket-core-lib/drracket/private/syncheck/gui.rkt b/drracket-core-lib/drracket/private/syncheck/gui.rkt index 74267ef5e..e8b85b995 100644 --- a/drracket-core-lib/drracket/private/syncheck/gui.rkt +++ b/drracket-core-lib/drracket/private/syncheck/gui.rkt @@ -449,10 +449,10 @@ If the namespace does not, they are colored the unbound color. (printf "~s =>\n" (interval-map-iterate-key v it)) (for ([v (in-list (interval-map-iterate-value v it))]) (printf " ~s\n" v)) - (printf "\n") + (newline) (loop (interval-map-iterate-next v it)))))] [else - (printf "arrow-records empty\n")])) + (displayln "arrow-records empty")])) ;; cleanup-texts : (or/c #f (listof text)) (define cleanup-texts #f) From c095b3527610d90cb114735986177b95423205f5 Mon Sep 17 00:00:00 2001 From: "resyntax-ci[bot]" <181813515+resyntax-ci[bot]@users.noreply.github.com> Date: Sun, 12 Jul 2026 00:34:33 +0000 Subject: [PATCH 04/10] Fix 5 occurrences of `let-to-define` Internal definitions are recommended instead of `let` expressions, to reduce nesting. --- .../drracket/private/syncheck/gui.rkt | 61 +++++++++---------- 1 file changed, 29 insertions(+), 32 deletions(-) diff --git a/drracket-core-lib/drracket/private/syncheck/gui.rkt b/drracket-core-lib/drracket/private/syncheck/gui.rkt index e8b85b995..a9f5ccdd9 100644 --- a/drracket-core-lib/drracket/private/syncheck/gui.rkt +++ b/drracket-core-lib/drracket/private/syncheck/gui.rkt @@ -542,19 +542,18 @@ If the namespace does not, they are colored the unbound color. (send text position-location pos xlb xrb) (send text editor-location-to-dc-location (unbox xlb) (unbox xrb))) - (let ([start-text (list-ref l1 0)] - [start-left (list-ref l1 1)] - [end-text (list-ref l2 0)] - [end-left (list-ref l2 1)]) - (cond - [(object=? start-text end-text) - (< start-left end-left)] - [else - (let-values ([(sx sy) (find-dc-location start-text start-left)] - [(ex ey) (find-dc-location end-text end-left)]) - (cond - [(= sy ey) (< sx ex)] - [else (< sy ey)]))]))) + (define start-text (list-ref l1 0)) + (define start-left (list-ref l1 1)) + (define end-text (list-ref l2 0)) + (define end-left (list-ref l2 1)) + (cond + [(object=? start-text end-text) (< start-left end-left)] + [else + (let-values ([(sx sy) (find-dc-location start-text start-left)] + [(ex ey) (find-dc-location end-text end-left)]) + (cond + [(= sy ey) (< sx ex)] + [else (< sy ey)]))])) (define tacked-hash-table (make-hasheq)) @@ -616,23 +615,21 @@ If the namespace does not, they are colored the unbound color. (define/public (syncheck:color-range source start finish style-name) (when (is-a? source text%) (define (apply-style/remember ed start finish style) - (let ([outermost (find-outermost-editor ed)]) - (and (is-a? outermost syncheck-text<%>) - (send outermost syncheck:apply-style/remember ed start finish style)))) + (define outermost (find-outermost-editor ed)) + (and (is-a? outermost syncheck-text<%>) + (send outermost syncheck:apply-style/remember ed start finish style))) (define (find-outermost-editor ed) (let loop ([ed ed]) - (let ([admin (send ed get-admin)]) - (if (is-a? admin editor-snip-editor-admin<%>) - (let* ([enclosing-snip (send admin get-snip)] - [enclosing-snip-admin (send enclosing-snip get-admin)]) - (loop (send enclosing-snip-admin get-editor))) - ed)))) + (define admin (send ed get-admin)) + (if (is-a? admin editor-snip-editor-admin<%>) + (let* ([enclosing-snip (send admin get-snip)] + [enclosing-snip-admin (send enclosing-snip get-admin)]) + (loop (send enclosing-snip-admin get-editor))) + ed))) - (let ([style (send (send source get-style-list) - find-named-style - style-name)]) - (apply-style/remember source start finish style)))) + (define style (send (send source get-style-list) find-named-style style-name)) + (apply-style/remember source start finish style))) ;; add-to-cleanup/apply-style : (is-a?/c text%) number number style% symbol -> boolean (define/private (add-to-cleanup/apply-style txt start finish style) @@ -1486,12 +1483,12 @@ If the namespace does not, they are colored the unbound color. description-of-name)] [callback (λ (x y) - (let ([frame-parent (find-menu-parent menu)]) - (rename-menu-callback make-identifiers-hash - name-to-offer - name-to-offer - binding-identifiers - frame-parent)))])) + (define frame-parent (find-menu-parent menu)) + (rename-menu-callback make-identifiers-hash + name-to-offer + name-to-offer + binding-identifiers + frame-parent))])) (unless sep-before? (when need-a-sep? (new separator-menu-item% [parent menu]))) From 431d057b13cfea2050a97920e3db396a0cc27a23 Mon Sep 17 00:00:00 2001 From: "resyntax-ci[bot]" <181813515+resyntax-ci[bot]@users.noreply.github.com> Date: Sun, 12 Jul 2026 00:34:33 +0000 Subject: [PATCH 05/10] Fix 1 occurrence of `hash-set!-ref-to-hash-update!` This expression can be replaced with a simpler, equivalent `hash-update!` expression. --- drracket-core-lib/drracket/private/syncheck/gui.rkt | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/drracket-core-lib/drracket/private/syncheck/gui.rkt b/drracket-core-lib/drracket/private/syncheck/gui.rkt index a9f5ccdd9..c97e8c85c 100644 --- a/drracket-core-lib/drracket/private/syncheck/gui.rkt +++ b/drracket-core-lib/drracket/private/syncheck/gui.rkt @@ -884,9 +884,7 @@ If the namespace does not, they are colored the unbound color. (define per-txt-positions (make-hash)) (for ([(k _) (in-hash (make-identifiers-hash))]) (define-values (txt start-pos end-pos) (apply values k)) - (hash-set! per-txt-positions txt - (cons (cons start-pos end-pos) - (hash-ref per-txt-positions txt '())))) + (hash-update! per-txt-positions txt (λ (v) (cons (cons start-pos end-pos) v)) '())) (for ([(source-txt start+ends) (in-hash per-txt-positions)]) (when (is-a? source-txt text%) (define merged-positions (sort-and-merge start+ends)) From 1d4424e5ab730c4e299dc2de9c101f769cf6e7bb Mon Sep 17 00:00:00 2001 From: "resyntax-ci[bot]" <181813515+resyntax-ci[bot]@users.noreply.github.com> Date: Sun, 12 Jul 2026 00:34:33 +0000 Subject: [PATCH 06/10] Fix 2 occurrences of `when-expression-in-for-loop-to-when-keyword` Use the `#:when` keyword instead of `when` to reduce loop body indentation. --- .../drracket/private/syncheck/gui.rkt | 42 ++++++++++--------- 1 file changed, 22 insertions(+), 20 deletions(-) diff --git a/drracket-core-lib/drracket/private/syncheck/gui.rkt b/drracket-core-lib/drracket/private/syncheck/gui.rkt index c97e8c85c..b8a7604a0 100644 --- a/drracket-core-lib/drracket/private/syncheck/gui.rkt +++ b/drracket-core-lib/drracket/private/syncheck/gui.rkt @@ -885,17 +885,17 @@ If the namespace does not, they are colored the unbound color. (for ([(k _) (in-hash (make-identifiers-hash))]) (define-values (txt start-pos end-pos) (apply values k)) (hash-update! per-txt-positions txt (λ (v) (cons (cons start-pos end-pos) v)) '())) - (for ([(source-txt start+ends) (in-hash per-txt-positions)]) - (when (is-a? source-txt text%) - (define merged-positions (sort-and-merge start+ends)) - (begin-edit-sequence) - (for ([start+end (in-list (reverse merged-positions))]) - (define start (car start+end)) - (define end (cdr start+end)) - (unless (memq source-txt edit-sequence-txts) - (send source-txt begin-edit-sequence) - (set! edit-sequence-txts (cons source-txt edit-sequence-txts))) - (f source-txt start end)))) + (for ([(source-txt start+ends) (in-hash per-txt-positions)] + #:when (is-a? source-txt text%)) + (define merged-positions (sort-and-merge start+ends)) + (begin-edit-sequence) + (for ([start+end (in-list (reverse merged-positions))]) + (define start (car start+end)) + (define end (cdr start+end)) + (unless (memq source-txt edit-sequence-txts) + (send source-txt begin-edit-sequence) + (set! edit-sequence-txts (cons source-txt edit-sequence-txts))) + (f source-txt start end))) (for ([txt (in-list edit-sequence-txts)]) (send txt end-edit-sequence))) @@ -1247,15 +1247,17 @@ If the namespace does not, they are colored the unbound color. (define/private (determine-the-tacked-arrows) (define table (make-hash)) - (for ([(arrow v) (in-hash tacked-hash-table)]) - (when v - (define arrow-text+arrow-pos - (cond - [(var-arrow? arrow) (cons (var-arrow-start-text arrow) - (var-arrow-start-pos-left arrow))] - [(tail-arrow? arrow) (cons (tail-arrow-from-text arrow) - (tail-arrow-from-pos arrow))])) - (hash-set! table arrow-text+arrow-pos (cons arrow (hash-ref table arrow-text+arrow-pos '()))))) + (for ([(arrow v) (in-hash tacked-hash-table)] + #:when v) + (define arrow-text+arrow-pos + (cond + [(var-arrow? arrow) + (cons (var-arrow-start-text arrow) (var-arrow-start-pos-left arrow))] + [(tail-arrow? arrow) + (cons (tail-arrow-from-text arrow) (tail-arrow-from-pos arrow))])) + (hash-set! table + arrow-text+arrow-pos + (cons arrow (hash-ref table arrow-text+arrow-pos '())))) (for/list ([(arrow-text+arrow-pos arrows) (in-hash table)]) (match-define (cons arrow-text arrow-pos) arrow-text+arrow-pos) From 629b46886d5c25c4945148cc944ef8f5a090f3ba Mon Sep 17 00:00:00 2001 From: "resyntax-ci[bot]" <181813515+resyntax-ci[bot]@users.noreply.github.com> Date: Sun, 12 Jul 2026 00:34:33 +0000 Subject: [PATCH 07/10] Fix 1 occurrence of `cond-let-to-cond-define` Internal definitions are recommended instead of `let` expressions, to reduce nesting. --- .../drracket/private/syncheck/gui.rkt | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/drracket-core-lib/drracket/private/syncheck/gui.rkt b/drracket-core-lib/drracket/private/syncheck/gui.rkt index b8a7604a0..1d55aa698 100644 --- a/drracket-core-lib/drracket/private/syncheck/gui.rkt +++ b/drracket-core-lib/drracket/private/syncheck/gui.rkt @@ -984,15 +984,13 @@ If the namespace does not, they are colored the unbound color. (cond [(is-a? menu menu-bar%) (send menu get-frame)] [(is-a? menu popup-menu%) - (let ([target (send menu get-popup-target)]) - (cond - [(is-a? target editor<%>) - (let ([canvas (send target get-canvas)]) - (and canvas - (send canvas get-top-level-window)))] - [(is-a? target window<%>) - (send target get-top-level-window)] - [else #f]))] + (define target (send menu get-popup-target)) + (cond + [(is-a? target editor<%>) + (let ([canvas (send target get-canvas)]) + (and canvas (send canvas get-top-level-window)))] + [(is-a? target window<%>) (send target get-top-level-window)] + [else #f])] [(is-a? menu menu-item<%>) (loop (send menu get-parent))] [else #f]))) From ca60c9859c6f96d2d7925e3007e3e41bb5cbad57 Mon Sep 17 00:00:00 2001 From: "resyntax-ci[bot]" <181813515+resyntax-ci[bot]@users.noreply.github.com> Date: Sun, 12 Jul 2026 00:34:33 +0000 Subject: [PATCH 08/10] Fix 3 occurrences of `nested-when-to-compound-when` Nested `when` expressions can be merged into a single compound `when` expression. --- .../drracket/private/syncheck/gui.rkt | 63 +++++++++++-------- 1 file changed, 36 insertions(+), 27 deletions(-) diff --git a/drracket-core-lib/drracket/private/syncheck/gui.rkt b/drracket-core-lib/drracket/private/syncheck/gui.rkt index 1d55aa698..73ee96f3f 100644 --- a/drracket-core-lib/drracket/private/syncheck/gui.rkt +++ b/drracket-core-lib/drracket/private/syncheck/gui.rkt @@ -1000,14 +1000,11 @@ If the namespace does not, they are colored the unbound color. (add-to-range/key text start-pos end-pos make-menu key (and key #t))))) (define/public (syncheck:add-text-type text start fin text-type) - (when arrow-records - (when (is-a? text text:basic<%>) - (when (hash-has-key? cs-check-syntax-background-colors text-type) - (define color - (hash-ref cs-check-syntax-background-colors text-type)) - (add-to-range/key text start fin - (make-colored-region color text start fin) - #f #f))))) + (when (and arrow-records + (is-a? text text:basic<%>) + (hash-has-key? cs-check-syntax-background-colors text-type)) + (define color (hash-ref cs-check-syntax-background-colors text-type)) + (add-to-range/key text start fin (make-colored-region color text start fin) #f #f))) ;; these three methods are no longer used; see docs for more (define/public (syncheck:add-background-color text start fin raw-color) @@ -1045,17 +1042,29 @@ If the namespace does not, they are colored the unbound color. end-px end-py actual? level require-arrow? name-dup?) (when (and arrow-records - (preferences:get 'drracket:syncheck:show-arrows?)) - (when (add-to-bindings-table - start-text start-pos-left start-pos-right - end-text end-pos-left end-pos-right) - (let ([arrow (make-var-arrow start-text start-pos-left start-pos-right - start-px start-py - end-text end-pos-left end-pos-right - end-px end-py - actual? level require-arrow? name-dup?)]) - (add-to-range/key start-text start-pos-left start-pos-right arrow #f #f) - (add-to-range/key end-text end-pos-left end-pos-right arrow #f #f))))) + (preferences:get 'drracket:syncheck:show-arrows?) + (add-to-bindings-table start-text + start-pos-left + start-pos-right + end-text + end-pos-left + end-pos-right)) + (let ([arrow (make-var-arrow start-text + start-pos-left + start-pos-right + start-px + start-py + end-text + end-pos-left + end-pos-right + end-px + end-py + actual? + level + require-arrow? + name-dup?)]) + (add-to-range/key start-text start-pos-left start-pos-right arrow #f #f) + (add-to-range/key end-text end-pos-left end-pos-right arrow #f #f)))) ;; syncheck:add-tail-arrow : text number text number -> void (define/public (syncheck:add-tail-arrow from-text from-pos to-text to-pos) @@ -1620,14 +1629,14 @@ If the namespace does not, they are colored the unbound color. (for ([candidate-binder (in-list (fetch-arrow-records (var-arrow-start-text arrow) (var-arrow-start-pos-left arrow)))]) - (when (var-arrow? candidate-binder) - (when (and (equal? (var-arrow-start-text arrow) - (var-arrow-start-text candidate-binder)) - (equal? (var-arrow-start-pos-left arrow) - (var-arrow-start-pos-left candidate-binder)) - (equal? (var-arrow-start-pos-right arrow) - (var-arrow-start-pos-right candidate-binder))) - (add-var-binding-arrow candidate-binder))))])]))) + (when (and (var-arrow? candidate-binder) + (equal? (var-arrow-start-text arrow) + (var-arrow-start-text candidate-binder)) + (equal? (var-arrow-start-pos-left arrow) + (var-arrow-start-pos-left candidate-binder)) + (equal? (var-arrow-start-pos-right arrow) + (var-arrow-start-pos-right candidate-binder))) + (add-var-binding-arrow candidate-binder)))])]))) binding-arrows) (define (binding-arrows->identifiers-hash include-require-arrows? binding-arrows) From 19616edb9cc04aad5c38fb510ee3a9a43b5ae541 Mon Sep 17 00:00:00 2001 From: "resyntax-ci[bot]" <181813515+resyntax-ci[bot]@users.noreply.github.com> Date: Sun, 12 Jul 2026 00:34:33 +0000 Subject: [PATCH 09/10] Fix 1 occurrence of `define-values-values-to-define` This use of `define-values` is unnecessary. --- drracket-core-lib/drracket/private/syncheck/gui.rkt | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/drracket-core-lib/drracket/private/syncheck/gui.rkt b/drracket-core-lib/drracket/private/syncheck/gui.rkt index 73ee96f3f..c6676298c 100644 --- a/drracket-core-lib/drracket/private/syncheck/gui.rkt +++ b/drracket-core-lib/drracket/private/syncheck/gui.rkt @@ -1191,9 +1191,8 @@ If the namespace does not, they are colored the unbound color. (define max-height-for-arrow (unbox hb)) (unless (zero? max-width-for-arrow) (get-view-size wb hb) - (define-values (inset-x inset-y) - (values (send (get-canvas) horizontal-inset) - (send (get-canvas) vertical-inset))) + (define inset-x (send (get-canvas) horizontal-inset)) + (define inset-y (send (get-canvas) vertical-inset)) ;; if anything in this vector changes, then ;; the tacked arrows will draw differently From 3a60a7e01433b31a3aaaadfc4735d693828e6835 Mon Sep 17 00:00:00 2001 From: "resyntax-ci[bot]" <181813515+resyntax-ci[bot]@users.noreply.github.com> Date: Sun, 12 Jul 2026 00:34:33 +0000 Subject: [PATCH 10/10] Fix 1 occurrence of `nested-for-to-for*` These nested `for` loops can be replaced by a single `for*` loop. --- .../drracket/private/syncheck/gui.rkt | 33 +++++++++---------- 1 file changed, 16 insertions(+), 17 deletions(-) diff --git a/drracket-core-lib/drracket/private/syncheck/gui.rkt b/drracket-core-lib/drracket/private/syncheck/gui.rkt index c6676298c..f473396c0 100644 --- a/drracket-core-lib/drracket/private/syncheck/gui.rkt +++ b/drracket-core-lib/drracket/private/syncheck/gui.rkt @@ -1661,23 +1661,22 @@ If the namespace does not, they are colored the unbound color. (var-arrow-start-pos-right binding-arrow))) (unless (hash-ref already-considered range-to-consider #f) (hash-set! already-considered range-to-consider #t) - (for ([pos (in-range (car range-to-consider) (cdr range-to-consider))]) - (for ([arrow (in-list (or (fetch-arrow-records - (var-arrow-start-text binding-arrow) - pos) - '()))]) - (when (var-arrow? arrow) - (when (or include-require-arrows? - (not (var-arrow-require-arrow? arrow))) - (when (and (equal? (var-arrow-start-text arrow) - (var-arrow-start-text binding-arrow)) - (equal? (var-arrow-start-pos-left arrow) - (var-arrow-start-pos-left binding-arrow)) - (equal? (var-arrow-start-pos-right arrow) - (var-arrow-start-pos-right binding-arrow))) - (add-one (var-arrow-end-text arrow) - (var-arrow-end-pos-left arrow) - (var-arrow-end-pos-right arrow))))))))]))) + (for* ([pos (in-range (car range-to-consider) (cdr range-to-consider))] + [arrow (in-list + (or (fetch-arrow-records (var-arrow-start-text binding-arrow) + pos) + '()))]) + (when (var-arrow? arrow) + (when (or include-require-arrows? (not (var-arrow-require-arrow? arrow))) + (when (and (equal? (var-arrow-start-text arrow) + (var-arrow-start-text binding-arrow)) + (equal? (var-arrow-start-pos-left arrow) + (var-arrow-start-pos-left binding-arrow)) + (equal? (var-arrow-start-pos-right arrow) + (var-arrow-start-pos-right binding-arrow))) + (add-one (var-arrow-end-text arrow) + (var-arrow-end-pos-left arrow) + (var-arrow-end-pos-right arrow)))))))]))) identifiers-hash) get-identifiers-hash)