~ 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-portTrap