~ chicken-core (chicken-5) 8b46d1936fc5782c739014cbfe6af2d32ff3319a
commit 8b46d1936fc5782c739014cbfe6af2d32ff3319a
Author: megane <meganeka@gmail.com>
AuthorDate: Mon Nov 19 13:45:43 2018 +0200
Commit: Evan Hanson <evhan@foldling.org>
CommitDate: Sat Mar 9 20:30:05 2019 +1300
Pretty print deprecation messages
Signed-off-by: Evan Hanson <evhan@foldling.org>
diff --git a/scrutinizer.scm b/scrutinizer.scm
index 469df25a..26ca3237 100644
--- a/scrutinizer.scm
+++ b/scrutinizer.scm
@@ -219,18 +219,15 @@
((char? lit) 'char)
(else '*)))
- (define (global-result id loc)
+ (define (global-result id loc node)
(cond ((variable-mark id '##compiler#type) =>
(lambda (a)
(cond
((eq? a 'deprecated)
- (report loc "use of deprecated `~a'" id)
+ (r-deprecated-identifier loc node id)
'(*))
((and (pair? a) (eq? (car a) 'deprecated))
- (report
- loc
- "use of deprecated `~a' - consider `~a'"
- id (cadr a))
+ (r-deprecated-identifier loc node id (cadr a))
'(*))
(else (list a)))))
(else '(*))))
@@ -243,7 +240,7 @@
=> cdr)
(else #f)))
- (define (variable-result id e loc flow)
+ (define (variable-result id e loc node flow)
(cond ((blist-type id flow) => list)
((and (not strict)
(db-get db id 'assigned)
@@ -258,7 +255,7 @@
(real-name id db))
'(*))
(else (list (cdr a))))))
- (else (global-result id loc))))
+ (else (global-result id loc node))))
(define (always-true1 t)
(cond ((pair? t)
@@ -451,7 +448,7 @@
((quote) (list (constant-result (first params))))
((##core#undefined) '(*))
((##core#proc) '(procedure))
- ((##core#variable) (variable-result (first params) e loc flow))
+ ((##core#variable) (variable-result (first params) e loc n flow))
((##core#inline_ref)
(list (foreign-type->scrutiny-type (second params) 'result)))
((##core#inline_loc_ref)
@@ -2497,7 +2494,7 @@
(define (variable-from-module sym)
(let ((r (string-split (symbol->string sym) "#" #t)))
(if (= (length r) 2)
- (sprintf "`~a', imported from `~a'," (second r) (first r))
+ (sprintf "`~a' from module `~a'" (second r) (first r))
(sprintf "`~a'" sym))))
(define (report2 report-f location-node-candidates loc msg . args)
@@ -2802,4 +2799,23 @@
(type->pp-string atype)
var
(type->pp-string xptype)))
+
+(define (r-deprecated-identifier loc node id #!optional suggestion)
+ (report2
+ warning
+ (list node)
+ loc
+ (string-append
+ "In expression"
+ "~%~%"
+ "~a"
+ "~%~%"
+ "Use of deprecated identifier ~a."
+ "~a")
+ (pp-fragment node) ;; TODO: parent node would be nice here
+ (variable-from-module id)
+ (if suggestion
+ (sprintf "~%~%The suggested alternative is ~a."
+ (variable-from-module suggestion))
+ "")))
)
diff --git a/tests/scrutinizer-message-format.expected b/tests/scrutinizer-message-format.expected
index 0b14ab47..2f1d3aa4 100644
--- a/tests/scrutinizer-message-format.expected
+++ b/tests/scrutinizer-message-format.expected
@@ -13,7 +13,7 @@ Warning: Type mismatch (test-scrutinizer-message-format.scm:XXX)
Procedure `cons' is called with 1 argument but 2 arguments are expected.
- Procedure `cons', imported from `scheme', has type
+ Procedure `cons' from module `scheme' has type
('aXXX 'bXXX --> (pair 'aXXX 'bXXX))
@@ -31,7 +31,7 @@ Warning: Type mismatch (test-scrutinizer-message-format.scm:XXX)
list
- Procedure `length', imported from `scheme', has type
+ Procedure `length' from module `scheme' has type
(list -> fixnum)
@@ -82,7 +82,7 @@ Note: Type mismatch (test-scrutinizer-message-format.scm:XXX)
Predicate call will always return true.
- Procedure `list?', imported from `scheme', is a predicate for
+ Procedure `list?' from module `scheme' is a predicate for
list
@@ -98,7 +98,7 @@ Note: Type mismatch (test-scrutinizer-message-format.scm:XXX)
Predicate call will always return false.
- Procedure `symbol?', imported from `scheme', is a predicate for
+ Procedure `symbol?' from module `scheme' is a predicate for
symbol
@@ -194,11 +194,23 @@ Warning: Type mismatch
boolean
-Warning: In `r-deprecated-identifier', a toplevel procedure
- use of deprecated `deprecated-foo'
+Warning: Type mismatch
+ In `r-deprecated-identifier', a toplevel procedure
+ In expression
+
+ deprecated-foo
-Warning: In `r-deprecated-identifier', a toplevel procedure
- use of deprecated `deprecated-foo2' - consider `foo'
+ Use of deprecated identifier `deprecated-foo'.
+
+Warning: Type mismatch
+ In `r-deprecated-identifier', a toplevel procedure
+ In expression
+
+ deprecated-foo2
+
+ Use of deprecated identifier `deprecated-foo2'.
+
+ The suggested alternative is `foo'.
Warning: Type mismatch
At toplevel
@@ -260,7 +272,7 @@ Warning: Type mismatch (test-scrutinizer-message-format.scm:XXX)
Procedure `cons' is called with 1 argument but 2 arguments are expected.
- Procedure `cons', imported from `scheme', has type
+ Procedure `cons' from module `scheme' has type
('aXXX 'bXXX --> (pair 'aXXX 'bXXX))
@@ -280,7 +292,7 @@ Warning: Type mismatch (test-scrutinizer-message-format.scm:XXX)
list
- Procedure `length', imported from `scheme', has type
+ Procedure `length' from module `scheme' has type
(list -> fixnum)
@@ -343,7 +355,7 @@ Note: Type mismatch (test-scrutinizer-message-format.scm:XXX)
Predicate call will always return true.
- Procedure `list?', imported from `scheme', is a predicate for
+ Procedure `list?' from module `scheme' is a predicate for
list
@@ -361,7 +373,7 @@ Note: Type mismatch (test-scrutinizer-message-format.scm:XXX)
Predicate call will always return false.
- Procedure `symbol?', imported from `scheme', is a predicate for
+ Procedure `symbol?' from module `scheme' is a predicate for
symbol
@@ -471,15 +483,27 @@ Warning: Type mismatch
boolean
-Warning: In `m#toplevel-foo', a toplevel procedure
+Warning: Type mismatch
+ In `m#toplevel-foo', a toplevel procedure
In `local-bar', a local procedure
In `r-deprecated-identifier', a local procedure
- use of deprecated `m#deprecated-foo'
+ In expression
-Warning: In `m#toplevel-foo', a toplevel procedure
+ m#deprecated-foo
+
+ Use of deprecated identifier `deprecated-foo' from module `m'.
+
+Warning: Type mismatch
+ In `m#toplevel-foo', a toplevel procedure
In `local-bar', a local procedure
In `r-deprecated-identifier', a local procedure
- use of deprecated `m#deprecated-foo2' - consider `foo'
+ In expression
+
+ m#deprecated-foo2
+
+ Use of deprecated identifier `deprecated-foo2' from module `m'.
+
+ The suggested alternative is `foo'.
Warning: In `m#toplevel-foo', a toplevel procedure
In `local-bar', a local procedure
diff --git a/tests/scrutiny-2.expected b/tests/scrutiny-2.expected
index 42973f87..b6223a26 100644
--- a/tests/scrutiny-2.expected
+++ b/tests/scrutiny-2.expected
@@ -9,7 +9,7 @@ Note: Type mismatch (scrutiny-tests-2.scm:XXX)
Predicate call will always return true.
- Procedure `pair?', imported from `scheme', is a predicate for
+ Procedure `pair?' from module `scheme' is a predicate for
pair
@@ -25,7 +25,7 @@ Note: Type mismatch (scrutiny-tests-2.scm:XXX)
Predicate call will always return false.
- Procedure `pair?', imported from `scheme', is a predicate for
+ Procedure `pair?' from module `scheme' is a predicate for
pair
@@ -41,7 +41,7 @@ Note: Type mismatch (scrutiny-tests-2.scm:XXX)
Predicate call will always return false.
- Procedure `pair?', imported from `scheme', is a predicate for
+ Procedure `pair?' from module `scheme' is a predicate for
pair
@@ -57,7 +57,7 @@ Note: Type mismatch (scrutiny-tests-2.scm:XXX)
Predicate call will always return false.
- Procedure `pair?', imported from `scheme', is a predicate for
+ Procedure `pair?' from module `scheme' is a predicate for
pair
@@ -73,7 +73,7 @@ Note: Type mismatch (scrutiny-tests-2.scm:XXX)
Predicate call will always return false.
- Procedure `pair?', imported from `scheme', is a predicate for
+ Procedure `pair?' from module `scheme' is a predicate for
pair
@@ -89,7 +89,7 @@ Note: Type mismatch (scrutiny-tests-2.scm:XXX)
Predicate call will always return true.
- Procedure `list?', imported from `scheme', is a predicate for
+ Procedure `list?' from module `scheme' is a predicate for
list
@@ -105,7 +105,7 @@ Note: Type mismatch (scrutiny-tests-2.scm:XXX)
Predicate call will always return true.
- Procedure `list?', imported from `scheme', is a predicate for
+ Procedure `list?' from module `scheme' is a predicate for
list
@@ -121,7 +121,7 @@ Note: Type mismatch (scrutiny-tests-2.scm:XXX)
Predicate call will always return false.
- Procedure `list?', imported from `scheme', is a predicate for
+ Procedure `list?' from module `scheme' is a predicate for
list
@@ -137,7 +137,7 @@ Note: Type mismatch (scrutiny-tests-2.scm:XXX)
Predicate call will always return false.
- Procedure `list?', imported from `scheme', is a predicate for
+ Procedure `list?' from module `scheme' is a predicate for
list
@@ -153,7 +153,7 @@ Note: Type mismatch (scrutiny-tests-2.scm:XXX)
Predicate call will always return true.
- Procedure `null?', imported from `scheme', is a predicate for
+ Procedure `null?' from module `scheme' is a predicate for
null
@@ -169,7 +169,7 @@ Note: Type mismatch (scrutiny-tests-2.scm:XXX)
Predicate call will always return true.
- Procedure `null?', imported from `scheme', is a predicate for
+ Procedure `null?' from module `scheme' is a predicate for
null
@@ -185,7 +185,7 @@ Note: Type mismatch (scrutiny-tests-2.scm:XXX)
Predicate call will always return false.
- Procedure `null?', imported from `scheme', is a predicate for
+ Procedure `null?' from module `scheme' is a predicate for
null
@@ -201,7 +201,7 @@ Note: Type mismatch (scrutiny-tests-2.scm:XXX)
Predicate call will always return false.
- Procedure `null?', imported from `scheme', is a predicate for
+ Procedure `null?' from module `scheme' is a predicate for
null
@@ -217,7 +217,7 @@ Note: Type mismatch (scrutiny-tests-2.scm:XXX)
Predicate call will always return false.
- Procedure `null?', imported from `scheme', is a predicate for
+ Procedure `null?' from module `scheme' is a predicate for
null
@@ -233,7 +233,7 @@ Note: Type mismatch (scrutiny-tests-2.scm:XXX)
Predicate call will always return true.
- Procedure `fixnum?', imported from `chicken.base', is a predicate for
+ Procedure `fixnum?' from module `chicken.base' is a predicate for
fixnum
@@ -249,7 +249,7 @@ Note: Type mismatch (scrutiny-tests-2.scm:XXX)
Predicate call will always return false.
- Procedure `fixnum?', imported from `chicken.base', is a predicate for
+ Procedure `fixnum?' from module `chicken.base' is a predicate for
fixnum
@@ -265,7 +265,7 @@ Note: Type mismatch (scrutiny-tests-2.scm:XXX)
Predicate call will always return true.
- Procedure `flonum?', imported from `chicken.base', is a predicate for
+ Procedure `flonum?' from module `chicken.base' is a predicate for
float
@@ -281,7 +281,7 @@ Note: Type mismatch (scrutiny-tests-2.scm:XXX)
Predicate call will always return false.
- Procedure `flonum?', imported from `chicken.base', is a predicate for
+ Procedure `flonum?' from module `chicken.base' is a predicate for
float
@@ -297,7 +297,7 @@ Note: Type mismatch (scrutiny-tests-2.scm:XXX)
Predicate call will always return true.
- Procedure `number?', imported from `scheme', is a predicate for
+ Procedure `number?' from module `scheme' is a predicate for
number
@@ -313,7 +313,7 @@ Note: Type mismatch (scrutiny-tests-2.scm:XXX)
Predicate call will always return true.
- Procedure `number?', imported from `scheme', is a predicate for
+ Procedure `number?' from module `scheme' is a predicate for
number
@@ -329,7 +329,7 @@ Note: Type mismatch (scrutiny-tests-2.scm:XXX)
Predicate call will always return true.
- Procedure `number?', imported from `scheme', is a predicate for
+ Procedure `number?' from module `scheme' is a predicate for
number
@@ -345,7 +345,7 @@ Note: Type mismatch (scrutiny-tests-2.scm:XXX)
Predicate call will always return false.
- Procedure `number?', imported from `scheme', is a predicate for
+ Procedure `number?' from module `scheme' is a predicate for
number
diff --git a/tests/scrutiny.expected b/tests/scrutiny.expected
index 9a20f85b..f2bbdee6 100644
--- a/tests/scrutiny.expected
+++ b/tests/scrutiny.expected
@@ -67,7 +67,7 @@ Warning: Type mismatch (scrutiny-tests.scm:XXX)
Procedure `string?' is called with 0 arguments but 1 argument is expected.
- Procedure `string?', imported from `scheme', has type
+ Procedure `string?' from module `scheme' has type
(* -> boolean)
@@ -105,7 +105,7 @@ Warning: Type mismatch (scrutiny-tests.scm:XXX)
number
- Procedure `+', imported from `scheme', has type
+ Procedure `+' from module `scheme' has type
(#!rest number -> number)
@@ -123,7 +123,7 @@ Warning: Type mismatch (scrutiny-tests.scm:XXX)
number
- Procedure `+', imported from `scheme', has type
+ Procedure `+' from module `scheme' has type
(#!rest number -> number)
@@ -184,7 +184,7 @@ Warning: Type mismatch (scrutiny-tests.scm:XXX)
string
- Procedure `string-append', imported from `scheme', has type
+ Procedure `string-append' from module `scheme' has type
(#!rest string -> string)
@@ -220,7 +220,7 @@ Warning: Type mismatch (scrutiny-tests.scm:XXX)
number
- Procedure `+', imported from `scheme', has type
+ Procedure `+' from module `scheme' has type
(#!rest number -> number)
@@ -238,7 +238,7 @@ Warning: Type mismatch (scrutiny-tests.scm:XXX)
number
- Procedure `+', imported from `scheme', has type
+ Procedure `+' from module `scheme' has type
(#!rest number -> number)
@@ -256,7 +256,7 @@ Warning: Type mismatch (scrutiny-tests.scm:XXX)
number
- Procedure `+', imported from `scheme', has type
+ Procedure `+' from module `scheme' has type
(#!rest number -> number)
@@ -274,7 +274,7 @@ Warning: Type mismatch (scrutiny-tests.scm:XXX)
number
- Procedure `+', imported from `scheme', has type
+ Procedure `+' from module `scheme' has type
(#!rest number -> number)
@@ -310,7 +310,7 @@ Warning: Type mismatch (scrutiny-tests.scm:XXX)
number
- Procedure `+', imported from `scheme', has type
+ Procedure `+' from module `scheme' has type
(#!rest number -> number)
@@ -344,7 +344,7 @@ Warning: Type mismatch (scrutiny-tests.scm:XXX)
string
- Procedure `string-append', imported from `scheme', has type
+ Procedure `string-append' from module `scheme' has type
(#!rest string -> string)
@@ -384,7 +384,7 @@ Warning: Type mismatch (scrutiny-tests.scm:XXX)
number
- Procedure `*', imported from `scheme', has type
+ Procedure `*' from module `scheme' has type
(#!rest number -> number)
@@ -402,15 +402,27 @@ Warning: Type mismatch (scrutiny-tests.scm:XXX)
number
- Procedure `+', imported from `scheme', has type
+ Procedure `+' from module `scheme' has type
(#!rest number -> number)
-Warning: At toplevel
- use of deprecated `deprecated-procedure'
+Warning: Type mismatch
+ At toplevel
+ In expression
-Warning: At toplevel
- use of deprecated `another-deprecated-procedure' - consider `replacement-procedure'
+ deprecated-procedure
+
+ Use of deprecated identifier `deprecated-procedure'.
+
+Warning: Type mismatch
+ At toplevel
+ In expression
+
+ another-deprecated-procedure
+
+ Use of deprecated identifier `another-deprecated-procedure'.
+
+ The suggested alternative is `replacement-procedure'.
Warning: Type mismatch (scrutiny-tests.scm:XXX)
At toplevel
@@ -456,7 +468,7 @@ Note: Type mismatch (scrutiny-tests.scm:XXX)
Predicate call will always return true.
- Procedure `fixnum?', imported from `chicken.base', is a predicate for
+ Procedure `fixnum?' from module `chicken.base' is a predicate for
fixnum
@@ -472,7 +484,7 @@ Note: Type mismatch (scrutiny-tests.scm:XXX)
Predicate call will always return false.
- Procedure `symbol?', imported from `scheme', is a predicate for
+ Procedure `symbol?' from module `scheme' is a predicate for
symbol
@@ -488,7 +500,7 @@ Note: Type mismatch (scrutiny-tests.scm:XXX)
Predicate call will always return false.
- Procedure `string?', imported from `scheme', is a predicate for
+ Procedure `string?' from module `scheme' is a predicate for
string
@@ -520,7 +532,7 @@ Note: Type mismatch (scrutiny-tests.scm:XXX)
Predicate call will always return false.
- Procedure `symbol?', imported from `scheme', is a predicate for
+ Procedure `symbol?' from module `scheme' is a predicate for
symbol
@@ -536,7 +548,7 @@ Note: Type mismatch (scrutiny-tests.scm:XXX)
Predicate call will always return false.
- Procedure `string?', imported from `scheme', is a predicate for
+ Procedure `string?' from module `scheme' is a predicate for
string
@@ -552,7 +564,7 @@ Note: Type mismatch (scrutiny-tests.scm:XXX)
Predicate call will always return false.
- Procedure `symbol?', imported from `scheme', is a predicate for
+ Procedure `symbol?' from module `scheme' is a predicate for
symbol
@@ -568,7 +580,7 @@ Note: Type mismatch (scrutiny-tests.scm:XXX)
Predicate call will always return false.
- Procedure `string?', imported from `scheme', is a predicate for
+ Procedure `string?' from module `scheme' is a predicate for
string
@@ -584,7 +596,7 @@ Note: Type mismatch (scrutiny-tests.scm:XXX)
Predicate call will always return false.
- Procedure `symbol?', imported from `scheme', is a predicate for
+ Procedure `symbol?' from module `scheme' is a predicate for
symbol
@@ -600,7 +612,7 @@ Note: Type mismatch (scrutiny-tests.scm:XXX)
Predicate call will always return false.
- Procedure `string?', imported from `scheme', is a predicate for
+ Procedure `string?' from module `scheme' is a predicate for
string
@@ -685,7 +697,7 @@ Warning: Type mismatch (scrutiny-tests.scm:XXX)
fixnum
- Procedure `vector-ref', imported from `scheme', has type
+ Procedure `vector-ref' from module `scheme' has type
((vector-of 'a384) fixnum -> 'a384)
@@ -712,7 +724,7 @@ Warning: Type mismatch (scrutiny-tests.scm:XXX)
fixnum
- Procedure `vector-set!', imported from `scheme', has type
+ Procedure `vector-set!' from module `scheme' has type
(vector fixnum * -> undefined)
@@ -745,7 +757,7 @@ Warning: Type mismatch (scrutiny-tests.scm:XXX)
fixnum
- Procedure `list-ref', imported from `scheme', has type
+ Procedure `list-ref' from module `scheme' has type
((list-of 'a366) fixnum -> 'a366)
@@ -763,7 +775,7 @@ Warning: Type mismatch (scrutiny-tests.scm:XXX)
fixnum
- Procedure `list-ref', imported from `scheme', has type
+ Procedure `list-ref' from module `scheme' has type
((list-of 'a366) fixnum -> 'a366)
@@ -781,7 +793,7 @@ Warning: Type mismatch (scrutiny-tests.scm:XXX)
fixnum
- Procedure `list-ref', imported from `scheme', has type
+ Procedure `list-ref' from module `scheme' has type
((list-of 'a366) fixnum -> 'a366)
@@ -799,7 +811,7 @@ Warning: Type mismatch (scrutiny-tests.scm:XXX)
fixnum
- Procedure `list-ref', imported from `scheme', has type
+ Procedure `list-ref' from module `scheme' has type
((list-of 'a366) fixnum -> 'a366)
@@ -817,7 +829,7 @@ Warning: Type mismatch (scrutiny-tests.scm:XXX)
number
- Procedure `add1', imported from `chicken.base', has type
+ Procedure `add1' from module `chicken.base' has type
(number -> number)
@@ -835,7 +847,7 @@ Warning: Type mismatch (scrutiny-tests.scm:XXX)
number
- Procedure `add1', imported from `chicken.base', has type
+ Procedure `add1' from module `chicken.base' has type
(number -> number)
@@ -853,7 +865,7 @@ Warning: Type mismatch (scrutiny-tests.scm:XXX)
number
- Procedure `add1', imported from `chicken.base', has type
+ Procedure `add1' from module `chicken.base' has type
(number -> number)
@@ -871,7 +883,7 @@ Warning: Type mismatch (scrutiny-tests.scm:XXX)
number
- Procedure `add1', imported from `chicken.base', has type
+ Procedure `add1' from module `chicken.base' has type
(number -> number)
@@ -889,7 +901,7 @@ Warning: Type mismatch (scrutiny-tests.scm:XXX)
number
- Procedure `add1', imported from `chicken.base', has type
+ Procedure `add1' from module `chicken.base' has type
(number -> number)
diff --git a/tests/specialization.expected b/tests/specialization.expected
index 40e7d61e..aa3d01b8 100644
--- a/tests/specialization.expected
+++ b/tests/specialization.expected
@@ -9,7 +9,7 @@ Note: Type mismatch (specialization-tests.scm:XXX)
Predicate call will always return true.
- Procedure `string?', imported from `scheme', is a predicate for
+ Procedure `string?' from module `scheme' is a predicate for
string
@@ -35,7 +35,7 @@ Note: Type mismatch (specialization-tests.scm:XXX)
Predicate call will always return false.
- Procedure `string?', imported from `scheme', is a predicate for
+ Procedure `string?' from module `scheme' is a predicate for
string
@@ -59,7 +59,7 @@ Note: Type mismatch (specialization-tests.scm:XXX)
Predicate call will always return true.
- Procedure `input-port?', imported from `scheme', is a predicate for
+ Procedure `input-port?' from module `scheme' is a predicate for
input-port
@@ -85,7 +85,7 @@ Note: Type mismatch (specialization-tests.scm:XXX)
Predicate call will always return true.
- Procedure `output-port?', imported from `scheme', is a predicate for
+ Procedure `output-port?' from module `scheme' is a predicate for
output-port
Trap