Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 12 additions & 2 deletions main.rkt
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,9 @@
rebellion/type/record
resyntax/base
resyntax/default-recommendations
resyntax/default-recommendations/analyzers/identifier-usage
resyntax/default-recommendations/analyzers/ignored-result-values
resyntax/default-recommendations/analyzers/variable-mutability
resyntax/private/analysis
resyntax/private/comment-reader
resyntax/private/git
Expand Down Expand Up @@ -206,7 +209,11 @@

(define results
(with-handlers ([exn:fail? skip])
(define analysis (source-analyze source #:lines lines))
(define analysis (source-analyze source
#:lines lines
#:analyzers (list identifier-usage-analyzer
ignored-result-values-analyzer
variable-mutability-analyzer)))
(refactor-visited-forms
#:analysis analysis #:suite effective-suite #:comments comments #:lines lines)))

Expand Down Expand Up @@ -234,7 +241,10 @@
(with-handlers ([exn:fail:syntax? skip]
[exn:fail:filesystem:missing-module? skip]
[exn:fail:contract:variable? skip])
(define analysis (source-analyze source))
(define analysis (source-analyze source
#:analyzers (list identifier-usage-analyzer
ignored-result-values-analyzer
variable-mutability-analyzer)))
(source-code-analysis-added-syntax-properties analysis)))


Expand Down
45 changes: 36 additions & 9 deletions private/analysis.rkt
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,9 @@

(provide
(contract-out
[source-analyze (->* (source?) (#:lines range-set?) source-code-analysis?)]
[source-analyze (->* (source? #:analyzers (listof expansion-analyzer?))
(#:lines range-set?)
source-code-analysis?)]
[source-code-analysis? (-> any/c boolean?)]
[source-code-analysis-code (-> source-code-analysis? source?)]
[source-code-analysis-visited-forms (-> source-code-analysis? (listof syntax?))]
Expand Down Expand Up @@ -56,7 +58,9 @@
(code visited-forms expansion-time-output namespace added-syntax-properties))


(define (source-analyze code #:lines [lines (range-set (unbounded-range #:comparator natural<=>))])
(define (source-analyze code
#:lines [lines (range-set (unbounded-range #:comparator natural<=>))]
#:analyzers analyzers)
(define ns (make-base-namespace))
(parameterize ([current-directory (or (source-directory code) (current-directory))]
[current-namespace ns])
Expand Down Expand Up @@ -136,13 +140,11 @@
#:into (into-sorted-map syntax-path<=>)))

(define expansion-analyzer-props
(transduce (sequence-append
(syntax-property-bundle-entries
(expansion-analyze identifier-usage-analyzer expanded))
(syntax-property-bundle-entries
(expansion-analyze ignored-result-values-analyzer expanded))
(syntax-property-bundle-entries
(expansion-analyze variable-mutability-analyzer expanded)))
(transduce analyzers
(append-mapping
(λ (analyzer)
(syntax-property-bundle-entries
(expansion-analyze analyzer expanded))))
#:into into-syntax-property-bundle))

(define expansion-analyzer-props-adjusted-for-visits
Expand Down Expand Up @@ -234,3 +236,28 @@
(define (extract-module-require-spec mod-stx)
(syntax-parse mod-stx
[(_ name _ . _) `',(syntax-e #'name)]))


(module+ test
(require rackunit)

(test-case "source-analyze with custom analyzers list"
;; Test that source-analyze accepts an analyzers parameter
(define test-source (string-source "#lang racket/base (define x 1)"))

;; Test with empty analyzers list
(define analysis-empty (source-analyze test-source #:analyzers '()))
(check-true (source-code-analysis? analysis-empty))

;; Test with single analyzer
(define analysis-single
(source-analyze test-source #:analyzers (list identifier-usage-analyzer)))
(check-true (source-code-analysis? analysis-single))

;; Test with default analyzers (should match default behavior)
(define analysis-default
(source-analyze test-source
#:analyzers (list identifier-usage-analyzer
ignored-result-values-analyzer
variable-mutability-analyzer)))
(check-true (source-code-analysis? analysis-default))))