Skip to content

Commit 422418b

Browse files
committed
move classification of "keywords" to racket-lexer*
Instead of hardwiring the Racket-oriented preference about indentation into syntax coloring in `racket:text<%>`, communicate that preference for `racket-lexer*` to handle. That way, when a dufferent lexer is used (e.g., for a shrubbery-based language), the preference will not be incorrectly applied to a different language.
1 parent cebf1b1 commit 422418b

2 files changed

Lines changed: 18 additions & 11 deletions

File tree

gui-lib/framework/private/racket.rkt

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,10 @@
66
(require string-constants
77
racket/class
88
racket/string
9+
racket/promise
910
mred/mred-sig
1011
syntax-color/module-lexer
12+
syntax-color/racket-lexer
1113
syntax-color/racket-indentation
1214
syntax-color/racket-navigation
1315
"collapsed-snipclass-helpers.rkt"
@@ -1365,27 +1367,28 @@
13651367
(|{| |}|)))
13661368

13671369
(define (wrap-get-token get-token- get-tabify-pref)
1370+
(define (set-type-sym type sym) (if (hash? type) (hash-set type 'type sym) sym))
1371+
(define (type-val type key) (and (hash? type) (hash-ref type key #f)))
13681372
(define wrapped-get-token
13691373
(cond
13701374
[(procedure-arity-includes? get-token- 3)
13711375
(λ (in offset mode)
13721376
(define-values (lexeme type paren start end backup-delta new-mode)
1373-
(get-token- in offset mode))
1377+
(parameterize ([current-lexeme->semantic-type-guess (make-lexeme->semantic-type-guess get-tabify-pref)])
1378+
(get-token- in offset mode)))
13741379
(cond
1375-
[(and (eq? type 'symbol)
1376-
(string? lexeme)
1377-
(get-head-sexp-type-from-prefs lexeme (get-tabify-pref)))
1378-
(values lexeme 'keyword paren start end backup-delta new-mode)]
1380+
[(memq (type-val type 'semantic-type-guess) '(keyword builtin))
1381+
(values lexeme (set-type-sym type 'keyword) paren start end backup-delta new-mode)]
13791382
[else
13801383
(values lexeme type paren start end backup-delta new-mode)]))]
13811384
[else
13821385
(λ (in)
1383-
(define-values (lexeme type paren start end) (get-token- in))
1386+
(define-values (lexeme type paren start end)
1387+
(parameterize ([current-lexeme->semantic-type-guess (make-lexeme->semantic-type-guess get-tabify-pref)])
1388+
(get-token- in)))
13841389
(cond
1385-
[(and (eq? type 'symbol)
1386-
(string? lexeme)
1387-
(get-head-sexp-type-from-prefs lexeme (get-tabify-pref)))
1388-
(values lexeme 'keyword paren start end)]
1390+
[(memq (type-val type 'semantic-type-guess) '(keyword builtin))
1391+
(values lexeme (set-type-sym type 'keyword) paren start end)]
13891392
[else
13901393
(values lexeme type paren start end)]))]))
13911394
(procedure-rename wrapped-get-token
@@ -1397,6 +1400,10 @@
13971400
(define (get-head-sexp-type-from-prefs text pref)
13981401
((racket-tabify-table->head-sexp-type pref) text))
13991402

1403+
(define (make-lexeme->semantic-type-guess get-tabify-pref)
1404+
(let ([lexeme->head-sexp-type/promise (delay (racket-tabify-table->head-sexp-type (get-tabify-pref)))])
1405+
(lambda (lexeme)
1406+
(and ((force lexeme->head-sexp-type/promise) lexeme) 'keyword))))
14001407

14011408
;; in-position? : text (list symbol) -> boolean
14021409
;; determines if the cursor is currently sitting in a particular

gui-lib/info.rkt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
"data-lib"
77
["icons" #:version "1.3"]
88
["base" #:version "8.3.0.3"]
9-
["syntax-color-lib" #:version "1.6"]
9+
["syntax-color-lib" #:version "1.7"]
1010
["draw-lib" #:version "1.18"]
1111
["snip-lib" #:version "1.6"]
1212
"wxme-lib"

0 commit comments

Comments
 (0)