It is worth pointing out that Check Syntax does not see the result of your reader, it sees the fully-expanded module and performs its analysis from there. Therefore, it can be useful to use the macro stepper with macro hiding disabled to inspect the fully-expanded module to make sure that the information at least appears to be in place.
In the case of your language, I would use the macro stepper to ensure the following three things are happening: 1. The `sum` identifier appears in binding position in the fully-expanded program, and it has the appropriate source location information. 2. The `sum` identifier also appears in use position in the fully-expanded program, and it has distinct source location information from the identifier in binding position. 3. Both identifiers are syntax-original?. If those things are all the case, it’s difficult for me to say much more without looking at the code itself. (As an aside, you should probably be providing the first argument of my-read-syntax as the first argument to `parse` instead of (object-name in), but I’m not sure if that’s at all related to the issue here.) > On Feb 13, 2018, at 23:33, Sorawee Porncharoenwase > <sorawee_porncharoenw...@brown.edu> wrote: > > I have a similar problem but I can't figure out a way to fix it yet > :( > > So, when I hover on `sum` on line 3, I get "no bound occurrences". > That's definitely false since the program runs fine, and `sum` has a > bound occurrence below (e.g., line 5). > > I print the syntax objects passed into `#%module-begin` in the REPL. > The srcloc seems right to me. > > What baffles me further is that when I follow Robby's suggestion to > insert a printf inside check-syntax code: > > (printf "~a ~a ~a\n" stx-obj (syntax-source stx-obj) (syntax-line stx-obj)) > > I get the following result (only relevant lines shown) > > #<syntax temp1> #f #f > #<syntax temp1> #f #f > #<syntax:3:20 s> string 3 > #<syntax:3:23 id> string 3 > #<syntax temp1> #f #f > #<syntax:3:9 id> string 3 > #<syntax f3> #f #f > #<syntax:5:0 sum> string 5 > #<syntax temp9> #f #f > #<syntax temp9> #f #f > #<syntax:7:16 sum> string 7 > #<syntax:7:21 id> string 7 > #<syntax:7:29 id> string 7 > #<syntax temp9> #f #f > #<syntax:7:10 z> string 7 > ... > > So: the sum on line 3 is either missing or somehow becomes `#<syntax > temp1> #f #f` > > And sum on line 7 has a correct srcloc, except that the syntax-source > somehow changes from `'unsaved-editor` to `string`?!? > > FYI, I use megaparsack's `parse-syntax-string` like this: > > (define (parse src in) > (define len (string-length "#lang recursive-language")) > (parse-result! > (parse-syntax-string toplevel/p > (datum->syntax #f (port->string in) > (list src 1 len (add1 len) 0)))) > > And this is my module reader > > (module reader racket > (require syntax/strip-context) > (require "parser.rkt") > (provide (rename-out [my-read-syntax read-syntax] > [my-read read])) > (define (my-read in) (syntax->datum (my-read-syntax #f in))) > (define (my-read-syntax _ in) > (datum->syntax #f > `(module src recursive-language > ,@(parse (object-name in) in))))) > > Any idea how to fix this? Also feel free to suggest anything that you > find wrong -- this is the first time I touch the reader! > > Thank you :) -- You received this message because you are subscribed to the Google Groups "Racket Users" group. To unsubscribe from this group and stop receiving emails from it, send an email to racket-users+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.